summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authormurray <murray@FreeBSD.org>2002-04-01 07:54:44 +0000
committermurray <murray@FreeBSD.org>2002-04-01 07:54:44 +0000
commit36a33f96c7ec199e90836119ba21048b1cfe52f6 (patch)
treeffc01ec0a53f2bff71108e8647643d8d6f021f56 /contrib
parent52966059c3f8d89480894d7662d805eafc90c825 (diff)
parenta916d35e05e0f886097009e26d33c65a1ea5c370 (diff)
downloadFreeBSD-src-36a33f96c7ec199e90836119ba21048b1cfe52f6.zip
FreeBSD-src-36a33f96c7ec199e90836119ba21048b1cfe52f6.tar.gz
This commit was generated by cvs2svn to compensate for changes in r93507,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/isc-dhcp/Makefile.conf2
-rw-r--r--contrib/isc-dhcp/README8
-rw-r--r--contrib/isc-dhcp/RELNOTES78
-rw-r--r--contrib/isc-dhcp/common/conflex.c6
-rw-r--r--contrib/isc-dhcp/common/dns.c53
-rw-r--r--contrib/isc-dhcp/common/options.c28
-rw-r--r--contrib/isc-dhcp/common/print.c18
-rwxr-xr-xcontrib/isc-dhcp/configure1
-rw-r--r--contrib/isc-dhcp/includes/dhcpd.h15
-rw-r--r--contrib/isc-dhcp/includes/dhctoken.h7
-rw-r--r--contrib/isc-dhcp/includes/minires/minires.h7
-rw-r--r--contrib/isc-dhcp/includes/site.h5
-rw-r--r--contrib/isc-dhcp/includes/version.h2
-rw-r--r--contrib/isc-dhcp/minires/ns_parse.c60
-rw-r--r--contrib/isc-dhcp/minires/ns_verify.c19
15 files changed, 225 insertions, 84 deletions
diff --git a/contrib/isc-dhcp/Makefile.conf b/contrib/isc-dhcp/Makefile.conf
index a8c64ac..0958a94 100644
--- a/contrib/isc-dhcp/Makefile.conf
+++ b/contrib/isc-dhcp/Makefile.conf
@@ -215,7 +215,7 @@ MINORVERSION=MinorVersion
#CF = cf/rhapsody.h
#COPTS = -Ddarwin -Wall -Wno-unused -Wno-implicit -Wno-comment \
# -Wno-uninitialized -Wno-switch -Werror -pipe $(BINDDEF) $(CC_OPTIONS)
-##SCRIPT=rhapsody
+#SCRIPT=freebsd
##--darwin--
## NetBSD
diff --git a/contrib/isc-dhcp/README b/contrib/isc-dhcp/README
index 530eb71..dad9779 100644
--- a/contrib/isc-dhcp/README
+++ b/contrib/isc-dhcp/README
@@ -1,7 +1,7 @@
Internet Software Consortium DHCP Distribution
Version 3.0.1
- Release Candidate 6
- January 17, 2002
+ Release Candidate 8
+ February 21, 2002
README FILE
@@ -143,14 +143,14 @@ information. On Digital Unix, type ``man pfilt''.
To build the DHCP Distribution, unpack the compressed tar file using
the tar utility and the gzip command - type something like:
- zcat dhcp-3.0.1rc6.tar.gz |tar xvf -
+ zcat dhcp-3.0.1rc8.tar.gz |tar xvf -
On BSD/OS, you have to type gzcat, not zcat, and you may run into
similar problems on other operating systems.
CONFIGURING IT
-Now, cd to the dhcp-3.0.1rc6 subdirectory that you've just
+Now, cd to the dhcp-3.0.1rc8 subdirectory that you've just
created and configure the source tree by typing:
./configure
diff --git a/contrib/isc-dhcp/RELNOTES b/contrib/isc-dhcp/RELNOTES
index df58adc..7941094 100644
--- a/contrib/isc-dhcp/RELNOTES
+++ b/contrib/isc-dhcp/RELNOTES
@@ -1,7 +1,7 @@
Internet Software Consortium DHCP Distribution
Version 3.0.1
- Release Candidate 6
- January 17, 2002
+ Release Candidate 8
+ February 21, 2002
Release Notes
@@ -46,6 +46,80 @@ Murrell at BC Tel Advanced Communications. I'd like to express my
thanks to all of these good people here, both for working on the code
and for prodding me into improving it.
+ Changes since 3.0.1rc7
+
+- Fix two compiler warnings that are generated when compiling on Solaris
+ with gcc. These stop the build, even though they weren't actually
+ errors, because we prefer that our builds generate no warnings.
+
+ Changes since 3.0.1rc6
+
+- Don't allow a lease that's in the EXPIRED, RELEASED or RESET state
+ to be renewed.
+
+- Implement lease stealing for cases where the primary has fewer leases
+ than the secondary, as called for by the standard.
+
+- Add a fudge factor to the lease expiry acceptance code, (suggested
+ by Kevin Miller of CMU).
+
+- Fix a bug in permit_list_match that made it much too willing to say
+ that two permit lists matched.
+
+- Unless DEBUG_DNS_UPDATES is defined, print more user-friendly (and
+ also more compact) messages about DNS updates.
+
+- Fix a bug in generating wire-format domain names for the FQDN option.
+
+- Fix a bug where the FQDN option would not be returned if the client
+ requested it, contrary to the standard.
+
+- On Darwin, use the freebsd DHCP client script.
+
+- On NetBSD/sparc, don't check for casting warnings.
+
+- Add a flag in the DHCP client to disable updating the client's A
+ record when sending an FQDN option indicating that the client is
+ going to update its A record.
+
+- In the client, don't attempt a DNS update until one second after
+ configuring the new IP address, and if the update times out, keep
+ trying until a response, positive or negative, is received from the
+ DNS server.
+
+- Fix an uninitialized memory bug in the DHCP client.
+
+- Apply some FreeBSD-specific bug fixes suggested by Murray Stokely.
+
+- Fix a bug in ns_parserr(), where it was returning the wrong sort
+ of result code in some cases (suggested by Ben Harris of the
+ NetBSD project).
+
+- Fix a bug in is_identifier(), where it was checking against EOF
+ instead of the END_OF_FILE token (also suggested by Ben Harris).
+
+- Fix a bug where if an option universe contained no options, the
+ DHCP server could dump core (Walter Steiner).
+
+- Fix a bug in the handling of encapsulated options.
+
+- Fix a bug that prevented NWIP suboptions from being processed.
+
+- Delete the FTS_BOOTP and FTS_RESERVED states and implement them
+ as modifier flags to the FTS_ACTIVE state, as called for in the
+ failover protocol standard.
+
+- Fix bugs in the pool merging code that resulted in references and
+ dereferences of null pointers. This bug had no impact unless the
+ POINTER_DEBUG flag was defined.
+
+- In the server, added a do-forward-updates flag that can be used to
+ disable forward updates in all cases, so that sites that want the
+ clients to take sole responsibility for updating their A record can
+ do so.
+
+- Make it possible to disable optimization of PTR record updates.
+
Changes since 3.0.1rc5
- Include some new documentation and changes provided by Karl Auer.
diff --git a/contrib/isc-dhcp/common/conflex.c b/contrib/isc-dhcp/common/conflex.c
index ac73de5..34b6ab7 100644
--- a/contrib/isc-dhcp/common/conflex.c
+++ b/contrib/isc-dhcp/common/conflex.c
@@ -3,7 +3,7 @@
Lexical scanner for dhcpd config file... */
/*
- * Copyright (c) 1995-2001 Internet Software Consortium.
+ * Copyright (c) 1995-2002 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,7 +43,7 @@
#ifndef lint
static char copyright[] =
-"$Id: conflex.c,v 1.92.2.4 2002/01/10 19:35:59 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
+"$Id: conflex.c,v 1.92.2.5 2002/02/09 03:15:17 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -612,6 +612,8 @@ static enum dhcp_token intern (atom, dfv)
return DOMAIN;
if (!strcasecmp (atom + 1, "omain-name"))
return DOMAIN_NAME;
+ if (!strcasecmp (atom + 1, "o-forward-update"))
+ return DO_FORWARD_UPDATE;
if (!strcasecmp (atom + 1, "ebug"))
return TOKEN_DEBUG;
if (!strcasecmp (atom + 1, "eny"))
diff --git a/contrib/isc-dhcp/common/dns.c b/contrib/isc-dhcp/common/dns.c
index d529652..897d78d 100644
--- a/contrib/isc-dhcp/common/dns.c
+++ b/contrib/isc-dhcp/common/dns.c
@@ -42,7 +42,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dns.c,v 1.35.2.10 2001/10/26 21:26:39 mellon Exp $ Copyright (c) 2001 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dns.c,v 1.35.2.12 2002/02/20 22:28:17 mellon Exp $ Copyright (c) 2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -619,14 +619,9 @@ isc_result_t ddns_update_a (struct data_string *ddns_fwd_name,
*/
result = minires_nupdate (&resolver_state, ISC_LIST_HEAD (updqueue));
+#ifdef DEBUG_DNS_UPDATES
print_dns_status ((int)result, &updqueue);
-
- while (!ISC_LIST_EMPTY (updqueue)) {
- updrec = ISC_LIST_HEAD (updqueue);
- ISC_LIST_UNLINK (updqueue, updrec, r_link);
- minires_freeupdrec (updrec);
- }
-
+#endif
/*
* If this update operation succeeds, the updater can conclude that it
@@ -636,8 +631,12 @@ isc_result_t ddns_update_a (struct data_string *ddns_fwd_name,
* -- "Interaction between DHCP and DNS"
*/
- if (result == ISC_R_SUCCESS)
- return result;
+ if (result == ISC_R_SUCCESS) {
+ log_info ("Added new forward map from %.*s to %s",
+ (int)ddns_fwd_name -> len,
+ (const char *)ddns_fwd_name -> data, ddns_address);
+ goto error;
+ }
/*
@@ -653,9 +652,19 @@ isc_result_t ddns_update_a (struct data_string *ddns_fwd_name,
* -- "Interaction between DHCP and DNS"
*/
- if (result != (rrsetp ? ISC_R_YXRRSET : ISC_R_YXDOMAIN))
- return result;
+ if (result != (rrsetp ? ISC_R_YXRRSET : ISC_R_YXDOMAIN)) {
+ log_error ("Unable to add forward map from %.*s to %s: %s",
+ (int)ddns_fwd_name -> len,
+ (const char *)ddns_fwd_name -> data, ddns_address,
+ isc_result_totext (result));
+ goto error;
+ }
+ while (!ISC_LIST_EMPTY (updqueue)) {
+ updrec = ISC_LIST_HEAD (updqueue);
+ ISC_LIST_UNLINK (updqueue, updrec, r_link);
+ minires_freeupdrec (updrec);
+ }
/*
* DHCID RR exists, and matches client identity.
@@ -716,7 +725,27 @@ isc_result_t ddns_update_a (struct data_string *ddns_fwd_name,
*/
result = minires_nupdate (&resolver_state, ISC_LIST_HEAD (updqueue));
+ if (result != ISC_R_SUCCESS) {
+ if (result == YXRRSET || result == YXDOMAIN ||
+ result == NXRRSET || result == NXDOMAIN)
+ log_error ("Forward map from %.*s to %s already in use",
+ (int)ddns_fwd_name -> len,
+ (const char *)ddns_fwd_name -> data,
+ ddns_address);
+ else
+ log_error ("Can't update forward map %.*s to %s: %s",
+ (int)ddns_fwd_name -> len,
+ (const char *)ddns_fwd_name -> data,
+ ddns_address, isc_result_totext (result));
+
+ } else {
+ log_info ("Added new forward map from %.*s to %s",
+ (int)ddns_fwd_name -> len,
+ (const char *)ddns_fwd_name -> data, ddns_address);
+ }
+#if defined (DEBUG_DNS_UPDATES)
print_dns_status ((int)result, &updqueue);
+#endif
/*
* If this query succeeds, the updater can conclude that the current
diff --git a/contrib/isc-dhcp/common/options.c b/contrib/isc-dhcp/common/options.c
index b7a5a04..37e98eb 100644
--- a/contrib/isc-dhcp/common/options.c
+++ b/contrib/isc-dhcp/common/options.c
@@ -3,7 +3,7 @@
DHCP options parsing and reassembly. */
/*
- * Copyright (c) 1995-2001 Internet Software Consortium.
+ * Copyright (c) 1995-2002 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -43,7 +43,7 @@
#ifndef lint
static char copyright[] =
-"$Id: options.c,v 1.85.2.6 2001/10/18 20:11:38 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
+"$Id: options.c,v 1.85.2.8 2002/02/19 20:36:52 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#define DHCP_OPTION_DATA
@@ -373,9 +373,16 @@ int fqdn_universe_decode (struct option_state *options,
*s = '.';
s += len + 1;
- total_len += len;
+ total_len += len + 1;
}
+ /* We wind up with a length that's one too many because
+ we shouldn't increment for the last label, but there's
+ no way to tell we're at the last label until we exit
+ the loop. :'*/
+ if (total_len > 0)
+ total_len--;
+
if (!terminated) {
first_len = total_len;
}
@@ -508,6 +515,7 @@ int cons_options (inpacket, outpacket, lease, client_state,
priority_list [priority_len++] = DHO_DHCP_LEASE_TIME;
priority_list [priority_len++] = DHO_DHCP_MESSAGE;
priority_list [priority_len++] = DHO_DHCP_REQUESTED_ADDRESS;
+ priority_list [priority_len++] = DHO_FQDN;
if (prl && prl -> len > 0) {
if ((op = lookup_option (&dhcp_universe, cfg_options,
@@ -544,7 +552,8 @@ int cons_options (inpacket, outpacket, lease, client_state,
if (cfg_options -> site_code_min) {
for (i = 0; i < OPTION_HASH_SIZE; i++) {
hash = cfg_options -> universes [dhcp_universe.index];
- for (pp = hash [i]; pp; pp = pp -> cdr) {
+ if (hash) {
+ for (pp = hash [i]; pp; pp = pp -> cdr) {
op = (struct option_cache *)(pp -> car);
if (op -> option -> code <
cfg_options -> site_code_min &&
@@ -553,6 +562,7 @@ int cons_options (inpacket, outpacket, lease, client_state,
DHO_DHCP_AGENT_OPTIONS))
priority_list [priority_len++] =
op -> option -> code;
+ }
}
}
}
@@ -561,8 +571,9 @@ int cons_options (inpacket, outpacket, lease, client_state,
is no site option space, we'll be cycling through the
dhcp option space. */
for (i = 0; i < OPTION_HASH_SIZE; i++) {
- hash = (cfg_options -> universes
- [cfg_options -> site_universe]);
+ hash = (cfg_options -> universes
+ [cfg_options -> site_universe]);
+ if (hash)
for (pp = hash [i]; pp; pp = pp -> cdr) {
op = (struct option_cache *)(pp -> car);
if (op -> option -> code >=
@@ -770,8 +781,9 @@ int store_options (buffer, buflen, packet, lease, client_state,
to be encapsulated first, except that if it's a straight
encapsulation and the user has provided a value for the
encapsulation option, use the user-provided value. */
- if ((u -> options [code] -> format [0] == 'E' && !oc) ||
- u -> options [code] -> format [0] == 'e') {
+ if (u -> options [code] &&
+ ((u -> options [code] -> format [0] == 'E' && !oc) ||
+ u -> options [code] -> format [0] == 'e')) {
int uix;
static char *s, *t;
struct option_cache *tmp;
diff --git a/contrib/isc-dhcp/common/print.c b/contrib/isc-dhcp/common/print.c
index 67e8ddd..bd244c4 100644
--- a/contrib/isc-dhcp/common/print.c
+++ b/contrib/isc-dhcp/common/print.c
@@ -43,7 +43,7 @@
#ifndef lint
static char copyright[] =
-"$Id: print.c,v 1.53.2.4 2001/08/08 14:49:20 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
+"$Id: print.c,v 1.53.2.5 2002/02/09 03:23:19 mellon Exp $ Copyright (c) 1995-2001 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -1197,6 +1197,14 @@ void print_dns_status (int status, ns_updque *uq)
}
predicate = "and";
}
+ if (u -> r_dname) {
+ if (s + 1 < end)
+ *s++ = ' ';
+ if (s + strlen (u -> r_dname) < end) {
+ strcpy (s, u -> r_dname);
+ s += strlen (s);
+ }
+ }
if (ttlp) {
if (s + 1 < end)
*s++ = ' ';
@@ -1253,14 +1261,6 @@ void print_dns_status (int status, ns_updque *uq)
strcpy (s, en);
s += strlen (en);
}
- if (u -> r_dname) {
- if (s + 1 < end)
- *s++ = ' ';
- if (s + strlen (u -> r_dname) < end) {
- strcpy (s, u -> r_dname);
- s += strlen (s);
- }
- }
if (u -> r_data) {
if (s + 1 < end)
*s++ = ' ';
diff --git a/contrib/isc-dhcp/configure b/contrib/isc-dhcp/configure
index 3f504be..b1db0f0 100755
--- a/contrib/isc-dhcp/configure
+++ b/contrib/isc-dhcp/configure
@@ -118,6 +118,7 @@ if [ "$sysname" = "" ]; then
case $hw in
arm32) sysname=netbsd-nocast;;
alpha) sysname=netbsd-nocast;;
+ sparc) sysname=netbsd-nocast;;
*) sysname=netbsd;;
esac;;
OpenBSD)
diff --git a/contrib/isc-dhcp/includes/dhcpd.h b/contrib/isc-dhcp/includes/dhcpd.h
index dc76d0e..155d3bf 100644
--- a/contrib/isc-dhcp/includes/dhcpd.h
+++ b/contrib/isc-dhcp/includes/dhcpd.h
@@ -272,8 +272,7 @@ typedef enum {
FTS_ABANDONED = 5,
FTS_RESET = 6,
FTS_BACKUP = 7,
- FTS_RESERVED = 8,
- FTS_BOOTP = 9
+ FTS_LAST = 8
} binding_state_t;
/* A dhcp lease declaration structure. */
@@ -304,16 +303,19 @@ struct lease {
u_int8_t flags;
# define STATIC_LEASE 1
+# define BOOTP_LEASE 2
# define PERSISTENT_FLAGS (ON_ACK_QUEUE | ON_UPDATE_QUEUE)
# define MS_NULL_TERMINATION 8
# define ON_UPDATE_QUEUE 16
# define ON_ACK_QUEUE 32
# define UNICAST_BROADCAST_HACK 64
+# define ON_DEFERRED_QUEUE 128
# define EPHEMERAL_FLAGS (MS_NULL_TERMINATION | \
UNICAST_BROADCAST_HACK)
binding_state_t __attribute__ ((mode (__byte__))) binding_state;
binding_state_t __attribute__ ((mode (__byte__))) next_binding_state;
+ binding_state_t __attribute__ ((mode (__byte__))) desired_binding_state;
struct lease_state *state;
@@ -415,6 +417,7 @@ struct lease_state {
#define SV_PING_CHECKS 42
#define SV_UPDATE_STATIC_LEASES 43
#define SV_LOG_FACILITY 44
+#define SV_DO_FORWARD_UPDATES 45
#if !defined (DEFAULT_DEFAULT_LEASE_TIME)
# define DEFAULT_DEFAULT_LEASE_TIME 43200
@@ -717,6 +720,9 @@ struct client_config {
int omapi_port; /* port on which to accept OMAPI
connections, or -1 for no
listener. */
+ int do_forward_update; /* If nonzero, and if we have the
+ information we need, update the
+ A record for the address we get. */
};
/* Per-interface state used in the dhcp client... */
@@ -737,6 +743,7 @@ struct client_state {
u_int16_t secs; /* secs value from DHCPDISCOVER. */
TIME first_sending; /* When was first copy sent? */
TIME interval; /* What's the current resend interval? */
+ int dns_update_timeout; /* Last timeout set for DNS update. */
struct string_list *medium; /* Last media type tried. */
struct dhcp_packet packet; /* Outgoing DHCP packet. */
unsigned packet_length; /* Actual length of generated packet. */
@@ -1891,7 +1898,8 @@ void do_release PROTO ((struct client_state *));
int dhclient_interface_shutdown_hook (struct interface_info *);
int dhclient_interface_discovery_hook (struct interface_info *);
isc_result_t dhclient_interface_startup_hook (struct interface_info *);
-void client_dns_update (struct client_state *client, int);
+void client_dns_update_timeout (void *cp);
+isc_result_t client_dns_update (struct client_state *client, int, int);
/* db.c */
int write_lease PROTO ((struct lease *));
@@ -1904,6 +1912,7 @@ int db_printable_len PROTO ((const unsigned char *, unsigned));
void write_named_billing_class (const char *, unsigned, struct class *);
void write_billing_classes (void);
int write_billing_class PROTO ((struct class *));
+void commit_leases_timeout PROTO ((void *));
int commit_leases PROTO ((void));
void db_startup PROTO ((int));
int new_lease_file PROTO ((void));
diff --git a/contrib/isc-dhcp/includes/dhctoken.h b/contrib/isc-dhcp/includes/dhctoken.h
index 876d8f3..5ef84e1 100644
--- a/contrib/isc-dhcp/includes/dhctoken.h
+++ b/contrib/isc-dhcp/includes/dhctoken.h
@@ -3,7 +3,7 @@
Tokens for config file lexer and parser. */
/*
- * Copyright (c) 1996-1999 Internet Software Consortium.
+ * Copyright (c) 1996-2002 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -315,10 +315,11 @@ enum dhcp_token {
CONNECT = 610,
REMOVE = 611,
REFRESH = 612,
- DOMAIN_NAME = 613
+ DOMAIN_NAME = 613,
+ DO_FORWARD_UPDATE = 614
};
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
(x) != STRING && \
(x) != NUMBER && \
- (x) != EOF)
+ (x) != END_OF_FILE)
diff --git a/contrib/isc-dhcp/includes/minires/minires.h b/contrib/isc-dhcp/includes/minires/minires.h
index 2a6a133..1158f06 100644
--- a/contrib/isc-dhcp/includes/minires/minires.h
+++ b/contrib/isc-dhcp/includes/minires/minires.h
@@ -18,6 +18,8 @@
#include "cdefs.h"
#include "osdep.h"
+#define _ns_flagdata MR_ns_flagdata
+
#include "minires/resolv.h"
#include "minires/res_update.h"
#include "isc-dhcp/result.h"
@@ -151,7 +153,7 @@ isc_result_t res_nmkquery (res_state, int, const char *, ns_class, ns_type,
const unsigned char *, unsigned,
const unsigned char *, double *,
unsigned, unsigned *);
-int ns_initparse (const unsigned char *, unsigned, ns_msg *);
+isc_result_t ns_initparse (const unsigned char *, unsigned, ns_msg *);
isc_result_t res_nquery(res_state, const char *,
ns_class, ns_type, double *, unsigned, unsigned *);
isc_result_t res_nsearch(res_state, const char *,
@@ -161,7 +163,8 @@ isc_result_t res_nquerydomain(res_state, const char *, const char *,
ns_class class, ns_type type,
double *, unsigned, unsigned *);
-int ns_skiprr(const unsigned char *, const unsigned char *, ns_sect, int);
+isc_result_t ns_skiprr(const unsigned char *,
+ const unsigned char *, ns_sect, int, int *);
int dn_skipname (const unsigned char *, const unsigned char *);
u_int32_t getULong (const unsigned char *);
int32_t getLong (const unsigned char *);
diff --git a/contrib/isc-dhcp/includes/site.h b/contrib/isc-dhcp/includes/site.h
index d103ef0..bc8ca46 100644
--- a/contrib/isc-dhcp/includes/site.h
+++ b/contrib/isc-dhcp/includes/site.h
@@ -86,6 +86,11 @@
/* #define DEBUG_FAILOVER_TIMING */
+/* Define this if you want all leases written to the lease file, even if
+ they are free leases that have never been used. */
+
+#define DEBUG_DUMP_ALL_LEASES
+
/* Define this if you want DHCP failover protocol support in the DHCP
server. */
diff --git a/contrib/isc-dhcp/includes/version.h b/contrib/isc-dhcp/includes/version.h
index 919ddc7..91c875f 100644
--- a/contrib/isc-dhcp/includes/version.h
+++ b/contrib/isc-dhcp/includes/version.h
@@ -1,3 +1,3 @@
/* Current version of ISC DHCP Distribution. */
-#define DHCP_VERSION "V3.0.1rc6"
+#define DHCP_VERSION "V3.0.1rc8"
diff --git a/contrib/isc-dhcp/minires/ns_parse.c b/contrib/isc-dhcp/minires/ns_parse.c
index 27b06a1..cc4d98e 100644
--- a/contrib/isc-dhcp/minires/ns_parse.c
+++ b/contrib/isc-dhcp/minires/ns_parse.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_parse.c,v 1.2 2001/01/16 22:33:08 mellon Exp $";
+static const char rcsid[] = "$Id: ns_parse.c,v 1.2.2.1 2002/02/19 19:16:52 mellon Exp $";
#endif
/* Import. */
@@ -38,8 +38,6 @@ static void setsection(ns_msg *msg, ns_sect sect);
/* Macros. */
-#define RETERR(err) do { errno = (err); return (-1); } while (0)
-
/* Public. */
/* These need to be in the same order as the nres.h:ns_flag enum. */
@@ -62,8 +60,9 @@ struct _ns_flagdata _ns_flagdata[16] = {
{ 0x0000, 0 }, /* expansion (6/6). */
};
-int
-ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count) {
+isc_result_t
+ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count,
+ int *rc) {
const u_char *optr = ptr;
for ((void)NULL; count > 0; count--) {
@@ -71,11 +70,11 @@ ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count) {
b = dn_skipname(ptr, eom);
if (b < 0)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
ptr += b/*Name*/ + NS_INT16SZ/*Type*/ + NS_INT16SZ/*Class*/;
if (section != ns_s_qd) {
if (ptr + NS_INT32SZ + NS_INT16SZ > eom)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
ptr += NS_INT32SZ/*TTL*/;
rdlength = getUShort(ptr);
ptr += 2;
@@ -83,11 +82,13 @@ ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count) {
}
}
if (ptr > eom)
- RETERR(EMSGSIZE);
- return (ptr - optr);
+ return ISC_R_INCOMPLETE;
+ if (rc)
+ *rc = ptr - optr;
+ return ISC_R_SUCCESS;
}
-int
+isc_result_t
ns_initparse(const u_char *msg, unsigned msglen, ns_msg *handle) {
const u_char *eom = msg + msglen;
int i;
@@ -96,16 +97,16 @@ ns_initparse(const u_char *msg, unsigned msglen, ns_msg *handle) {
handle->_msg = msg;
handle->_eom = eom;
if (msg + NS_INT16SZ > eom)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
handle->_id = getUShort (msg);
msg += 2;
if (msg + NS_INT16SZ > eom)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
handle->_flags = getUShort (msg);
msg += 2;
for (i = 0; i < ns_s_max; i++) {
if (msg + NS_INT16SZ > eom)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
handle->_counts[i] = getUShort (msg);
msg += 2;
}
@@ -113,23 +114,26 @@ ns_initparse(const u_char *msg, unsigned msglen, ns_msg *handle) {
if (handle->_counts[i] == 0)
handle->_sections[i] = NULL;
else {
- int b = ns_skiprr(msg, eom, (ns_sect)i,
- handle->_counts[i]);
+ int b;
+ isc_result_t status =
+ ns_skiprr(msg, eom, (ns_sect)i,
+ handle->_counts[i], &b);
- if (b < 0)
- return (-1);
+ if (status != ISC_R_SUCCESS)
+ return STATUS;
handle->_sections[i] = msg;
msg += b;
}
if (msg != eom)
- RETERR(EMSGSIZE);
+ return ISC_R_INCOMPLETE;
setsection(handle, ns_s_max);
- return (0);
+ return ISC_R_SUCCESS;
}
isc_result_t
ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
int b;
+ isc_result_t status;
/* Make section right. */
if (section < 0 || section >= ns_s_max)
@@ -141,15 +145,15 @@ ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
if (rrnum == -1)
rrnum = handle->_rrnum;
if (rrnum < 0 || rrnum >= handle->_counts[(int)section])
- RETERR(ENODEV);
+ return ISC_R_UNKNOWNATTRIBUTE;
if (rrnum < handle->_rrnum)
setsection(handle, section);
if (rrnum > handle->_rrnum) {
- b = ns_skiprr(handle->_ptr, handle->_eom, section,
- rrnum - handle->_rrnum);
+ status = ns_skiprr(handle->_ptr, handle->_eom, section,
+ rrnum - handle->_rrnum, &b);
- if (b < 0)
- return (-1);
+ if (status != ISC_R_SUCCESS)
+ return status;
handle->_ptr += b;
handle->_rrnum = rrnum;
}
@@ -158,10 +162,10 @@ ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
b = dn_expand(handle->_msg, handle->_eom,
handle->_ptr, rr->name, NS_MAXDNAME);
if (b < 0)
- return (-1);
+ return ISC_R_FORMERR;
handle->_ptr += b;
if (handle->_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom)
- return ISC_R_NOSPACE;
+ return ISC_R_INCOMPLETE;
rr->type = getUShort (handle->_ptr);
handle -> _ptr += 2;
rr->rr_class = getUShort (handle->_ptr);
@@ -172,13 +176,13 @@ ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
rr->rdata = NULL;
} else {
if (handle->_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom)
- return ISC_R_NOSPACE;
+ return ISC_R_INCOMPLETE;
rr->ttl = getULong (handle->_ptr);
handle -> _ptr += 4;
rr->rdlength = getUShort (handle->_ptr);
handle -> _ptr += 2;
if (handle->_ptr + rr->rdlength > handle->_eom)
- return ISC_R_NOSPACE;
+ return ISC_R_INCOMPLETE;
rr->rdata = handle->_ptr;
handle->_ptr += rr->rdlength;
}
diff --git a/contrib/isc-dhcp/minires/ns_verify.c b/contrib/isc-dhcp/minires/ns_verify.c
index 1408da6..306226c 100644
--- a/contrib/isc-dhcp/minires/ns_verify.c
+++ b/contrib/isc-dhcp/minires/ns_verify.c
@@ -16,7 +16,7 @@
*/
#ifndef lint
-static const char rcsid[] = "$Id: ns_verify.c,v 1.5.2.1 2001/05/17 20:47:34 mellon Exp $";
+static const char rcsid[] = "$Id: ns_verify.c,v 1.5.2.2 2002/02/19 19:23:31 mellon Exp $";
#endif
#define time(x) trace_mr_time (x)
@@ -60,6 +60,7 @@ ns_find_tsig(u_char *msg, u_char *eom) {
HEADER *hp = (HEADER *)msg;
int n, type;
u_char *cp = msg, *start;
+ isc_result_t status;
if (msg == NULL || eom == NULL || msg > eom)
return (NULL);
@@ -72,23 +73,23 @@ ns_find_tsig(u_char *msg, u_char *eom) {
cp += HFIXEDSZ;
- n = ns_skiprr(cp, eom, ns_s_qd, ntohs(hp->qdcount));
- if (n < 0)
+ status = ns_skiprr(cp, eom, ns_s_qd, ntohs(hp->qdcount), &n);
+ if (status != ISC_R_SUCCESS)
return (NULL);
cp += n;
- n = ns_skiprr(cp, eom, ns_s_an, ntohs(hp->ancount));
- if (n < 0)
+ status = ns_skiprr(cp, eom, ns_s_an, ntohs(hp->ancount), &n);
+ if (status != ISC_R_SUCCESS)
return (NULL);
cp += n;
- n = ns_skiprr(cp, eom, ns_s_ns, ntohs(hp->nscount));
- if (n < 0)
+ status = ns_skiprr(cp, eom, ns_s_ns, ntohs(hp->nscount), &n);
+ if (status != ISC_R_SUCCESS)
return (NULL);
cp += n;
- n = ns_skiprr(cp, eom, ns_s_ar, ntohs(hp->arcount) - 1);
- if (n < 0)
+ status = ns_skiprr(cp, eom, ns_s_ar, ntohs(hp->arcount) - 1, &n);
+ if (status != ISC_R_SUCCESS)
return (NULL);
cp += n;
OpenPOWER on IntegriCloud