See ticket rt15925.
multiple identifiers (previous versions would silently over-ride the
value with the later configured value).
+- Several option codes that have been allocated since our last release
+ have been named and documented.
+
+- Option names of the form "unknown-123" have been removed from the in-
+ memory hash tables. In order to support options of these names that
+ may appear in dhclient.leases or similar in previous versions, the
+ parser will now find the new option code definition, or mock up a
+ generic option code definition. This should result in a smooth
+ transition from one name to the other, as the new name is used to
+ write new output.
+
Changes since 3.0.4rc1
- The dhcp-options.5 manpage was updated to correct indentation errors
-.\" $Id: dhcp-options.5,v 1.30 2006/07/22 02:24:16 dhankins Exp $
+.\" $Id: dhcp-options.5,v 1.31 2006/07/26 15:43:52 shane Exp $
.\"
.\" Copyright (c) 2004-2006 by Internet Systems Consortium, Inc. ("ISC")
.\" Copyright (c) 1996-2003 by Internet Software Consortium
This option specifies the timeout in seconds for ARP cache entries.
.RE
.PP
+.B option \fBbcms-controller-address\fR \fIip-address\fR [\fB,\fR
+\fIip-address\fR... ]\fB;\fR
+.RS 0.25i
+.PP
+This option configures a list of IPv4 addresses for use as Broadcast and
+Multicast Controller Servers ("BCMS").
+.RE
+.PP
.B option \fBbootfile-name\fR \fItext\fR\fB;\fR
.RS 0.25i
.PP
sending TCP segments. The minimum value is 1.
.RE
.PP
+.B option \fBdefault-url\fR \fIstring\fR\fB;\fR
+.RS 0.25i
+.PP
+The format and meaning of this option is not described in any standards
+document, but is claimed to be in use by Apple Computer. It is not known
+what clients may reasonably do if supplied with this option. Use at your
+own risk.
+.RE
+.PP
.B option \fBdhcp-client-identifier\fR \fIstring\fR\fB;\fR
.RS 0.25i
.PP
RFC1002, and RFC1035 for character-set restrictions.
.RE
.PP
+.B option \fBnetinfo-server-address\fR \fIip-address\fR [\fB,\fR
+\fIip-address\fR... ]\fB;\fR
+.RS 0.25i
+.PP
+The \fBnetinfo-server-address\fR option has not been described in any
+RFC, but has been allocated (and is claimed to be in use) by Apple
+Computers. It's hard to say if the above is the correct format, or
+what clients might be expected to do if values were configured. Use
+at your own risk.
+.RE
+.PP
+.B option \fBnetinfo-server-tag\fR \fItext\fR\fB;\fR
+.RS 0.25i
+.PP
+The \fBnetinfo-server-tag\fR option has not been described in any
+RFC, but has been allocated (and is claimed to be in use) by Apple
+Computers. It's hard to say if the above is the correct format,
+or what clients might be expected to do if values were configured. Use
+at your own risk.
+.RE
+.PP
.B option \fBnis-domain\fR \fItext\fR\fB;\fR
.RS 0.25i
.PP
#ifndef lint
static char copyright[] =
-"$Id: parse.c,v 1.114 2006/07/25 09:59:39 shane Exp $ Copyright (c) 2004-2006 Internet Systems Consortium. All rights reserved.\n";
+"$Id: parse.c,v 1.115 2006/07/26 15:43:52 shane Exp $ Copyright (c) 2004-2006 Internet Systems Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
char *uname;
struct universe *universe;
struct option *option;
+ unsigned code;
if (opt == NULL)
return ISC_R_INVALIDARG;
if (option) {
if (known)
*known = 1;
- } else {
- /* If we've been told to allocate, that means that this
- (might) be an option code definition, so we'll create
- an option structure just in case. */
- if (allocate) {
- option = new_option(val, MDL);
- option -> universe = universe;
- option_reference(opt, option, MDL);
+ /* If the option name is of the form unknown-[decimal], use
+ * the trailing decimal value to find the option definition.
+ * If there is no definition, construct one. This is to
+ * support legacy use of unknown options in config files or
+ * lease databases.
+ */
+ } else if (strncasecmp(val, "unknown-", 8) == 0) {
+ code = atoi(val+8);
+ /* Option code 0 is always illegal for us, thanks
+ * to the option decoder.
+ */
+ if (code == 0 || code == universe->end) {
+ parse_warn(cfile, "Option codes 0 and %u are illegal "
+ "in the %s space.", universe->end,
+ universe->name);
+ skip_to_semi(cfile);
dfree(uname, MDL);
- return ISC_R_SUCCESS;
+ return ISC_R_FAILURE;
}
- if (val == uname)
- parse_warn (cfile, "no option named %s", val);
- else
- parse_warn (cfile, "no option named %s in space %s",
- val, uname);
+
+ /* It's odd to think of unknown option codes as
+ * being known, but this means we know what the
+ * parsed name is talking about.
+ */
+ if (known)
+ *known = 1;
+
+ option_code_hash_lookup(opt, universe->code_hash,
+ &code, 0, MDL);
+ option = *opt;
+
+ /* If we did not find an option of that code,
+ * manufacture an unknown-xxx option definition.
+ * Its single reference will ensure that it is
+ * deleted once the option is recycled out of
+ * existence (by the parent).
+ */
+ if (option == NULL) {
+ option = new_option(val, MDL);
+ option->universe = universe;
+ option->code = code;
+ option->format = "X";
+ option_reference(opt, option, MDL);
+ } else
+ log_info("option %s has been redefined as option %s. "
+ "Please update your configs if neccessary.",
+ val, option->name);
+ /* If we've been told to allocate, that means that this
+ * (might) be an option code definition, so we'll create
+ * an option structure and return it for the parent to
+ * decide.
+ */
+ } else if (allocate) {
+ option = new_option(val, MDL);
+ option -> universe = universe;
+ option_reference(opt, option, MDL);
+ } else {
+ parse_warn(cfile, "no option named %s in space %s",
+ val, universe->name);
skip_to_semi (cfile);
dfree(uname, MDL);
return ISC_R_NOTFOUND;
and_again:
/* Set fmt to start of format for 'A' and one char back
- for 'a' */
- if ((fmt != NULL) &&
- (fmt != option -> format) && (*fmt == 'a'))
+ * for 'a'.
+ */
+ if ((fmt != NULL) && (fmt != option->format) && (*fmt == 'a'))
fmt -= 1;
- else
- fmt = ((fmt == NULL) ||
- (*fmt == 'A')) ? option -> format : fmt;
+ else if ((fmt == NULL) || (*fmt == 'A'))
+ fmt = option->format;
/* 'a' means always uniform */
uniform |= (fmt [1] == 'a');
#ifndef lint
static char copyright[] =
-"$Id: tables.c,v 1.57 2006/07/25 13:25:59 shane Exp $ Copyright (c) 2004-2006 Internet Systems Consortium. All rights reserved.\n";
+"$Id: tables.c,v 1.58 2006/07/26 15:43:52 shane Exp $ Copyright (c) 2004-2006 Internet Systems Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
{ "nds-servers", "IA", &dhcp_universe, 85, 1 },
{ "nds-tree-name", "t", &dhcp_universe, 86, 1 },
{ "nds-context", "t", &dhcp_universe, 87, 1 },
+ { "bcms-controller-address", "Ia", &dhcp_universe, 89, 1 },
+#if 0
+ /* Not defined by RFC yet */
+ { "pxe-system-type", "S", &dhcp_universe, 93, 1 },
+ { "pxe-interface-id", "BBB", &dhcp_universe, 94, 1 },
+ { "pxe-client-id", "BX", &dhcp_universe, 97, 1 },
+#endif
{ "client-last-transaction-time", "L", &dhcp_universe, 91, 1 },
{ "associated-ip", "Ia", &dhcp_universe, 92, 1 },
{ "uap-servers", "t", &dhcp_universe, 98, 1 },
+ { "netinfo-server-address", "Ia", &dhcp_universe, 112, 1 },
+ { "netinfo-server-tag", "t", &dhcp_universe, 113, 1 },
+ { "default-url", "t", &dhcp_universe, 114, 1 },
{ "subnet-selection", "I", &dhcp_universe, 118, 1 },
{ "domain-search", "D", &dhcp_universe, 119, 1 },
{ "vivco", "Evendor-class.", &dhcp_universe, 124, 1 },
{ "vivso", "Evendor.", &dhcp_universe, 125, 1 },
+#if 0
+ /* Not defined by RFC yet.
+ * DO NOT UNCOMMENT THESE DEFINITIONS: these names are placeholders
+ * and will not be used in future versions of the software.
+ */
+ { "pxe-undefined-1", "X", &dhcp_universe, 128, 1 },
+ { "pxe-undefined-2", "X", &dhcp_universe, 129, 1 },
+ { "pxe-undefined-3", "X", &dhcp_universe, 130, 1 },
+ { "pxe-undefined-4", "X", &dhcp_universe, 131, 1 },
+ { "pxe-undefined-5", "X", &dhcp_universe, 132, 1 },
+ { "pxe-undefined-6", "X", &dhcp_universe, 133, 1 },
+ { "pxe-undefined-7", "X", &dhcp_universe, 134, 1 },
+ { "pxe-undefined-8", "X", &dhcp_universe, 135, 1 },
+#endif
+#if 0
+ /* Not defined by RFC yet */
+ { "tftp-server-address", "Ia", &dhcp_universe, 150, 1 },
+#endif
+#if 0
+ /* PXELINUX options: not defined by RFC yet */
+ { "pxelinux-magic", "BBBB", &dhcp_universe, 208, 1 },
+ { "loader-configfile", "t", &dhcp_universe, 209, 1 },
+ { "loader-pathprefix", "t", &dhcp_universe, 210, 1 },
+ { "loader-reboottime", "L", &dhcp_universe, 211, 1 },
+#endif
+#if 0
+ /* Not defined by RFC yet */
+ { "vss-info", "BX", &dhcp_universe, 221, 1 },
+#endif
{ NULL, NULL, NULL, 0, 0 }
};