summaryrefslogtreecommitdiffstats
path: root/contrib/bind/bin
diff options
context:
space:
mode:
authordougb <dougb@FreeBSD.org>2002-07-01 01:07:56 +0000
committerdougb <dougb@FreeBSD.org>2002-07-01 01:07:56 +0000
commit67c9dec97554c34ae92f7d669f1c0de844fcf4c8 (patch)
tree3212d35c5abe2389cdb3a7d42620ae08e2b6167d /contrib/bind/bin
parentea2af26043626cce55951657dd0c8d5ba39ab935 (diff)
parentf4bd5053ab2eb505b16099244427d9e93442fe90 (diff)
downloadFreeBSD-src-67c9dec97554c34ae92f7d669f1c0de844fcf4c8.zip
FreeBSD-src-67c9dec97554c34ae92f7d669f1c0de844fcf4c8.tar.gz
This commit was generated by cvs2svn to compensate for changes in r99179,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/bind/bin')
-rw-r--r--contrib/bind/bin/addr/addr.c15
-rw-r--r--contrib/bind/bin/dig/dig.c35
-rw-r--r--contrib/bind/bin/host/host.c10
-rw-r--r--contrib/bind/bin/named/db_defs.h4
-rw-r--r--contrib/bind/bin/named/db_glue.c4
-rw-r--r--contrib/bind/bin/named/db_save.c4
-rw-r--r--contrib/bind/bin/named/db_tsig.c4
-rw-r--r--contrib/bind/bin/named/named.conf2
-rw-r--r--contrib/bind/bin/named/ns_config.c4
-rw-r--r--contrib/bind/bin/named/ns_ctl.c102
-rw-r--r--contrib/bind/bin/named/ns_defs.h9
-rw-r--r--contrib/bind/bin/named/ns_forw.c12
-rw-r--r--contrib/bind/bin/named/ns_glob.h3
-rw-r--r--contrib/bind/bin/named/ns_ixfr.c8
-rw-r--r--contrib/bind/bin/named/ns_lexer.c3
-rw-r--r--contrib/bind/bin/named/ns_main.c58
-rw-r--r--contrib/bind/bin/named/ns_maint.c13
-rw-r--r--contrib/bind/bin/named/ns_parser.y7
-rw-r--r--contrib/bind/bin/named/ns_req.c4
-rw-r--r--contrib/bind/bin/named/ns_resp.c21
-rw-r--r--contrib/bind/bin/named/ns_signal.c4
-rw-r--r--contrib/bind/bin/named/ns_update.c8
-rw-r--r--contrib/bind/bin/named/ns_xfr.c14
-rw-r--r--contrib/bind/bin/ndc/ndc.c186
-rw-r--r--contrib/bind/bin/nslookup/Makefile7
-rw-r--r--contrib/bind/bin/nslookup/send.c4
26 files changed, 453 insertions, 92 deletions
diff --git a/contrib/bind/bin/addr/addr.c b/contrib/bind/bin/addr/addr.c
index a693391..ae48ea5 100644
--- a/contrib/bind/bin/addr/addr.c
+++ b/contrib/bind/bin/addr/addr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: addr.c,v 8.8 1999/10/13 16:38:55 vixie Exp $";
+static const char rcsid[] = "$Id: addr.c,v 8.9 2002/05/21 02:26:21 marka Exp $";
#endif /* not lint */
/*
@@ -47,11 +47,7 @@ usage() {
/* Warning: this scribbles on `dst' even if it's going to return `0'. */
static int
-hexstring(src, dst, len)
- const char *src;
- u_char *dst;
- int len;
-{
+hexstring(const char *src, u_char *dst, int len) {
static const char xdigits[] = "0123456789abcdef";
u_char *ptr = dst, *end = dst + len;
u_int val;
@@ -100,12 +96,7 @@ hexstring(src, dst, len)
}
static void
-display(input, af, addr, len)
- const char *input;
- int af;
- const u_char *addr;
- int len;
-{
+display(const char *input, int af, const u_char *addr, int len) {
static int before = 0;
char p[sizeof "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:255.255.255.255"];
int i;
diff --git a/contrib/bind/bin/dig/dig.c b/contrib/bind/bin/dig/dig.c
index 2054258..5bb6e7a 100644
--- a/contrib/bind/bin/dig/dig.c
+++ b/contrib/bind/bin/dig/dig.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char rcsid[] = "$Id: dig.c,v 8.54 2002/04/24 00:38:08 marka Exp $";
+static const char rcsid[] = "$Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $";
#endif
/*
@@ -245,6 +245,7 @@ static int print_axfr(FILE *output, const u_char *msg,
static struct timeval difftv(struct timeval, struct timeval);
static void prnttime(struct timeval);
static void stackarg(char *, char **);
+static void reverse6(char *, struct in6_addr *);
/* Public. */
@@ -289,6 +290,8 @@ main(int argc, char **argv) {
int wait=0, delay;
int envset=0, envsave=0;
struct __res_state res_x, res_t;
+ int r;
+ struct in6_addr in6;
ns_tsig_key key;
char *keyfile = NULL, *keyname = NULL;
@@ -494,6 +497,11 @@ main(int argc, char **argv) {
printf("; no arg for -x?\n");
break;
}
+ r = inet_pton(AF_INET6, addrc, &in6);
+ if (r > 0) {
+ reverse6(domain, &in6);
+ break;
+ }
addrend = addrc + strlen(addrc);
if (*addrend == '.')
*addrend = '\0';
@@ -813,7 +821,7 @@ main(int argc, char **argv) {
buf, sizeof(buf));
break;
case AF_INET6:
- inet_ntop(AF_INET,
+ inet_ntop(AF_INET6,
&u[0].sin6.sin6_addr,
buf, sizeof(buf));
break;
@@ -1030,7 +1038,7 @@ where: server,\n\
fputs("\
notes: defname and search don't work; use fully-qualified names.\n\
this is DiG version " VSTRING "\n\
- $Id: dig.c,v 8.54 2002/04/24 00:38:08 marka Exp $\n\
+ $Id: dig.c,v 8.57 2002/06/18 02:26:49 marka Exp $\n\
", stderr);
}
@@ -1775,3 +1783,24 @@ stackarg(char *l, char **y) {
}
}
}
+
+static void
+reverse6(char *domain, struct in6_addr *in6) {
+ sprintf(domain, "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
+ in6->s6_addr[15] & 0x0f, (in6->s6_addr[15] >> 4) & 0x0f,
+ in6->s6_addr[14] & 0x0f, (in6->s6_addr[14] >> 4) & 0x0f,
+ in6->s6_addr[13] & 0x0f, (in6->s6_addr[13] >> 4) & 0x0f,
+ in6->s6_addr[12] & 0x0f, (in6->s6_addr[12] >> 4) & 0x0f,
+ in6->s6_addr[11] & 0x0f, (in6->s6_addr[11] >> 4) & 0x0f,
+ in6->s6_addr[10] & 0x0f, (in6->s6_addr[10] >> 4) & 0x0f,
+ in6->s6_addr[9] & 0x0f, (in6->s6_addr[9] >> 4) & 0x0f,
+ in6->s6_addr[8] & 0x0f, (in6->s6_addr[8] >> 4) & 0x0f,
+ in6->s6_addr[7] & 0x0f, (in6->s6_addr[7] >> 4) & 0x0f,
+ in6->s6_addr[6] & 0x0f, (in6->s6_addr[6] >> 4) & 0x0f,
+ in6->s6_addr[5] & 0x0f, (in6->s6_addr[5] >> 4) & 0x0f,
+ in6->s6_addr[4] & 0x0f, (in6->s6_addr[4] >> 4) & 0x0f,
+ in6->s6_addr[6] & 0x0f, (in6->s6_addr[3] >> 4) & 0x0f,
+ in6->s6_addr[2] & 0x0f, (in6->s6_addr[2] >> 4) & 0x0f,
+ in6->s6_addr[1] & 0x0f, (in6->s6_addr[1] >> 4) & 0x0f,
+ in6->s6_addr[0] & 0x0f, (in6->s6_addr[0] >> 4) & 0x0f);
+}
diff --git a/contrib/bind/bin/host/host.c b/contrib/bind/bin/host/host.c
index 84b3621..5bac200 100644
--- a/contrib/bind/bin/host/host.c
+++ b/contrib/bind/bin/host/host.c
@@ -1,5 +1,5 @@
#ifndef lint
-static const char rcsid[] = "$Id: host.c,v 8.52 2002/04/28 01:34:52 marka Exp $";
+static const char rcsid[] = "$Id: host.c,v 8.53 2002/06/18 02:34:02 marka Exp $";
#endif /* not lint */
/*
@@ -675,7 +675,7 @@ gethostinfo(char *name) {
static int
getdomaininfo(const char *name, const char *domain) {
- int val1, val2;
+ int val1, val2, val3;
if (querytype)
return (getinfo(name, domain, gettype=querytype));
@@ -683,8 +683,9 @@ getdomaininfo(const char *name, const char *domain) {
val1 = getinfo(name, domain, gettype=ns_t_a);
if (cname || verbose)
return (val1);
- val2 = getinfo(name, domain, gettype=ns_t_mx);
- return (val1 || val2);
+ val2 = getinfo(name, domain, gettype=ns_t_aaaa);
+ val3 = getinfo(name, domain, gettype=ns_t_mx);
+ return (val1 || val2 || val3);
}
}
@@ -1582,6 +1583,7 @@ static const char *
pr_type(int type) {
if (!verbose) switch (type) {
case ns_t_a:
+ case ns_t_aaaa:
return ("has address");
case ns_t_cname:
return ("is a nickname for");
diff --git a/contrib/bind/bin/named/db_defs.h b/contrib/bind/bin/named/db_defs.h
index 72aa19f..68869f0 100644
--- a/contrib/bind/bin/named/db_defs.h
+++ b/contrib/bind/bin/named/db_defs.h
@@ -1,6 +1,6 @@
/*
* from db.h 4.16 (Berkeley) 6/1/90
- * $Id: db_defs.h,v 8.46 2001/11/17 15:16:46 marka Exp $
+ * $Id: db_defs.h,v 8.47 2002/05/18 01:02:53 marka Exp $
*/
/*
@@ -147,7 +147,7 @@ struct databuf {
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)
+#define BIND_DATASIZE(n) (sizeof(struct databuf) - sizeof(void*) + n)
#ifdef HITCOUNTS
extern u_int32_t db_total_hits;
diff --git a/contrib/bind/bin/named/db_glue.c b/contrib/bind/bin/named/db_glue.c
index e984db1..2e966f5 100644
--- a/contrib/bind/bin/named/db_glue.c
+++ b/contrib/bind/bin/named/db_glue.c
@@ -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.46 2001/11/25 23:52:19 marka Exp $";
+static const char rcsid[] = "$Id: db_glue.c,v 8.47 2002/05/18 01:02:54 marka Exp $";
#endif /* not lint */
/*
@@ -441,7 +441,7 @@ nhash(const char *name) {
static void
db_freedata(struct databuf *dp) {
- int bytes = DATASIZE(dp->d_size);
+ int bytes = BIND_DATASIZE(dp->d_size);
if (dp->d_rcnt != 0)
panic("db_freedata: d_rcnt != 0", NULL);
diff --git a/contrib/bind/bin/named/db_save.c b/contrib/bind/bin/named/db_save.c
index 2153e04..a8f4d2a 100644
--- a/contrib/bind/bin/named/db_save.c
+++ b/contrib/bind/bin/named/db_save.c
@@ -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.29 2001/04/25 13:53:09 marka Exp $";
+static const char rcsid[] = "$Id: db_save.c,v 8.30 2002/05/18 01:02:56 marka Exp $";
#endif /* not lint */
/*
@@ -137,7 +137,7 @@ savedata(class, type, ttl, data, size)
int size;
{
struct databuf *dp;
- int bytes = DATASIZE(size);
+ int bytes = BIND_DATASIZE(size);
dp = (struct databuf *)memget(bytes);
if (dp == NULL)
diff --git a/contrib/bind/bin/named/db_tsig.c b/contrib/bind/bin/named/db_tsig.c
index 5f7b670..9bdba0e 100644
--- a/contrib/bind/bin/named/db_tsig.c
+++ b/contrib/bind/bin/named/db_tsig.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: db_tsig.c,v 8.7 2001/06/18 14:42:59 marka Exp $";
+static const char rcsid[] = "$Id: db_tsig.c,v 8.8 2002/05/21 02:34:32 marka Exp $";
#endif /* not lint */
/*
@@ -129,7 +129,7 @@ tsig_alg_value(char *name) {
DST_KEY *
tsig_key_from_addr(struct in_addr addr) {
- server_info si = si = find_server(addr);
+ server_info si = find_server(addr);
if (si == NULL || si->key_list == NULL || si->key_list->first == NULL)
return(NULL);
return(si->key_list->first->key);
diff --git a/contrib/bind/bin/named/named.conf b/contrib/bind/bin/named/named.conf
index d0d2996..7d81695 100644
--- a/contrib/bind/bin/named/named.conf
+++ b/contrib/bind/bin/named/named.conf
@@ -267,6 +267,8 @@ zone "non-default-acl.demo.zone" {
acl key_acl { key sample_key; }; // a request signed with sample_key
server 1.2.3.4 {
+ edns no; // if no, we won't send ends queries
+ // to this server
bogus no; // if yes, we won't query or listen
// to this server
transfer-format one-answer; // set transfer format for this
diff --git a/contrib/bind/bin/named/ns_config.c b/contrib/bind/bin/named/ns_config.c
index 1680d91..ad4de85 100644
--- a/contrib/bind/bin/named/ns_config.c
+++ b/contrib/bind/bin/named/ns_config.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_config.c,v 8.134 2002/04/25 05:27:04 marka Exp $";
+static const char rcsid[] = "$Id: ns_config.c,v 8.135 2002/05/24 03:04:59 marka Exp $";
#endif /* not lint */
/*
@@ -2549,6 +2549,7 @@ new_server(struct in_addr address) {
si->flags |= SERVER_INFO_SUPPORT_IXFR;
else
si->flags &= ~SERVER_INFO_SUPPORT_IXFR;
+ si->flags |= SERVER_INFO_EDNS;
return (si);
}
@@ -2649,6 +2650,7 @@ set_server_option(server_config sc, int bool_opt, int value) {
switch (bool_opt) {
case SERVER_INFO_BOGUS:
case SERVER_INFO_SUPPORT_IXFR:
+ case SERVER_INFO_EDNS:
if (value)
si->flags |= bool_opt;
else
diff --git a/contrib/bind/bin/named/ns_ctl.c b/contrib/bind/bin/named/ns_ctl.c
index ee77634..c8fc907 100644
--- a/contrib/bind/bin/named/ns_ctl.c
+++ b/contrib/bind/bin/named/ns_ctl.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_ctl.c,v 8.46 2001/12/19 11:53:48 marka Exp $";
+static const char rcsid[] = "$Id: ns_ctl.c,v 8.47 2002/06/24 07:11:07 marka Exp $";
#endif /* not lint */
/*
@@ -112,6 +112,8 @@ static void verb_stop(struct ctl_sctx *, struct ctl_sess *,
static void verb_exec(struct ctl_sctx *, struct ctl_sess *,
const struct ctl_verb *,
const char *, u_int, const void *, void *);
+static void exec_closure(struct ctl_sctx *, struct ctl_sess *,
+ void *);
static void verb_reload(struct ctl_sctx *, struct ctl_sess *,
const struct ctl_verb *,
const char *, u_int, const void *, void *);
@@ -141,6 +143,9 @@ static void verb_help(struct ctl_sctx *, struct ctl_sess *,
static void verb_quit(struct ctl_sctx *, struct ctl_sess *,
const struct ctl_verb *,
const char *, u_int, const void *, void *);
+static void verb_args(struct ctl_sctx *, struct ctl_sess *,
+ const struct ctl_verb *,
+ const char *, u_int, const void *, void *);
/* Private data. */
@@ -162,6 +167,7 @@ static struct ctl_verb verbs[] = {
{ "qrylog", verb_querylog, "qrylog"},
{ "help", verb_help, "help"},
{ "quit", verb_quit, "quit"},
+ { "args", verb_args, "args"},
{ NULL, NULL, NULL}
};
@@ -794,14 +800,26 @@ verb_exec(struct ctl_sctx *ctl, struct ctl_sess *sess,
saved_argv[0], save);
ctl_response(sess, 502, save, 0, NULL, NULL, NULL,
NULL, 0);
+ } else if (user_name != NULL || group_name != NULL) {
+ ctl_response(sess, 502,
+ "can't exec as user or group was specified",
+ 0, NULL, NULL, NULL, NULL, 0);
} else {
- ns_need(main_need_restart);
ctl_response(sess, 250, "Restart initiated.", 0, NULL,
- NULL, NULL, NULL, 0);
+ exec_closure, NULL, NULL, 0);
}
}
static void
+exec_closure(struct ctl_sctx *sctx, struct ctl_sess *sess, void *uap) {
+
+ UNUSED(sctx);
+ UNUSED(sess);
+ UNUSED(uap);
+ ns_need(main_need_restart);
+}
+
+static void
verb_reload(struct ctl_sctx *ctl, struct ctl_sess *sess,
const struct ctl_verb *verb, const char *rest,
u_int respflags, const void *respctx, void *uctx)
@@ -1049,3 +1067,81 @@ verb_quit(struct ctl_sctx *ctl, struct ctl_sess *sess,
ctl_response(sess, 221, "End of control session.", CTL_EXIT, NULL,
NULL, NULL, NULL, 0);
}
+
+static char hex[] = "0123456789abcdef";
+
+struct pvt_args {
+ int argc;
+ char text[MAX_STR_LEN];
+};
+
+static void
+args_closure(struct ctl_sctx *sctx, struct ctl_sess *sess, void *uap) {
+ struct pvt_args *pvt = ctl_getcsctx(sess);
+
+ UNUSED(sctx);
+ UNUSED(uap);
+
+ memput(pvt, sizeof *pvt);
+ ctl_setcsctx(sess, NULL);
+}
+
+static void
+verb_args(struct ctl_sctx *ctl, struct ctl_sess *sess,
+ const struct ctl_verb *verb, const char *rest,
+ u_int respflags, const void *respctx, void *uctx)
+{
+ struct pvt_args *pvt = ctl_getcsctx(sess);
+ char *cp, *tp;
+
+ UNUSED(ctl);
+ UNUSED(verb);
+ UNUSED(rest);
+ UNUSED(respflags);
+ UNUSED(respctx);
+ UNUSED(uctx);
+
+ if (pvt == NULL) {
+ unsigned int i = 0;
+ pvt = memget(sizeof *pvt);
+ if (pvt == NULL) {
+ ctl_response(sess, 505, "(out of memory)",
+ 0, NULL, NULL, NULL, NULL, 0);
+ return;
+ }
+ pvt->argc = 0;
+ ctl_setcsctx(sess, pvt);
+
+ /* Send the arguement count. */
+ while (saved_argv[i] != NULL)
+ i++;
+ sprintf(pvt->text, "%u", i);
+ ctl_response(sess, 250, pvt->text, CTL_MORE,
+ NULL, args_closure, NULL, NULL, 0);
+ return;
+ }
+
+ /*
+ * Percent escape arguement.
+ */
+ cp = saved_argv[pvt->argc++];
+ tp = pvt->text;
+ while (cp && *cp != NULL)
+ if (*cp == '%' || *cp == ' ' ||
+ !isprint((unsigned char)*cp)) {
+ if (tp >= pvt->text + sizeof(pvt->text) - 4)
+ break;
+ *tp++ = '%';
+ *tp++ = hex[(*cp>>4)&0xf];
+ *tp++ = hex[(*cp++)&0xf];
+ } else {
+ if (tp >= pvt->text + sizeof(pvt->text) - 2)
+ break;
+ *tp++ = *cp++;
+ }
+ *tp = '\0';
+
+ ctl_response(sess, 250, pvt->text,
+ saved_argv[pvt->argc] == NULL ? 0 : CTL_MORE,
+ NULL, args_closure, NULL, NULL, 0);
+}
diff --git a/contrib/bind/bin/named/ns_defs.h b/contrib/bind/bin/named/ns_defs.h
index 3474550..f8bb976 100644
--- a/contrib/bind/bin/named/ns_defs.h
+++ b/contrib/bind/bin/named/ns_defs.h
@@ -1,6 +1,6 @@
/*
* from ns.h 4.33 (Berkeley) 8/23/90
- * $Id: ns_defs.h,v 8.118 2002/04/25 05:27:06 marka Exp $
+ * $Id: ns_defs.h,v 8.121 2002/06/26 03:27:19 marka Exp $
*/
/*
@@ -172,9 +172,8 @@ typedef enum need {
main_need_restart, /* exec() needed. */
main_need_reap, /* need to reap dead children. */
main_need_noexpired, /* ns_reconfig() needed w/ noexpired set. */
- main_need_num, /* number of needs, used for array bound. */
- main_need_tick, /* tick every second to poll for cleanup (NT) */
- main_need_tryxfer /* attemt to start a zone transfer. */
+ main_need_tryxfer, /* attemt to start a zone transfer. */
+ main_need_num /* MUST BE LAST. */
} main_need;
/* What global options are set? */
@@ -438,6 +437,7 @@ enum zonetype { z_nil, z_master, z_slave, z_hint, z_stub, z_forward,
#define XFER_SUCCESSAXFR 4 /* named-xfr recived a xfr */
#define XFER_SUCCESSIXFR 5 /* named-xfr recived a ixfr */
#define XFER_SUCCESSAXFRIXFRFILE 6 /* named-xfr received AXFR for IXFR */
+#define XFER_REFUSED 7 /* one master returned REFUSED */
#define XFER_ISAXFR -1 /* the last XFR is AXFR */
#define XFER_ISIXFR -2 /* the last XFR is IXFR */
#define XFER_ISAXFRIXFR -3 /* the last XFR is AXFR but we must create IXFR base */
@@ -835,6 +835,7 @@ typedef struct server_config {
#define SERVER_INFO_BOGUS 0x01
#define SERVER_INFO_SUPPORT_IXFR 0x02
+#define SERVER_INFO_EDNS 0x04
typedef struct server_info {
struct in_addr address;
diff --git a/contrib/bind/bin/named/ns_forw.c b/contrib/bind/bin/named/ns_forw.c
index 494a96a..746257b 100644
--- a/contrib/bind/bin/named/ns_forw.c
+++ b/contrib/bind/bin/named/ns_forw.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_forw.c 4.32 (Berkeley) 3/3/91";
-static const char rcsid[] = "$Id: ns_forw.c,v 8.90 2002/02/22 05:12:35 marka Exp $";
+static const char rcsid[] = "$Id: ns_forw.c,v 8.91 2002/05/24 03:04:57 marka Exp $";
#endif /* not lint */
/*
@@ -612,6 +612,11 @@ nslookup(struct databuf *nsp[], struct qinfo *qp,
qs->nsdata = dp;
qs->forwarder = 0;
qs->noedns = dp->d_noedns;
+ if (!qs->noedns) {
+ server_info si = find_server(nsa);
+ if (si && (si->flags & SERVER_INFO_EDNS) == 0)
+ qs->noedns = 1;
+ }
qs->nretry = 0;
/*
* If this A RR has no RTT, initialize its RTT to a
@@ -1285,6 +1290,11 @@ nsfwdadd(struct qinfo *qp, struct fwdinfo *fwd) {
qs->nsdata = fwd->fwddata->nsdata;
qs->forwarder = 1;
qs->noedns = fwd->fwddata->nsdata->d_noedns;
+ if (!qs->noedns) {
+ server_info si = find_server(qs->ns_addr.sin_addr);
+ if (si && (si->flags & SERVER_INFO_EDNS) == 0)
+ qs->noedns = 1;
+ }
qs->nretry = 0;
n++;
nextfwd:
diff --git a/contrib/bind/bin/named/ns_glob.h b/contrib/bind/bin/named/ns_glob.h
index 7f382d5..8f052f5 100644
--- a/contrib/bind/bin/named/ns_glob.h
+++ b/contrib/bind/bin/named/ns_glob.h
@@ -1,6 +1,6 @@
/*
* from ns.h 4.33 (Berkeley) 8/23/90
- * $Id: ns_glob.h,v 8.57 2001/11/12 21:22:26 marka Exp $
+ * $Id: ns_glob.h,v 8.58 2002/06/05 04:53:50 marka Exp $
*/
/*
@@ -336,6 +336,7 @@ DECL char * user_name INIT(NULL);
DECL gid_t group_id;
DECL char * group_name INIT(NULL);
DECL char * chroot_dir INIT(NULL);
+DECL char * working_dir INIT(NULL);
DECL int loading INIT(0);
diff --git a/contrib/bind/bin/named/ns_ixfr.c b/contrib/bind/bin/named/ns_ixfr.c
index f14019e..0492bc0 100644
--- a/contrib/bind/bin/named/ns_ixfr.c
+++ b/contrib/bind/bin/named/ns_ixfr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_ixfr.c,v 8.31 2002/01/02 05:15:20 marka Exp $";
+static const char rcsid[] = "$Id: ns_ixfr.c,v 8.32 2002/05/18 01:02:57 marka Exp $";
#endif /* not lint */
/*
@@ -201,10 +201,10 @@ sx_send_ixfr(struct qstream *qsp) {
ns_panic(ns_log_update, 1,
"sx_send_ixfr: unable to locate soa");
}
- old_soadp = memget(DATASIZE(soa_dp->d_size));
+ old_soadp = memget(BIND_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));
+ memcpy(old_soadp, soa_dp, BIND_DATASIZE(soa_dp->d_size));
again:
switch (qsp->xfr.state) {
@@ -383,7 +383,7 @@ sx_send_ixfr(struct qstream *qsp) {
qsp->xfr.top.ixfr = NULL;
}
cleanup:
- memput(old_soadp, DATASIZE(old_soadp->d_size));
+ memput(old_soadp, BIND_DATASIZE(old_soadp->d_size));
}
diff --git a/contrib/bind/bin/named/ns_lexer.c b/contrib/bind/bin/named/ns_lexer.c
index b10219a..b827162 100644
--- a/contrib/bind/bin/named/ns_lexer.c
+++ b/contrib/bind/bin/named/ns_lexer.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_lexer.c,v 8.30 2002/04/25 05:27:08 marka Exp $";
+static const char rcsid[] = "$Id: ns_lexer.c,v 8.31 2002/05/24 03:05:03 marka Exp $";
#endif /* not lint */
/*
@@ -251,6 +251,7 @@ static struct keyword keywords[] = {
{"directory", T_DIRECTORY},
{"dump-file", T_DUMP_FILE},
{"dynamic", T_DYNAMIC},
+ {"edns", T_EDNS},
{"explicit", T_EXPLICIT},
{"fail", T_FAIL},
{"fake-iquery", T_FAKE_IQUERY},
diff --git a/contrib/bind/bin/named/ns_main.c b/contrib/bind/bin/named/ns_main.c
index d839387..f12f285 100644
--- a/contrib/bind/bin/named/ns_main.c
+++ b/contrib/bind/bin/named/ns_main.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_main.c 4.55 (Berkeley) 7/1/91";
-static const char rcsid[] = "$Id: ns_main.c,v 8.157 2002/04/13 23:26:16 marka Exp $";
+static const char rcsid[] = "$Id: ns_main.c,v 8.160 2002/06/24 07:06:55 marka Exp $";
#endif /* not lint */
/*
@@ -99,8 +99,10 @@ char copyright[] =
#ifdef SVR4 /* XXX */
# include <sys/sockio.h>
#else
+#ifndef __hpux
# include <sys/mbuf.h>
#endif
+#endif
#include <netinet/in.h>
#include <net/route.h>
@@ -174,7 +176,7 @@ static u_int16_t nsid_c1, nsid_c2, nsid_c3;
static u_int16_t nsid_state2;
static int nsid_algorithm;
-static int needs = 0, needs_exit = 0;
+static int needs = 0, needs_exit = 0, needs_restart = 0;
static handler handlers[main_need_num];
static void savedg_waitfunc(evContext, void*, const void*);
static void need_waitfunc(evContext, void *, const void *);
@@ -309,14 +311,7 @@ main(int argc, char *argv[]) {
break;
case 'w':
- if (chdir(optarg) < 0) {
- syslog(LOG_CRIT, bad_directory, optarg,
- strerror(errno));
- fprintf(stderr, bad_directory, optarg,
- strerror(errno));
- fputc('\n', stderr);
- exit(1);
- }
+ working_dir = savestr(optarg, 1);
break;
#ifdef QRYLOG
case 'q':
@@ -434,6 +429,19 @@ main(int argc, char *argv[]) {
chroot_dir = freestr(chroot_dir);
#endif
}
+ /*
+ * Set working directory.
+ */
+ if (working_dir != NULL) {
+ if (chdir(working_dir) < 0) {
+ syslog(LOG_CRIT, bad_directory, working_dir,
+ strerror(errno));
+ fprintf(stderr, bad_directory, working_dir,
+ strerror(errno));
+ fputc('\n', stderr);
+ exit(1);
+ }
+ }
/* Establish global event context. */
evCreate(&ev);
@@ -550,7 +558,10 @@ main(int argc, char *argv[]) {
else
INSIST_ERR(errno == EINTR);
}
- ns_info(ns_log_default, "named shutting down");
+ if (needs_restart)
+ ns_info(ns_log_default, "named restarting");
+ else
+ ns_info(ns_log_default, "named shutting down");
#ifdef BIND_UPDATE
dynamic_about_to_exit();
#endif
@@ -563,8 +574,11 @@ main(int argc, char *argv[]) {
else
shutdown_configuration();
- /* Cleanup for system-dependent stuff */
- custom_shutdown();
+ if (needs_restart)
+ execvp(saved_argv[0], saved_argv);
+ else
+ /* Cleanup for system-dependent stuff */
+ custom_shutdown();
return (0);
}
@@ -2746,6 +2760,9 @@ deallocate_everything(void) {
if (chroot_dir != NULL)
freestr(chroot_dir);
chroot_dir = NULL;
+ if (working_dir != NULL)
+ freestr(working_dir);
+ working_dir = NULL;
if (nsid_pool != NULL)
memput(nsid_pool, 0x10000 * (sizeof(u_int16_t)));
nsid_pool = NULL;
@@ -2764,19 +2781,8 @@ deallocate_everything(void) {
static void
ns_restart(void) {
- ns_info(ns_log_default, "named restarting");
-#ifdef BIND_UPDATE
- dynamic_about_to_exit();
-#endif
- if (server_options && server_options->pid_filename)
- (void)unlink(server_options->pid_filename);
- ns_logstats(ev, NULL, evNowTime(), evConsTime(0, 0));
- if (NS_OPTION_P(OPTION_DEALLOC_ON_EXIT))
- deallocate_everything();
- else
- shutdown_configuration();
- execvp(saved_argv[0], saved_argv);
- abort();
+ needs_restart = 1;
+ needs_exit = 1;
}
static void
diff --git a/contrib/bind/bin/named/ns_maint.c b/contrib/bind/bin/named/ns_maint.c
index 82df685..be4b6f9 100644
--- a/contrib/bind/bin/named/ns_maint.c
+++ b/contrib/bind/bin/named/ns_maint.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_maint.c 4.39 (Berkeley) 3/2/91";
-static const char rcsid[] = "$Id: ns_maint.c,v 8.135 2002/04/25 05:27:10 marka Exp $";
+static const char rcsid[] = "$Id: ns_maint.c,v 8.136 2002/06/26 03:27:20 marka Exp $";
#endif /* not lint */
/*
@@ -1681,6 +1681,17 @@ endxfer() {
sched_zone_maint(zp);
break;
+ case XFER_REFUSED:
+ if (!(zp->z_flags & Z_SYSLOGGED)) {
+ zp->z_flags |= Z_SYSLOGGED;
+ ns_error(ns_log_xfer_in,
+ "zoneref: Masters for slave zone \"%s\" REFUSED transfer",
+ zp->z_origin);
+ }
+ ns_retrytime(zp, tt.tv_sec);
+ sched_zone_maint(zp);
+ break;
+
default:
if (!(zp->z_flags & Z_SYSLOGGED)) {
zp->z_flags |= Z_SYSLOGGED;
diff --git a/contrib/bind/bin/named/ns_parser.y b/contrib/bind/bin/named/ns_parser.y
index 8e62962..79f34b1 100644
--- a/contrib/bind/bin/named/ns_parser.y
+++ b/contrib/bind/bin/named/ns_parser.y
@@ -1,6 +1,6 @@
%{
#if !defined(lint) && !defined(SABER)
-static char rcsid[] = "$Id: ns_parser.y,v 8.79 2002/04/25 05:27:13 marka Exp $";
+static char rcsid[] = "$Id: ns_parser.y,v 8.80 2002/05/24 03:05:01 marka Exp $";
#endif /* not lint */
/*
@@ -191,6 +191,7 @@ int yyparse();
%token T_TRANSFERS
%token T_KEYS
%token T_SUPPORT_IXFR
+%token T_EDNS
/* Items used for "zone" statements: */
%token T_ZONE
@@ -1268,6 +1269,10 @@ server_info: T_BOGUS yea_or_nay
set_server_transfer_format(current_server, $2);
}
| T_KEYS '{' key_list '}'
+ | T_EDNS yea_or_nay
+ {
+ set_server_option(current_server, SERVER_INFO_EDNS, $2);
+ }
| error
;
diff --git a/contrib/bind/bin/named/ns_req.c b/contrib/bind/bin/named/ns_req.c
index 1a1d756..6aca04a 100644
--- a/contrib/bind/bin/named/ns_req.c
+++ b/contrib/bind/bin/named/ns_req.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_req.c 4.47 (Berkeley) 7/1/91";
-static const char rcsid[] = "$Id: ns_req.c,v 8.168 2002/04/30 03:43:52 marka Exp $";
+static const char rcsid[] = "$Id: ns_req.c,v 8.169 2002/05/12 23:41:52 marka Exp $";
#endif /* not lint */
/*
@@ -560,6 +560,8 @@ ns_req(u_char *msg, int msglen, int buflen, struct qstream *qsp,
hp->arcount = htons(0);
cp = msg + HFIXEDSZ;
cp += ns_skiprr(cp, msg + msglen, ns_s_qd, ntohs(hp->qdcount));
+ ns_name_rollback(cp, (const u_char **)dnptrs,
+ (const u_char **)dnptrs_end);
if (opt > 0) {
n = ns_add_opt(msg, cp, buflen_orig, 0,
rcode, EDNS_MESSAGE_SZ, 0, NULL, 0);
diff --git a/contrib/bind/bin/named/ns_resp.c b/contrib/bind/bin/named/ns_resp.c
index 5be0038..91a3869 100644
--- a/contrib/bind/bin/named/ns_resp.c
+++ b/contrib/bind/bin/named/ns_resp.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_resp.c 4.65 (Berkeley) 3/3/91";
-static const char rcsid[] = "$Id: ns_resp.c,v 8.176 2002/04/17 07:10:10 marka Exp $";
+static const char rcsid[] = "$Id: ns_resp.c,v 8.178 2002/06/27 03:09:19 marka Exp $";
#endif /* not lint */
/*
@@ -288,7 +288,6 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
struct namebuf *np;
struct fwdinfo *fwd;
struct databuf *dp;
- int forcecmsg = 0;
char *tname = NULL;
int sendto_errno = 0;
int has_tsig, oldqlen = 0;
@@ -298,6 +297,7 @@ ns_resp(u_char *msg, int msglen, struct sockaddr_in from, struct qstream *qsp)
u_char sig[TSIG_SIG_SIZE];
time_t tsig_time;
DST_KEY *key;
+ int expect_cname;
nameserIncr(from.sin_addr, nssRcvdR);
nsp[0] = NULL;
@@ -924,6 +924,7 @@ tcp_retry:
} else
flushset = NULL;
+ expect_cname = 1;
for (i = 0; i < count; i++) {
struct databuf *dp;
int type;
@@ -955,6 +956,19 @@ tcp_retry:
type = dp->d_type;
if (i < ancount) {
/* Answer section. */
+ /*
+ * Check for attempts to overflow the buffer in
+ * getnameanswer.
+ */
+ if (type == ns_t_cname && !expect_cname) {
+ ns_warning(ns_log_security,
+ "late CNAME in answer section for %s %s from %s",
+ *qname ? qname : ".", p_type(qtype),
+ sin_ntoa(from));
+
+ } else if (type != ns_t_cname && type != ns_t_dname &&
+ type != ns_t_sig)
+ expect_cname = 0;
if (externalcname || ns_samename(name, aname) != 1) {
if (!externalcname)
ns_info(ns_log_resp_checks,
@@ -1220,12 +1234,11 @@ tcp_retry:
cache_n_resp(msg, msglen, from, qp->q_name,
qp->q_class, qp->q_type);
- if (!qp->q_cmsglen) {
+ if (!qp->q_cmsglen && validanswer) {
ns_debug(ns_log_default, 3,
"resp: leaving NO: auth = %d", hp->aa);
goto return_msg;
}
- forcecmsg = 1;
}
/*
diff --git a/contrib/bind/bin/named/ns_signal.c b/contrib/bind/bin/named/ns_signal.c
index 0820bfa..a8a957d 100644
--- a/contrib/bind/bin/named/ns_signal.c
+++ b/contrib/bind/bin/named/ns_signal.c
@@ -1,6 +1,6 @@
#if !defined(lint) && !defined(SABER)
static const char sccsid[] = "@(#)ns_main.c 4.55 (Berkeley) 7/1/91";
-static const char rcsid[] = "$Id: ns_signal.c,v 8.14 2001/06/18 14:43:25 marka Exp $";
+static const char rcsid[] = "$Id: ns_signal.c,v 8.15 2002/05/18 01:39:15 marka Exp $";
#endif /* not lint */
/*
@@ -87,8 +87,10 @@ static const char rcsid[] = "$Id: ns_signal.c,v 8.14 2001/06/18 14:43:25 marka E
#ifdef SVR4 /* XXX */
# include <sys/sockio.h>
#else
+#ifndef __hpux
# include <sys/mbuf.h>
#endif
+#endif
#include <netinet/in.h>
#include <net/route.h>
diff --git a/contrib/bind/bin/named/ns_update.c b/contrib/bind/bin/named/ns_update.c
index 774bd2c..b2b5b96 100644
--- a/contrib/bind/bin/named/ns_update.c
+++ b/contrib/bind/bin/named/ns_update.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_update.c,v 8.103 2002/01/03 00:25:02 marka Exp $";
+static const char rcsid[] = "$Id: ns_update.c,v 8.104 2002/05/18 01:02:59 marka Exp $";
#endif /* not lint */
/*
@@ -3010,9 +3010,9 @@ incr_serial(struct zoneinfo *zp) {
return (-1);
dp = findzonesoa(zp);
if (dp) {
- olddp = memget(DATASIZE(dp->d_size));
+ olddp = memget(BIND_DATASIZE(dp->d_size));
if (olddp != NULL) {
- memcpy(olddp, dp, DATASIZE(dp->d_size));
+ memcpy(olddp, dp, BIND_DATASIZE(dp->d_size));
cp = findsoaserial(olddp->d_data);
PUTLONG(old_serial, cp);
fprintf(ifp, "update: {delete} %s. %u %s %s ",
@@ -3021,7 +3021,7 @@ incr_serial(struct zoneinfo *zp) {
p_type(dp->d_type));
(void) rdata_dump(olddp, ifp);
fprintf(ifp, "\n");
- memput(olddp, DATASIZE(dp->d_size));
+ memput(olddp, BIND_DATASIZE(dp->d_size));
}
fprintf(ifp, "update: {add} %s. %u %s %s ",
zp->z_origin, dp->d_ttl,
diff --git a/contrib/bind/bin/named/ns_xfr.c b/contrib/bind/bin/named/ns_xfr.c
index d7a8505..7b1c99b 100644
--- a/contrib/bind/bin/named/ns_xfr.c
+++ b/contrib/bind/bin/named/ns_xfr.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ns_xfr.c,v 8.68 2002/04/11 05:19:06 marka Exp $";
+static const char rcsid[] = "$Id: ns_xfr.c,v 8.69 2002/06/05 03:53:49 marka Exp $";
#endif /* not lint */
/*
@@ -82,15 +82,21 @@ ns_xfr(struct qstream *qsp, struct namebuf *znp,
ns_deltalist *changes;
switch (type) {
- case ns_t_axfr: /*FALLTHROUGH*/
case ns_t_ixfr:
+ ns_info(ns_log_xfer_out,
+ "zone transfer (%s) of \"%s\" (%s) to %s serial %u -> %u",
+ p_type(type), zones[zone].z_origin, p_class(class),
+ sin_ntoa(qsp->s_from), serial_ixfr,
+ zones[zone].z_serial);
+ break;
+ case ns_t_axfr: /*FALLTHROUGH*/
#ifdef BIND_ZXFR
case ns_t_zxfr:
#endif
ns_info(ns_log_xfer_out,
- "zone transfer (%s) of \"%s\" (%s) to %s",
+ "zone transfer (%s) of \"%s\" (%s) to %s serial %u",
p_type(type), zones[zone].z_origin, p_class(class),
- sin_ntoa(qsp->s_from));
+ sin_ntoa(qsp->s_from), zones[zone].z_serial);
break;
default:
ns_warning(ns_log_xfer_out,
diff --git a/contrib/bind/bin/ndc/ndc.c b/contrib/bind/bin/ndc/ndc.c
index aa0e4a3..d077042 100644
--- a/contrib/bind/bin/ndc/ndc.c
+++ b/contrib/bind/bin/ndc/ndc.c
@@ -1,5 +1,5 @@
#if !defined(lint) && !defined(SABER)
-static const char rcsid[] = "$Id: ndc.c,v 1.21 2001/12/19 23:16:23 marka Exp $";
+static const char rcsid[] = "$Id: ndc.c,v 1.22 2002/06/24 07:28:55 marka Exp $";
#endif /* not lint */
/*
@@ -250,6 +250,179 @@ slashhelp(void) {
"toggle silence (suppresses nonfatal errors)");
}
+struct argv {
+ int argc;
+ char **argv;
+ int error;
+};
+
+static char hexdigits[] = "0123456789abcdef";
+
+static void
+getargs_closure(void *arg, const char *msg, int flags) {
+ struct argv *argv = arg;
+ int len;
+ int i;
+ const char *cp, *cp2;
+ char *tp, c;
+
+ UNUSED(flags);
+
+ if (argv->error)
+ return;
+
+ if (argv->argc == -1) {
+ i = atoi(msg + 4);
+ if (i < 1) {
+ argv->error = 1;
+ return;
+ }
+ argv->argc = i;
+ argv->argv = calloc((i+1), sizeof(char*));
+ return;
+ }
+ len = 0;
+ cp = msg + 4;
+ while (*cp != NULL) {
+ c = *cp;
+ if (c == '%') {
+ cp2 = strchr(hexdigits, cp[1]);
+ if (cp2 == NULL) {
+ argv->error = 1;
+ return;
+ }
+ c = (cp2-hexdigits) << 4;
+ cp2 = strchr(hexdigits, cp[2]);
+ if (cp2 == NULL) {
+ argv->error = 1;
+ return;
+ }
+ c += (cp2-hexdigits);
+ cp += 2;
+ }
+ if (!isalnum((unsigned)c)) {
+ switch (c) {
+ case '+': case '-': case '=': case '/': case '.':
+ break;
+ default:
+ len++;
+ }
+ }
+ len++;
+ cp++;
+ }
+ i = 0;
+ while (argv->argv[i] != NULL)
+ i++;
+ if (i >= argv->argc) {
+ argv->error = 1;
+ return;
+ }
+ argv->argv[i] = malloc(len + 1);
+ if (argv->argv[i] == NULL) {
+ argv->error = 1;
+ return;
+ }
+ cp = msg + 4;
+ tp = argv->argv[i];
+ while (*cp != NULL) {
+ c = *cp;
+ if (c == '%') {
+ cp2 = strchr(hexdigits, cp[1]);
+ if (cp2 == NULL) {
+ argv->error = 1;
+ return;
+ }
+ c = (cp2-hexdigits) << 4;
+ cp2 = strchr(hexdigits, cp[2]);
+ if (cp2 == NULL) {
+ argv->error = 1;
+ return;
+ }
+ c += (cp2-hexdigits);
+ cp += 2;
+ }
+ if (!isalnum((unsigned)c)) {
+ switch (c) {
+ case '+': case '-': case '=': case '/': case '.':
+ break;
+ default:
+ *tp = '\\';
+ }
+ }
+ *tp++ = c;
+ cp++;
+ }
+}
+
+static int
+get_args(char **restp) {
+ struct argv argv;
+ int len, i;
+ char *rest, *p;
+ int result = 1;
+
+ argv.argc = -1;
+ argv.argv = NULL;
+ argv.error = 0;
+
+ channel_loop("args", 1, getargs_closure, &argv);
+ if (argv.error) {
+ result = 0;
+ goto err;
+ }
+ len = 0;
+ for (i = 1 ; i < argv.argc && argv.argv[i] != NULL; i++)
+ len += strlen(argv.argv[i]) + 1;
+ rest = malloc(len);
+ if (rest == NULL) {
+ result = 0;
+ goto err;
+ }
+ p = rest;
+ for (i = 1 ; i < argv.argc && argv.argv[i] != NULL; i++) {
+ strcpy(p, argv.argv[i]);
+ p += strlen(argv.argv[i]);
+ *p++ = ' ';
+ }
+ if (p != rest)
+ p[-1] = '\0';
+ *restp = rest;
+
+ err:
+ if (argv.argv) {
+ for (i = 0 ; i < argv.argc && argv.argv[i] != NULL; i++)
+ free(argv.argv[i]);
+ free(argv.argv);
+ }
+ return (result);
+}
+
+static void
+exec_closure(void *arg, const char *msg, int flags) {
+ int *result = arg;
+ UNUSED(flags);
+ if (atoi(msg) == 250)
+ *result = 1;
+}
+
+static int
+try_exec(int local_quiet) {
+ int good = 0;
+ pid_t pid;
+
+ channel_loop("exec", 1, exec_closure, &good);
+
+ if (good) {
+ sleep(3);
+ if (!running(0, &pid))
+ error("name server has not restarted (yet?)");
+ else if (!local_quiet)
+ result("new pid is %ld", (long)pid);
+ }
+ return (good);
+}
+
static int
builtincmd(void) {
static const char spaces[] = " \t";
@@ -257,14 +430,18 @@ builtincmd(void) {
pid_t pid;
int save_quiet = quiet;
int len;
+ int freerest = 0;
quiet = 1;
len = strcspn(cmd, spaces);
rest = cmd + len;
- if (*rest != '\0') {
- rest++;
+ if (*rest != '\0')
rest += strspn(rest, spaces);
+ if (*rest == '\0' && !strncasecmp(cmd, "restart", len)) {
+ if (try_exec(save_quiet))
+ return (1);
+ freerest = get_args(&rest);
}
syscmd = malloc(strlen(named_path) + sizeof " " + strlen(rest));
if (syscmd == NULL)
@@ -274,6 +451,8 @@ builtincmd(void) {
strcat(syscmd, " ");
strcat(syscmd, rest);
}
+ if (freerest)
+ free(rest);
if (strncasecmp(cmd, "start", len) == 0) {
if (running(debug, &pid))
error("name server already running? (pid %ld)",
@@ -417,6 +596,7 @@ channel_loop(const char *cmdtext, int show, closure cl, void *ua) {
a.cl = cl;
a.ua = ua;
logger_show = show;
+ trace("command '%s'", cmdtext);
ctl = ctl_client(ev, client_addr, impute_addrlen(client_addr),
(struct sockaddr *)&server,
impute_addrlen((struct sockaddr *)&server),
diff --git a/contrib/bind/bin/nslookup/Makefile b/contrib/bind/bin/nslookup/Makefile
index 6680bc6..27073c1 100644
--- a/contrib/bind/bin/nslookup/Makefile
+++ b/contrib/bind/bin/nslookup/Makefile
@@ -13,7 +13,7 @@
## ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
## SOFTWARE.
-# $Id: Makefile,v 8.27 2001/01/31 08:44:43 marka Exp $
+# $Id: Makefile,v 8.28 2002/05/21 00:44:59 marka Exp $
DESTDIR=
CC= cc
@@ -31,7 +31,8 @@ A=a
O=o
EXE=
LEX = lex -I
-SYSLIBS = -ll -lutil
+SYSLIBS =-lutil
+LIBL=-ll
DESTBIN = /usr/local/bin
DESTSBIN = /usr/local/sbin
DESTEXEC = /usr/local/libexec
@@ -56,7 +57,7 @@ all: ${PROG}${EXE}
${PROG}${EXE}: ${OBJS} ${LIBBIND} Makefile
${CC} ${CDEBUG} ${LDFLAGS} ${BOUNDS} -o ${PROG}${EXE} ${OBJS} \
- ${LIBBIND} ${SYSLIBS}
+ ${LIBBIND} ${LIBL} ${SYSLIBS}
.c.${O}:
${CC} ${CPPFLAGS} ${CFLAGS} ${BOUNDS} -c $*.c
diff --git a/contrib/bind/bin/nslookup/send.c b/contrib/bind/bin/nslookup/send.c
index de60d21..738f66a 100644
--- a/contrib/bind/bin/nslookup/send.c
+++ b/contrib/bind/bin/nslookup/send.c
@@ -53,7 +53,7 @@
#ifndef lint
static const char sccsid[] = "@(#)send.c 5.18 (Berkeley) 3/2/91";
-static const char rcsid[] = "$Id: send.c,v 8.13 2002/04/09 05:55:23 marka Exp $";
+static const char rcsid[] = "$Id: send.c,v 8.14 2002/05/10 04:35:09 marka Exp $";
#endif /* not lint */
/*
@@ -291,7 +291,7 @@ SendRequest(union res_sockaddr_union *nsAddrPtr, const u_char *buf,
}
#else /* BSD */
if (sendto(s, (const char *)buf, buflen, 0,
- (struct sockaddr *) &nsAddrPtr,
+ (struct sockaddr *) nsAddrPtr,
clen) != buflen) {
if (res.options & RES_DEBUG)
perror("sendto");
OpenPOWER on IntegriCloud