diff options
author | obrien <obrien@FreeBSD.org> | 1999-05-02 09:03:51 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 1999-05-02 09:03:51 +0000 |
commit | 05d7eeab50a5bdd11c8161b96b001b483d6a7960 (patch) | |
tree | 0db8e577bc080247a6b88882c523af2ae205e74f /contrib | |
parent | c853b12c9a66380ea28e4fe00f811906e8326687 (diff) | |
parent | 76664fd3c5ed0bff5785e0d1beeab0742940552b (diff) | |
download | FreeBSD-src-05d7eeab50a5bdd11c8161b96b001b483d6a7960.zip FreeBSD-src-05d7eeab50a5bdd11c8161b96b001b483d6a7960.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r46275,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib')
23 files changed, 770 insertions, 161 deletions
diff --git a/contrib/isc-dhcp/README b/contrib/isc-dhcp/README index 756087f..9b06acd 100644 --- a/contrib/isc-dhcp/README +++ b/contrib/isc-dhcp/README @@ -1,7 +1,48 @@ Internet Software Consortium Dynamic Host Configuration Protocol Distribution - Version 2, Beta 1, Patchlevel 18 - March 5, 1998 + Version 2, Beta 1, Patchlevel 27 + April 23, 1999 + +Documentation for this software includes this README file, the +RELNOTES file, and the manual pages, which are in the server, common, +client and relay subdirectories. Internet standards relating to the +DHCP protocol are stored in the doc subdirectory. You will have the +best luck reading the manual pages if you build this software and then +install it, although you can read them directly out of the +distribution if you need to. + +DHCP server documentation is in the dhcpd man page. Information about +the DHCP server lease database is in the dhcpd.leases man page. +Server configuration documentation is in the dhcpd.conf man page as +well as the dhcp-options man page. A sample DHCP server +configuration is in the file server/dhcpd.conf. + +DHCP Client documentation is in the dhclient man page. DHCP client +configuration documentation is in the dhclient.conf man page and the +dhcp-options man page. The DHCP client configuration script is +documented in the dhclient-script man page. The format of the DHCP +client lease database is documented in the dhclient.leases man page. + +DHCP relay agent documentation is in the dhcrelay man page. + +To read installed manual pages, use the man command. Type "man page" +where page is the name of the manual page. + +If you want to read manual pages that aren't installed, you can type +``nroff -man page |more'' where page is the filename of the +unformatted manual page. The filename of an unformatted manual page +is the name of the manual page, followed by '.', followed by some +number - 5 for documentation about files, and 8 for documentation +about programs. + +If you do not have the nroff command, you can type ``more catpage'' +where catpage is the filename of the catted man page. Catted man +pages names are the name of the manual page followed by ".cat" +followed by 5 or 8, as with unformatted manual pages. + +Please note that until you install the manual pages, the pathnames of +files to which they refer will not be correct for your operating +system. This is the first Beta release of Version 2 of the Internet Software Consortium DHCP Distribution. In version 2.0, this distribution @@ -12,14 +53,12 @@ running a production environment should probably still use version November of 1996. In this release, the server and relay agent currently work well on -NetBSD, Linux, FreeBSD, BSD/OS, Ultrix, Digital Alpha OSF/1, and SunOS -4.1.4. They can also be run usefully on Solaris as long as only one -broadcast network interface is configured. They also runs on QNX as -long as only one broadcast network interface is configured and a host -route is added from that interface to the 255.255.255.255 broadcast -address. If you are running a Linux 2.0.30 or previous kernel, the -DHCP daemons will only be able to operate on machines with a single -network interface. +NetBSD, Linux after kernel version 2.0.30, FreeBSD, BSD/OS, Ultrix, +Digital Alpha OSF/1, Solaris and SunOS 4.1.4. They run on AIX, HPUX, +IRIX and Linux 2.0.30 and earlier kernels but support only a single +broadcast network interface. They also runs on QNX as long as only +one broadcast network interface is configured and a host route is +added from that interface to the 255.255.255.255 broadcast address. The DHCP client currently only knows how to configure the network on NetBSD, FreeBSD, BSD/os, Linux, Solaris and NextStep. The client @@ -47,9 +86,12 @@ 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-2.0b1pl18.tar.gz |tar xvf - + zcat dhcp-2.0b1pl27.tar.gz |tar xvf - -Now, cd to the dhcp-2.0b1pl18 subdirectory that you've just created and +On BSD/OS, you have to type gzcat, not zcat, and you may run into +similar problems on other operating systems. + +Now, cd to the dhcp-2.0b1pl27 subdirectory that you've just created and configure the source tree by typing: ./configure @@ -103,16 +145,21 @@ make sure it's pointing to correct linux source directory. LINUX: PROTOCOL NOT CONFIGURED One additional Linux 2.1/2.2 issue: if you get the following message, -it's because your kernel doesn't have the linux packetfilter -configured: +it's because your kernel doesn't have the linux packetfilter or raw +packet socket configured: - Can't install packet filter program: Protocol not available - exiting. + Set CONFIG_PACKET=y and CONFIG_FILTER=y in your kernel configuration If this happens, you need to edit your linux kernel .config file, set -CONFIG_FILTER=y, and rebuild your kernel. If the preceding sentence -made no sense to you, ask your Linux vendor/guru for help - please -don't ask us. +CONFIG_FILTER=y and CONFIG_PACKET=y, and rebuild your kernel. If the +preceding sentence made no sense to you, ask your Linux vendor/guru +for help - please don't ask us. + +If you set CONFIG_PACKET=m or CONFIG_FILTER=m, then you must tell the +kernel module loader to load the appropriate modules. If this doesn't +make sense to you, don't use CONFIG_whatever=m - use CONFIG_whatever=y. +Don't ask for help with this on the DHCP mailing list - it's a Linux +kernel issue. LINUX: BROADCAST @@ -275,9 +322,74 @@ mailing list. If you are going to use dhcpd, you should probably subscribe to the dhcp-server and dhcp-announce mailing lists. If you will be using dhclient, you should subscribe to the dhcp-client mailing list. + +If you need help, you should ask on the dhcp-server or dhcp-client +mailing list (or both) - whichever is appropriate to your +application. This includes reporting bugs. Please do not report +bugs in old software releases - fetch the latest release and see if +the bug is still in that copy of the software, and if it's not, _then_ +report it. It's okay to report bugs in the latest patchlevel of a +major version that's not the most recent major version, though - for +example, if you're running 2.0, you don't have to upgrade to 3.0 +before you can report bugs. + +PLEASE READ THIS README FILE CAREFULLY BEFORE REPORTING BUGS! + +When you report bugs, please provide us complete information. A list +of information we need follows. Please read it carefully, and put +all the information you can into your initial bug report, so that we +don't have to ask you any questions in order to figure out your +problem. + + - The specific operating system name and version of the + machine on which the DHCP server or client is running. + - The specific operating system name and version of the + machine on which the client is running, if you are having + trouble getting a client working with the server. + - If you're running Linux, the version number we care about is + the kernel version and maybe the library version, not the + distribution version - e.g., while we don't mind knowing + that you're running Redhat version mumble.foo, we must know + what kernel version you're running, and it helps if you can + tell us what version of the C library you're running, + although if you don't know that off the top of your head it + may be hard for you to figure it out, so don't go crazy + trying. + - The specific version of the DHCP distribution you're + running, for example 2.0b1pl19, not 2.0. + - Please explain the problem carefully, thinking through what + you're saying to ensure that you don't assume we know + something about your situation that we don't know. + - Include your dhcpd.conf and dhcpd.leases file if they're not + huge (if they are huge, we may need them anyway, but don't + send them until you're asked). + - Include a log of your server or client running until it + encounters the problem - for example, if you are having + trouble getting some client to get an address, restart the + server with the -d flag and then restart the client, and + send us what the server prints. Likewise, with the client, + include the output of the client as it fails to get an + address or otherwise does the wrong thing. Do not leave + out parts of the output that you think aren't interesting. + - If the client or server is dumping core, please run the + debugger and get a stack trace, and include that in your + bug report. For example, if your debugger is gdb, do the + following: + + gdb dhcpd dhcpd.core + (gdb) where + [...] + (gdb) quit + + This assumes that it's the dhcp server you're debugging, and + that the core file is in dhcpd.core. + PLEASE DO NOT send queries about non-isc clients to the dhcp-client mailing list. If you're asking about them on an ISC mailing list, it's probably because you're using the ISC DHCP server, so ask there. +If you are having problems with a client whose executable is called +dhcpcd, this is _not_ the ISC DHCP client, and we probably can't help +you with it. Please see http://www.fugue.com/dhcp/lists for details on how to subscribe. If you don't have WorldWide Web access, you can send mail @@ -307,4 +419,4 @@ most users. Vendor tags and User tags are not currently supported. - +These two omissions are fixed in the 3.0 release. diff --git a/contrib/isc-dhcp/RELNOTES b/contrib/isc-dhcp/RELNOTES index 0a517d6..477f897 100644 --- a/contrib/isc-dhcp/RELNOTES +++ b/contrib/isc-dhcp/RELNOTES @@ -1,7 +1,7 @@ Internet Software Consortium Dynamic Host Configuration Protocol Distribution - Version 2, Beta 1, Patchlevel 18 - March 5, 1998 + Version 2, Beta 1, Patchlevel 27 + April 23, 1999 Release Notes @@ -53,6 +53,138 @@ running in producion at the ISC, but is not expected to be stable in the near future, and is intended for sites that are in a position to experiment, or for sites that desperately need the new features. + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 26 + +- Fix UDP/IP checksum code + +- Fix UDP payload length computation to prevent logging of spurious + errors. + +- Support compilation on MacOS X + +- Add support for some options that were added in RFC2132. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 25 + +- Use the udp header's length rather than computing the length based + on the number of bytes received, because some broken relay agents + send packets with ip lengths that are longer than then sum of the ip + header size and the udp length. + +- Do path keyword substitution on unformatted manual pages before + installing them. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 24 + +- D'oh! Fix a really stupid mistake in hash.c. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 23 + +- Support an always-reply-rfc1048 flag, which says to reply with an + RFC1048-style vendor extensions buffer even if the client didn't + send an RFC1048-style magic number. + +- Fix a null pointer dereference. + +- Use netmask from subnet if no netmask option specified. + +- IRIX support (thanks to Don Badrak). + +- Install unformatted manual pages on Linux. + +- Add note in README about zcat vs. gzcat on BSD/os. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 22 + +- Test for lease before dereferencing it in dhcprequest. + +- Free the client parameter request list in dhcpnak if there is one. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 21 + +- Fix a pasto in options.c that will cause a core dump whenever a + client sends in a request without a parameter request list. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 20 + +- Actually do the client fix mentioned below - Patchlevel 20 only contained + half of the fix. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 19 + +- Removed arp table clearing code from solaris client script. + +- Document Linux "protocol not configured" error more thoroughly. + +- Clean up some unused variables. + +- Add entry and exit hooks to all dhcp client scripts, along with a + make_resolv_conf function that can be redefined in the entry hooks. + Document this new feature set. + +- Fix client to take advantage of network APIs that allow it to + receive a unicast instead of requesting that the DHCP server + broadcast its response. + +- Add -pf flag to all daemons allowing user to specify PID file name + on command line. + +- Undo a previous change that attempted to be clever about testing + interface flags but wound up being stupid instead. + +- Enforce access control on DHCPREQUEST messages as well as + DHCPDISCOVER messages. + + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 18 + +- Support added for AIX 4.1.5.0 (and hopefully other versions). + +- Use /var/run instead of /etc on Digital Unix. + +- Change DHCP client exponential backoff code to back off more slowly, + so that it is more robust in lossy environments, at the expense of + being a bit less polite to the server. + +- Don't request a specific lease interval in the client unless the + user says to do so. + +- Don't print DHCPXXX in wrong xxx messages unless DEBUG is defined. + +- Fix handling of secs field. + +- Fix handling of append statement. + +- Fix documentation for append and prepend statements. + +- Fix server support for parameter request list and maximum message + size. + +- Parameterize more hardware types in discover_interfaces. Check for + IFF_BROADCAST instead of !IFF_POINTOPOINT + +- Print kernel configuration warning message if we get EINVAL when + opening or configuring the Linux packet filter. + +- Fix a bug in UDP checksum code (thanks to John Nemeth for figuring + this out) and re-enable UDP checksumming. This allows the client + to work with some buggy DHCP servers that can't handle zero + checksums in the UDP header - in particular, the one John's cable + modem ISP is using. + +- Don't report packet header checksum errors unless we see a lot of + them. It's perfectly normal for some number of checksum errors to + occur. + +- Refer to the dhcpd.leases man page when printing an error message + prior to exiting because there's no lease database. + +- Add information to the README telling the reader how to get to the + manual pages. + +- Fix the server packet transmission code to unicast when it can. + +- Fix a typo in the dhcpd.conf manual page. + CHANGES FROM VERSION 2.0 BETA 1 PATCHLEVEL 17 - Fix a bug in the relay agent where messages to the client would be diff --git a/contrib/isc-dhcp/common/alloc.c b/contrib/isc-dhcp/common/alloc.c index a958462..61d7572 100644 --- a/contrib/isc-dhcp/common/alloc.c +++ b/contrib/isc-dhcp/common/alloc.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: alloc.c,v 1.13.2.1 1998/11/24 22:17:15 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: alloc.c,v 1.13.2.2 1999/03/26 16:39:36 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -240,6 +240,8 @@ void free_lease_state (ptr, name) struct lease_state *ptr; char *name; { + if (ptr -> prl) + dfree (ptr -> prl, name); ptr -> next = free_lease_states; free_lease_states = ptr; } diff --git a/contrib/isc-dhcp/common/bpf.c b/contrib/isc-dhcp/common/bpf.c index 3823406..d1c3b1a 100644 --- a/contrib/isc-dhcp/common/bpf.c +++ b/contrib/isc-dhcp/common/bpf.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: bpf.c,v 1.19.2.8 1999/02/23 22:09:56 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: bpf.c,v 1.19.2.9 1999/03/29 22:07:12 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -418,6 +418,12 @@ int can_unicast_without_arp () return 1; } +int can_receive_unicast_unconfigured (ip) + struct interface_info *ip; +{ + return 1; +} + void maybe_setup_fallback () { struct interface_info *fbi; diff --git a/contrib/isc-dhcp/common/conflex.c b/contrib/isc-dhcp/common/conflex.c index c84daad..ddb78e6 100644 --- a/contrib/isc-dhcp/common/conflex.c +++ b/contrib/isc-dhcp/common/conflex.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: conflex.c,v 1.29.2.3 1999/02/09 04:49:04 mellon Exp $ Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. All rights reserved.\n"; +"$Id: conflex.c,v 1.29.2.4 1999/04/06 14:58:55 mellon Exp $ Copyright (c) 1995, 1996, 1997 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -354,6 +354,8 @@ static int intern (atom, dfv) switch (tolower (atom [0])) { case 'a': + if (!strcasecmp (atom + 1, "lways-reply-rfc1048")) + return ALWAYS_REPLY_RFC1048; if (!strcasecmp (atom + 1, "ppend")) return APPEND; if (!strcasecmp (atom + 1, "llow")) diff --git a/contrib/isc-dhcp/common/dhcp-options.5 b/contrib/isc-dhcp/common/dhcp-options.5 index 3375c50..5e7ca00 100644 --- a/contrib/isc-dhcp/common/dhcp-options.5 +++ b/contrib/isc-dhcp/common/dhcp-options.5 @@ -103,9 +103,9 @@ enclosed in double quotes, or a series of octets specified in hexadecimal, seperated by colons. For example: .nf .sp 1 - option client-identifier "CLIENT-FOO"; + option dhcp-client-identifier "CLIENT-FOO"; or - option client-identifier 43:4c:49:45:54:2d:46:4f:4f; + option dhcp-client-identifier 43:4c:49:45:54:2d:46:4f:4f; .fi .PP The documentation for the various options mentioned below is taken @@ -569,6 +569,115 @@ This option can be used to specify the a DHCP client identifier in a host declaration, so that dhcpd can find the host record by matching against the client identifier. .RE +.B option \fBnisplus-domain\fR \fIstring\fR\fB;\fR +.RS 0.25i +.PP +This option specifies the name of the client's NIS+ domain. The +domain is formatted as a character string consisting of characters +from the NVT ASCII character set. +.RE +.B option \fBnisplus-servers\fR \fIip-address\fR [\fB,\fR \fIip-address\fR... +]\fB;\fR +.RS 0.25i +.PP +This option specifies a list of IP addresses indicating NIS+ servers +available to the client. Servers should be listed in order of +preference. +.RE +.PP +.B option \fBtftp-server-name\fR \fIstring\fR\fB;\fR +.RS 0.25i +.PP +This option is used to identify a TFTP server and, if supported by the +client, should have the same effect as the \fBserver-name\fR +declaration. BOOTP clients are unlikely to support this option. +Some DHCP clients will support it, and others actually require it. +.RE +.PP +.B option \fBbootfile-name\fR \fIstring\fR\fB;\fR +.RS 0.25i +.PP +This option is used to identify a bootstrap file. If supported by the +client, it should have the same effect as the \fBfilename\fR +declaration. BOOTP clients are unlikely to support this option. Some +DHCP clients will support it, and others actually require it. +.RE +.PP +.B option \fBmobile-ip-home-agent\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +This option specifies a list of IP addresses indicating mobile IP +home agents available to the client. Agents should be listed in +order of preference, although normally there will be only one such +agent. +.RE +.PP +.B option \fBsmtp-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The SMTP server option specifies a list of SMTP servers available to +the client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBpop-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The POP3 server option specifies a list of POP3 available to the +client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBnntp-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The NNTP server option specifies a list of NNTP available to the +client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBwww-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The WWW server option specifies a list of WWW available to the +client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBfinger-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The Finger server option specifies a list of Finger available to the +client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBirc-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The IRC server option specifies a list of IRC available to the +client. Servers should be listed in order of preference. +.RE +.PP +.B option \fBstreettalk-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The StreetTalk server option specifies a list of StreetTalk servers +available to the client. Servers should be listed in order of +preference. +.RE +.PP +.B option \fBstreetalk-directory-assistance-server\fR \fIip-address\fR [\fB,\fR +\fIip-address\fR... ]\fB;\fR +.RS 0.25i +.PP +The StreetTalk Directory Assistance (STDA) server option specifies a +list of STDA servers available to the client. Servers should be +listed in order of preference. +.RE .SH SEE ALSO dhcpd.conf(5), dhcpd.leases(5), dhclient.conf(5), dhcpd(8), dhclient(8), RFC2132, RFC2131. diff --git a/contrib/isc-dhcp/common/dispatch.c b/contrib/isc-dhcp/common/dispatch.c index becf4da..cdf7ef5 100644 --- a/contrib/isc-dhcp/common/dispatch.c +++ b/contrib/isc-dhcp/common/dispatch.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: dispatch.c,v 1.47.2.12 1999/02/23 17:37:00 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: dispatch.c,v 1.47.2.14 1999/03/29 22:16:36 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -74,7 +74,6 @@ void discover_interfaces (state) struct ifreq ifr; int i; int sock; - int address_count = 0; struct subnet *subnet; struct shared_network *share; struct sockaddr_in foo; @@ -356,6 +355,9 @@ void discover_interfaces (state) case ARPHRD_TUNNEL: /* ignore tunnel interfaces. */ #endif +#ifdef HAVE_ARPHRD_ROSE + case ARPHRD_ROSE: +#endif #ifdef HAVE_ARPHRD_LOOPBACK case ARPHRD_LOOPBACK: /* ignore loopback interface */ @@ -368,7 +370,7 @@ void discover_interfaces (state) memcpy (tmp -> hw_address.haddr, sa.sa_data, 6); break; -#ifndef ARPHRD_IEEE802 +#ifndef HAVE_ARPHRD_IEEE802 # define ARPHRD_IEEE802 HTYPE_IEEE802 #endif case ARPHRD_IEEE802: @@ -377,7 +379,7 @@ void discover_interfaces (state) memcpy (tmp -> hw_address.haddr, sa.sa_data, 6); break; -#ifndef ARPHRD_FDDI +#ifndef HAVE_ARPHRD_FDDI # define ARPHRD_FDDI HTYPE_FDDI #endif case ARPHRD_FDDI: @@ -394,9 +396,26 @@ void discover_interfaces (state) break; #endif +#ifdef HAVE_ARPHRD_AX25 + case ARPHRD_AX25: + tmp -> hw_address.hlen = 6; + tmp -> hw_address.htype = ARPHRD_AX25; + memcpy (tmp -> hw_address.haddr, sa.sa_data, 6); + break; +#endif + +#ifdef HAVE_ARPHRD_NETROM + case ARPHRD_NETROM: + tmp -> hw_address.hlen = 6; + tmp -> hw_address.htype = ARPHRD_NETROM; + memcpy (tmp -> hw_address.haddr, sa.sa_data, 6); + break; +#endif + default: - error ("%s: unknown hardware address type %d", + warn ("%s: unknown hardware address type %d", ifr.ifr_name, sa.sa_family); + break; } } #endif /* defined (HAVE_SIOCGIFHWADDR) && !defined (HAVE_AF_LINK) */ diff --git a/contrib/isc-dhcp/common/hash.c b/contrib/isc-dhcp/common/hash.c index 8d362cb..58ed7c6 100644 --- a/contrib/isc-dhcp/common/hash.c +++ b/contrib/isc-dhcp/common/hash.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: hash.c,v 1.9.2.1 1998/06/25 21:11:29 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; +"$Id: hash.c,v 1.9.2.3 1999/04/09 17:39:41 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -67,23 +67,12 @@ static INLINE int do_hash (name, len, size) register int accum = 0; register unsigned char *s = name; int i = len; - if (i) { - while (i--) { - /* Add the character in... */ - accum += *s++; - /* Add carry back in... */ - while (accum > 255) { - accum = (accum & 255) + (accum >> 8); - } - } - } else { - while (*s) { - /* Add the character in... */ - accum += *s++; - /* Add carry back in... */ - while (accum > 255) { - accum = (accum & 255) + (accum >> 8); - } + while (i--) { + /* Add the character in... */ + accum += *s++; + /* Add carry back in... */ + while (accum > 255) { + accum = (accum & 255) + (accum >> 8); } } return accum % size; @@ -100,6 +89,8 @@ void add_hash (table, name, len, pointer) if (!table) return; + if (!len) + len = strlen ((char *)name); hashno = do_hash (name, len, table -> hash_count); bp = new_hash_bucket ("add_hash"); @@ -125,6 +116,8 @@ void delete_hash_entry (table, name, len) if (!table) return; + if (!len) + len = strlen ((char *)name); hashno = do_hash (name, len, table -> hash_count); @@ -157,19 +150,15 @@ unsigned char *hash_lookup (table, name, len) if (!table) return (unsigned char *)0; + + if (!len) + len = strlen ((char *)name); + hashno = do_hash (name, len, table -> hash_count); - if (len) { - for (bp = table -> buckets [hashno]; bp; bp = bp -> next) { - if (len == bp -> len - && !memcmp (bp -> name, name, len)) - return bp -> value; - } - } else { - for (bp = table -> buckets [hashno]; bp; bp = bp -> next) - if (!strcmp ((char *)bp -> name, (char *)name)) - return bp -> value; + for (bp = table -> buckets [hashno]; bp; bp = bp -> next) { + if (len == bp -> len && !memcmp (bp -> name, name, len)) + return bp -> value; } return (unsigned char *)0; } - diff --git a/contrib/isc-dhcp/common/icmp.c b/contrib/isc-dhcp/common/icmp.c index fb6cfad..a9d7ec4 100644 --- a/contrib/isc-dhcp/common/icmp.c +++ b/contrib/isc-dhcp/common/icmp.c @@ -43,7 +43,7 @@ #ifndef lint static char copyright[] = -"$Id: icmp.c,v 1.7.2.1 1998/06/25 21:11:29 mellon Exp $ Copyright (c) 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; +"$Id: icmp.c,v 1.7.2.2 1999/03/29 23:20:00 mellon Exp $ Copyright (c) 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -61,8 +61,6 @@ void icmp_startup (routep, handler) { struct protoent *proto; int protocol = 1; - struct sockaddr_in from; - int fd; int state; /* Only initialize icmp once. */ diff --git a/contrib/isc-dhcp/common/inet.c b/contrib/isc-dhcp/common/inet.c index b7c4ba4..527afbb 100644 --- a/contrib/isc-dhcp/common/inet.c +++ b/contrib/isc-dhcp/common/inet.c @@ -40,6 +40,11 @@ * Enterprises, see ``http://www.vix.com''. */ +#ifndef lint +static char copyright[] = +"$Id: inet.c,v 1.5.2.2 1999/04/24 16:48:10 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +#endif /* not lint */ + #include "dhcpd.h" /* Return just the network number of an internet address... */ @@ -114,7 +119,7 @@ struct iaddr broadcast_addr (subnet, mask) struct iaddr subnet; struct iaddr mask; { - int i, j, k; + int i; struct iaddr rv; if (subnet.len != mask.len) { diff --git a/contrib/isc-dhcp/common/lpf.c b/contrib/isc-dhcp/common/lpf.c index d31d6f3..4deecf8 100644 --- a/contrib/isc-dhcp/common/lpf.c +++ b/contrib/isc-dhcp/common/lpf.c @@ -43,7 +43,7 @@ #ifndef lint static char copyright[] = -"$Id: lpf.c,v 1.1.2.6 1999/02/23 22:09:55 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: lpf.c,v 1.1.2.8 1999/03/29 22:07:13 mellon Exp $ Copyright (c) 1995, 1996, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -92,10 +92,12 @@ int if_register_lpf (info) if ((sock = socket(PF_PACKET, SOCK_PACKET, htons(ETH_P_ALL))) < 0) { if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT || - errno == EAFNOSUPPORT) - error ("socket: %m - make sure %s %s!", - "CONFIG_PACKET and CONFIG_FILTER are defined", + errno == EAFNOSUPPORT || errno == EINVAL) { + warn ("socket: %m"); + error ("Make sure to set %s %s!", + "CONFIG_PACKET=y and CONFIG_FILTER=y", "in your kernel configuration"); + } error("Open a socket for LPF: %m"); } @@ -106,10 +108,12 @@ int if_register_lpf (info) if (bind (sock, &sa, sizeof sa)) { if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT || errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT || - errno == EAFNOSUPPORT) - error ("socket: %m - make sure %s %s!", - "CONFIG_PACKET and CONFIG_FILTER are defined", + errno == EAFNOSUPPORT || errno == EINVAL) { + warn ("bind: %m"); + error ("Set %s %s!", + "CONFIG_PACKET=y and CONFIG_FILTER=y", "in your kernel configuration"); + } error("Bind socket to interface: %m"); } @@ -280,6 +284,12 @@ int can_unicast_without_arp () return 1; } +int can_receive_unicast_unconfigured (ip) + struct interface_info *ip; +{ + return 1; +} + void maybe_setup_fallback () { struct interface_info *fbi; diff --git a/contrib/isc-dhcp/common/nit.c b/contrib/isc-dhcp/common/nit.c index 047f2a1..77f43b3 100644 --- a/contrib/isc-dhcp/common/nit.c +++ b/contrib/isc-dhcp/common/nit.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: nit.c,v 1.15.2.3 1999/02/23 22:09:54 mellon Exp $ Copyright (c) 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: nit.c,v 1.15.2.4 1999/03/29 22:07:14 mellon Exp $ Copyright (c) 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -360,6 +360,12 @@ int can_unicast_without_arp () return 1; } +int can_receive_unicast_unconfigured (ip) + struct interface_info *ip; +{ + return 1; +} + void maybe_setup_fallback () { struct interface_info *fbi; diff --git a/contrib/isc-dhcp/common/options.c b/contrib/isc-dhcp/common/options.c index 9d6b7f4..b1c463f 100644 --- a/contrib/isc-dhcp/common/options.c +++ b/contrib/isc-dhcp/common/options.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: options.c,v 1.26.2.3 1998/06/25 21:11:30 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; +"$Id: options.c,v 1.26.2.7 1999/03/30 02:57:47 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #define DHCP_OPTION_DATA @@ -119,7 +119,8 @@ void parse_option_buffer (packet, buffer, length) /* If we haven't seen this option before, just make space for it and copy it there. */ if (!packet -> options [code].data) { - if (!(t = (unsigned char *)malloc (len + 1))) + if (!(t = ((unsigned char *) + dmalloc (len + 1, "parse_option_buffer")))) error ("Can't allocate storage for option %s.", dhcp_options [code].name); /* Copy and NUL-terminate the option (in case it's an @@ -132,10 +133,9 @@ void parse_option_buffer (packet, buffer, length) /* If it's a repeat, concatenate it to whatever we last saw. This is really only required for clients, but what the heck... */ - t = (unsigned char *) - malloc (len - + packet -> options [code].len - + 1); + t = ((unsigned char *) + dmalloc (len + packet -> options [code].len + 1, + "parse_option_buffer")); if (!t) error ("Can't expand storage for option %s.", dhcp_options [code].name); @@ -145,7 +145,8 @@ void parse_option_buffer (packet, buffer, length) &s [2], len); packet -> options [code].len += len; t [packet -> options [code].len] = 0; - free (packet -> options [code].data); + dfree (packet -> options [code].data, + "parse_option_buffer"); packet -> options [code].data = t; } s += len + 2; @@ -157,13 +158,17 @@ void parse_option_buffer (packet, buffer, length) three seperate buffers if needed. This allows us to cons up a set of vendor options using the same routine. */ -int cons_options (inpacket, outpacket, options, overload, terminate, bootpp) +int cons_options (inpacket, outpacket, mms, + options, overload, terminate, bootpp, prl, prl_len) struct packet *inpacket; struct dhcp_packet *outpacket; + int mms; struct tree_cache **options; int overload; /* Overload flags that may be set. */ int terminate; int bootpp; + u_int8_t *prl; + int prl_len; { unsigned char priority_list [300]; int priority_len; @@ -178,21 +183,29 @@ int cons_options (inpacket, outpacket, options, overload, terminate, bootpp) use up to the minimum IP MTU size (576 bytes). */ /* XXX if a BOOTP client specifies a max message size, we will honor it. */ - if (inpacket && inpacket -> options [DHO_DHCP_MAX_MESSAGE_SIZE].data) { - main_buffer_size = - (getUShort (inpacket -> options - [DHO_DHCP_MAX_MESSAGE_SIZE].data) - - DHCP_FIXED_LEN); - /* Enforce a minimum packet size... */ - if (main_buffer_size < (576 - DHCP_FIXED_LEN)) - main_buffer_size = 576 - DHCP_FIXED_LEN; - if (main_buffer_size > sizeof buffer) - main_buffer_size = sizeof buffer; - } else if (bootpp) + if (!mms && + inpacket && + inpacket -> options [DHO_DHCP_MAX_MESSAGE_SIZE].data && + (inpacket -> options [DHO_DHCP_MAX_MESSAGE_SIZE].len >= + sizeof (u_int16_t))) + mms = getUShort (inpacket -> options + [DHO_DHCP_MAX_MESSAGE_SIZE].data); + + /* If the client has provided a maximum DHCP message size, + use that; otherwise, if it's BOOTP, only 64 bytes; otherwise + use up to the minimum IP MTU size (576 bytes). */ + /* XXX if a BOOTP client specifies a max message size, we will + honor it. */ + if (mms) + main_buffer_size = mms - DHCP_FIXED_LEN; + else if (bootpp) main_buffer_size = 64; else main_buffer_size = 576 - DHCP_FIXED_LEN; + if (main_buffer_size > sizeof buffer) + main_buffer_size = sizeof buffer; + /* Preload the option priority list with mandatory options. */ priority_len = 0; priority_list [priority_len++] = DHO_DHCP_MESSAGE_TYPE; @@ -212,9 +225,17 @@ int cons_options (inpacket, outpacket, options, overload, terminate, bootpp) prlen = (sizeof priority_list) - priority_len; memcpy (&priority_list [priority_len], - inpacket -> options - [DHO_DHCP_PARAMETER_REQUEST_LIST].data, prlen); + (inpacket -> options + [DHO_DHCP_PARAMETER_REQUEST_LIST].data), prlen); priority_len += prlen; + prl = priority_list; + } else if (prl) { + if (prl_len + priority_len > sizeof priority_list) + prl_len = (sizeof priority_list) - priority_len; + + memcpy (&priority_list [priority_len], prl, prl_len); + priority_len += prl_len; + prl = priority_list; } else { memcpy (&priority_list [priority_len], dhcp_option_default_priority_list, @@ -582,6 +603,7 @@ void do_packet (interface, packet, len, from_port, from, hfrom) struct hardware *hfrom; { struct packet tp; + int i; if (packet -> hlen > sizeof packet -> chaddr) { note ("Discarding packet with invalid hlen."); @@ -605,5 +627,11 @@ void do_packet (interface, packet, len, from_port, from, hfrom) dhcp (&tp); else bootp (&tp); + + /* Free the data associated with the options. */ + for (i = 0; i < 256; i++) { + if (tp.options [i].len && tp.options [i].data) + dfree (tp.options [i].data, "do_packet"); + } } diff --git a/contrib/isc-dhcp/common/packet.c b/contrib/isc-dhcp/common/packet.c index 069a76b..b5ad427 100644 --- a/contrib/isc-dhcp/common/packet.c +++ b/contrib/isc-dhcp/common/packet.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: packet.c,v 1.18.2.1 1998/06/26 18:20:44 mellon Exp $ Copyright (c) 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: packet.c,v 1.18.2.4 1999/04/24 15:31:47 mellon Exp $ Copyright (c) 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -72,6 +72,9 @@ u_int32_t checksum (buf, nbytes, sum) debug ("sum = %x", sum); #endif sum += (u_int16_t) ntohs(*((u_int16_t *)(buf + i))); + /* Add carry. */ + if (sum > 0xFFFF) + sum -= 0xFFFF; } /* If there's a single byte left over, checksum it, too. Network @@ -81,13 +84,15 @@ u_int32_t checksum (buf, nbytes, sum) debug ("sum = %x", sum); #endif sum += buf [i] << 8; + /* Add carry. */ + if (sum > 0xFFFF) + sum -= 0xFFFF; } return sum; } -/* Fold the upper sixteen bits of the checksum down into the lower bits, - complement the sum, and then put it into network byte order. */ +/* Finish computing the sum, and then put it into network byte order. */ u_int32_t wrapsum (sum) u_int32_t sum; @@ -96,17 +101,7 @@ u_int32_t wrapsum (sum) debug ("wrapsum (%x)", sum); #endif - while (sum > 0x10000) { - sum = (sum >> 16) + (sum & 0xFFFF); -#ifdef DEBUG_CHECKSUM_VERBOSE - debug ("sum = %x", sum); -#endif - sum += (sum >> 16); -#ifdef DEBUG_CHECKSUM_VERBOSE - debug ("sum = %x", sum); -#endif - } - sum = sum ^ 0xFFFF; + sum = ~sum & 0xFFFF; #ifdef DEBUG_CHECKSUM_VERBOSE debug ("sum = %x", sum); #endif @@ -194,17 +189,15 @@ void assemble_udp_ip_header (interface, buf, bufix, /* Compute UDP checksums, including the ``pseudo-header'', the UDP header and the data. */ -#if 0 udp.uh_sum = wrapsum (checksum ((unsigned char *)&udp, sizeof udp, checksum (data, len, checksum ((unsigned char *) &ip.ip_src, - sizeof ip.ip_src, + 2 * sizeof ip.ip_src, IPPROTO_UDP + (u_int32_t) ntohs (udp.uh_ulen))))); -#endif /* Copy the udp header into the buffer... */ memcpy (&buf [*bufix], &udp, sizeof udp); @@ -239,18 +232,25 @@ ssize_t decode_hw_header (interface, buf, bufix, from) /* UDP header and IP header decoded together for convenience. */ -ssize_t decode_udp_ip_header (interface, buf, bufix, from, data, len) +ssize_t decode_udp_ip_header (interface, buf, bufix, from, data, buflen) struct interface_info *interface; unsigned char *buf; int bufix; struct sockaddr_in *from; unsigned char *data; - int len; + int buflen; { struct ip *ip; struct udphdr *udp; u_int32_t ip_len = (buf [bufix] & 0xf) << 2; u_int32_t sum, usum; + static int ip_packets_seen; + static int ip_packets_bad_checksum; + static int udp_packets_seen; + static int udp_packets_bad_checksum; + static int udp_packets_length_checked; + static int udp_packets_length_overflow; + int len; ip = (struct ip *)(buf + bufix); udp = (struct udphdr *)(buf + bufix + ip_len); @@ -266,12 +266,23 @@ ssize_t decode_udp_ip_header (interface, buf, bufix, from, data, len) #endif /* USERLAND_FILTER */ /* Check the IP header checksum - it should be zero. */ + ++ip_packets_seen; if (wrapsum (checksum (buf + bufix, ip_len, 0))) { - note ("Bad IP checksum: %x", - wrapsum (checksum (buf + bufix, sizeof *ip, 0))); + ++ip_packets_bad_checksum; + if (ip_packets_seen > 4 && + (ip_packets_seen / ip_packets_bad_checksum) < 2) { + note ("%d bad IP checksums seen in %d packets", + ip_packets_bad_checksum, ip_packets_seen); + ip_packets_seen = ip_packets_bad_checksum = 0; + } return -1; } + /* Check the IP packet length. */ + if (ntohs (ip -> ip_len) != buflen) + debug ("ip length %d disagrees with bytes received %d.", + ntohs (ip -> ip_len), buflen); + /* Copy out the IP source address... */ memcpy (&from -> sin_addr, &ip -> ip_src, 4); @@ -281,10 +292,25 @@ ssize_t decode_udp_ip_header (interface, buf, bufix, from, data, len) if (!data) { data = buf + bufix + ip_len + sizeof *udp; - len -= ip_len + sizeof *udp; + len = ntohs (udp -> uh_ulen) - sizeof *udp; + ++udp_packets_length_checked; + if (len + data > buf + bufix + buflen) { + ++udp_packets_length_overflow; + if (udp_packets_length_checked > 4 && + (udp_packets_length_checked / + udp_packets_length_overflow) < 2) { + note ("%d udp packets in %d too long - dropped", + udp_packets_length_overflow, + udp_packets_length_checked); + udp_packets_length_overflow = + udp_packets_length_checked = 0; + } + return -1; + } + if (len + data != buf + bufix + buflen) + debug ("accepting packet with data after udp payload."); } -#if 0 usum = udp -> uh_sum; udp -> uh_sum = 0; @@ -292,16 +318,22 @@ ssize_t decode_udp_ip_header (interface, buf, bufix, from, data, len) checksum (data, len, checksum ((unsigned char *) &ip -> ip_src, - sizeof ip -> ip_src, + 2 * sizeof ip -> ip_src, IPPROTO_UDP + (u_int32_t) ntohs (udp -> uh_ulen))))); + udp_packets_seen++; if (usum && usum != sum) { - note ("Bad udp checksum: %x %x", usum, sum); + udp_packets_bad_checksum++; + if (udp_packets_seen > 4 && + (udp_packets_seen / udp_packets_bad_checksum) < 2) { + note ("%d bad udp checksums in %d packets", + udp_packets_bad_checksum, udp_packets_seen); + udp_packets_seen = udp_packets_bad_checksum = 0; + } return -1; } -#endif /* Copy out the port... */ memcpy (&from -> sin_port, &udp -> uh_sport, sizeof udp -> uh_sport); diff --git a/contrib/isc-dhcp/common/parse.c b/contrib/isc-dhcp/common/parse.c index d750ec5..fe02689 100644 --- a/contrib/isc-dhcp/common/parse.c +++ b/contrib/isc-dhcp/common/parse.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: parse.c,v 1.2.2.3 1998/12/22 22:43:22 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; +"$Id: parse.c,v 1.2.2.4 1999/03/29 22:18:53 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -192,9 +192,6 @@ int parse_ip_addr (cfile, addr) FILE *cfile; struct iaddr *addr; { - char *val; - int token; - addr -> len = 4; if (parse_numeric_aggregate (cfile, addr -> iabuf, &addr -> len, DOT, 10, 8)) diff --git a/contrib/isc-dhcp/common/raw.c b/contrib/isc-dhcp/common/raw.c index 2740c49..9274980 100644 --- a/contrib/isc-dhcp/common/raw.c +++ b/contrib/isc-dhcp/common/raw.c @@ -54,7 +54,7 @@ #ifndef lint static char copyright[] = -"$Id: raw.c,v 1.11.2.2 1999/02/23 22:09:54 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: raw.c,v 1.11.2.3 1999/04/06 16:00:24 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -81,6 +81,7 @@ void if_register_send (info) if (!quiet_interface_discovery) note ("Sending on %s, port %d", piaddr (info -> address), htons (local_port)); + if ((sock = socket (AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) error ("Can't create dhcp socket: %m"); @@ -104,7 +105,7 @@ void if_register_send (info) info -> shared_network -> name : "")); } -size_t send_packet (interface, packet, raw, len, from, to, hto) +ssize_t send_packet (interface, packet, raw, len, from, to, hto) struct interface_info *interface; struct packet *packet; struct dhcp_packet *raw; @@ -113,7 +114,7 @@ size_t send_packet (interface, packet, raw, len, from, to, hto) struct sockaddr_in *to; struct hardware *hto; { - unsigned char buf [256]; + unsigned char buf [1500]; int bufp = 0; struct iovec iov [2]; int result; @@ -122,16 +123,31 @@ size_t send_packet (interface, packet, raw, len, from, to, hto) assemble_udp_ip_header (interface, buf, &bufp, from.s_addr, to -> sin_addr.s_addr, to -> sin_port, (unsigned char *)raw, len); - - /* Fire it off */ - iov [0].iov_base = (char *)buf; - iov [0].iov_len = bufp; - iov [1].iov_base = (char *)raw; - iov [1].iov_len = len; - - result = writev(interface -> wfdesc, iov, 2); + if (len + bufp > sizeof buf) { + warn ("send_packet: packet too large (%s)", len + bufp); + return; + } + memcpy (buf + bufp, raw, len); + bufp += len; + result = sendto (interface -> wfdesc, (char *)buf, bufp, 0, + (struct sockaddr *)to, sizeof *to); if (result < 0) warn ("send_packet: %m"); return result; } -#endif /* USE_SOCKET_SEND */ + +int can_unicast_without_arp () +{ + return 1; +} + +void maybe_setup_fallback () +{ +} + +void if_reinitialize_send (info) + struct interface_info *info; +{ +} + +#endif /* USE_RAW_SEND */ diff --git a/contrib/isc-dhcp/common/socket.c b/contrib/isc-dhcp/common/socket.c index 8e1b274..3d1b8f4 100644 --- a/contrib/isc-dhcp/common/socket.c +++ b/contrib/isc-dhcp/common/socket.c @@ -50,7 +50,7 @@ #ifndef lint static char copyright[] = -"$Id: socket.c,v 1.26.2.10 1999/02/23 22:09:55 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: socket.c,v 1.26.2.11 1999/03/29 22:07:14 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -269,6 +269,16 @@ int can_unicast_without_arp () return 0; } +int can_receive_unicast_unconfigured (ip) + struct interface_info *ip; +{ +#if defined (SOCKET_CAN_RECEIVE_UNICAST_UNCONFIGURED) + return 1; +#else + return 0; +#endif +} + /* If we have SO_BINDTODEVICE, set up a fallback interface; otherwise, do not. */ diff --git a/contrib/isc-dhcp/common/tables.c b/contrib/isc-dhcp/common/tables.c index abbff6f..9274e38 100644 --- a/contrib/isc-dhcp/common/tables.c +++ b/contrib/isc-dhcp/common/tables.c @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: tables.c,v 1.13.2.3 1998/12/22 22:45:44 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; +"$Id: tables.c,v 1.13.2.4 1999/04/24 16:46:44 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -130,20 +130,20 @@ struct option dhcp_options [256] = { { "dhcp-client-identifier", "X", &dhcp_universe, 61 }, { "option-62", "X", &dhcp_universe, 62 }, { "option-63", "X", &dhcp_universe, 63 }, - { "option-64", "X", &dhcp_universe, 64 }, - { "option-65", "X", &dhcp_universe, 65 }, - { "option-66", "X", &dhcp_universe, 66 }, - { "option-67", "X", &dhcp_universe, 67 }, - { "option-68", "X", &dhcp_universe, 68 }, - { "option-69", "X", &dhcp_universe, 69 }, - { "option-70", "X", &dhcp_universe, 70 }, - { "option-71", "X", &dhcp_universe, 71 }, - { "option-72", "X", &dhcp_universe, 72 }, - { "option-73", "X", &dhcp_universe, 73 }, - { "option-74", "X", &dhcp_universe, 74 }, - { "option-75", "X", &dhcp_universe, 75 }, - { "option-76", "X", &dhcp_universe, 76 }, - { "dhcp-user-class-identifier", "t", &dhcp_universe, 77 }, + { "nisplus-domain", "t", &dhcp_universe, 64 }, + { "nisplus-servers", "IA", &dhcp_universe, 65 }, + { "tftp-server-name", "t", &dhcp_universe, 66 }, + { "bootfile-name", "t", &dhcp_universe, 67 }, + { "mobile-ip-home-agent", "IA", &dhcp_universe, 68 }, + { "smtp-server", "IA", &dhcp_universe, 69 }, + { "pop-server", "IA", &dhcp_universe, 70 }, + { "nntp-server", "IA", &dhcp_universe, 71 }, + { "www-server", "IA", &dhcp_universe, 72 }, + { "finger-server", "IA", &dhcp_universe, 73 }, + { "irc-server", "IA", &dhcp_universe, 74 }, + { "streettalk-server", "IA", &dhcp_universe, 75 }, + { "streettalk-directory-assistance-server", "IA", &dhcp_universe, 76 }, + { "user-class", "t", &dhcp_universe, 77 }, { "option-78", "X", &dhcp_universe, 78 }, { "option-79", "X", &dhcp_universe, 79 }, { "option-80", "X", &dhcp_universe, 80 }, diff --git a/contrib/isc-dhcp/common/upf.c b/contrib/isc-dhcp/common/upf.c index c172c62..70f8eff 100644 --- a/contrib/isc-dhcp/common/upf.c +++ b/contrib/isc-dhcp/common/upf.c @@ -1,6 +1,6 @@ /* upf.c - Ultrix PacketFilter interface code. + Ultrix PacketFilter interface code. */ /* * Copyright (c) 1995, 1996, 1997, 1998, 1999 @@ -42,7 +42,7 @@ #ifndef lint static char copyright[] = -"$Id: upf.c,v 1.3.2.3 1999/02/23 22:09:56 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: upf.c,v 1.3.2.5 1999/03/29 22:07:13 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -311,6 +311,12 @@ int can_unicast_without_arp () return 1; } +int can_receive_unicast_unconfigured (ip) + struct interface_info *ip; +{ + return 1; +} + void maybe_setup_fallback () { struct interface_info *fbi; diff --git a/contrib/isc-dhcp/includes/cf/aix.h b/contrib/isc-dhcp/includes/cf/aix.h new file mode 100644 index 0000000..8a1b4d5 --- /dev/null +++ b/contrib/isc-dhcp/includes/cf/aix.h @@ -0,0 +1,89 @@ +/* aix.h */ +/* + * Copyright (c) 1996 The Internet Software Consortium. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of The Internet Software Consortium nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND + * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * INTERNET SOFTWARE CONSORTIUM OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#define int8_t char +#define int16_t short +#define int32_t long + +#define u_int8_t unsigned char +#define u_int16_t unsigned short +#define u_int32_t unsigned long + +#include <sys/types.h> + +#include <syslog.h> + +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/select.h> +#include <sys/wait.h> +#include <signal.h> +#include <setjmp.h> +#include <limits.h> + +extern int h_errno; + +#include <net/if.h> +#include <net/if_arp.h> +#include <net/if_dl.h> + +#ifndef _PATH_DHCPD_PID +#define _PATH_DHCPD_PID "/etc/dhcpd.pid" +#endif +#ifndef _PATH_DHCLIENT_PID +#define _PATH_DHCLIENT_PID "/etc/dhclient.pid" +#endif +#ifndef _PATH_DHCRELAY_PID +#define _PATH_DHCRELAY_PID "/etc/dhcrelay.pid" +#endif + +#include <varargs.h> +#define VA_DOTDOTDOT va_alist +#define VA_start(list, last) va_start (list) + +#define vsnprintf(buf, size, fmt, list) vsprintf (buf, fmt, list) +#define NO_SNPRINTF + +#define EOL '\n' +#define VOIDPTR void * + +#include <time.h> + +#define TIME time_t +#define GET_TIME(x) time ((x)) + +#define random rand + +#define USE_SOCKETS 1 +#define HAVE_SA_LEN 1 +#undef FDDI diff --git a/contrib/isc-dhcp/includes/dhcpd.h b/contrib/isc-dhcp/includes/dhcpd.h index a1059e9..958178d 100644 --- a/contrib/isc-dhcp/includes/dhcpd.h +++ b/contrib/isc-dhcp/includes/dhcpd.h @@ -160,6 +160,10 @@ struct lease_state { struct iaddr from; + int max_message_size; + u_int8_t *prl; + int prl_len; + u_int32_t xid; u_int16_t secs; u_int16_t bootp_flags; @@ -209,6 +213,7 @@ struct group { int use_host_decl_names; int use_lease_addr_for_default_route; int authoritative; + int always_reply_rfc1048; struct tree_cache *options [256]; }; @@ -332,6 +337,7 @@ struct client_state { enum dhcp_state state; /* Current state for this interface. */ struct iaddr destination; /* Where to send packet. */ u_int32_t xid; /* Transaction ID. */ + u_int16_t secs; /* secs value from DHCPDISCOVER. */ TIME first_sending; /* When was first copy sent? */ TIME interval; /* What's the current resend interval? */ struct string_list *medium; /* Last media type tried. */ @@ -457,8 +463,9 @@ typedef unsigned char option_mask [16]; void parse_options PROTO ((struct packet *)); void parse_option_buffer PROTO ((struct packet *, unsigned char *, int)); -int cons_options PROTO ((struct packet *, struct dhcp_packet *, - struct tree_cache **, int, int, int)); +int cons_options PROTO ((struct packet *, struct dhcp_packet *, int, + struct tree_cache **, int, int, int, + u_int8_t *, int)); int store_options PROTO ((unsigned char *, int, struct tree_cache **, unsigned char *, int, int, int, int)); char *pretty_print_option PROTO ((unsigned int, @@ -674,6 +681,7 @@ ssize_t receive_packet PROTO ((struct interface_info *, #endif #if defined (USE_SOCKET_SEND) && !defined (USE_SOCKET_FALLBACK) int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif @@ -698,6 +706,7 @@ ssize_t receive_packet PROTO ((struct interface_info *, #endif #if defined (USE_BPF_SEND) int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif @@ -722,6 +731,7 @@ ssize_t receive_packet PROTO ((struct interface_info *, #endif #if defined (USE_LPF_SEND) int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif @@ -747,6 +757,7 @@ ssize_t receive_packet PROTO ((struct interface_info *, #endif #if defined (USE_NIT_SEND) int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif @@ -767,6 +778,7 @@ ssize_t receive_packet PROTO ((struct interface_info *, #endif #if defined (USE_DLPI_SEND) int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif @@ -779,6 +791,7 @@ ssize_t send_packet PROTO ((struct interface_info *, struct in_addr, struct sockaddr_in *, struct hardware *)); int can_unicast_without_arp PROTO ((void)); +int can_receive_unicast_unconfigured PROTO ((struct interface_info *)); void maybe_setup_fallback PROTO ((void)); #endif diff --git a/contrib/isc-dhcp/includes/dhctoken.h b/contrib/isc-dhcp/includes/dhctoken.h index 73f6879..2aeb530 100644 --- a/contrib/isc-dhcp/includes/dhctoken.h +++ b/contrib/isc-dhcp/includes/dhctoken.h @@ -128,6 +128,7 @@ #define USE_LEASE_ADDR_FOR_DEFAULT_ROUTE 332 #define AUTHORITATIVE 333 #define TOKEN_NOT 334 +#define ALWAYS_REPLY_RFC1048 335 #define is_identifier(x) ((x) >= FIRST_TOKEN && \ (x) != STRING && \ diff --git a/contrib/isc-dhcp/includes/osdep.h b/contrib/isc-dhcp/includes/osdep.h index f3c6b2f..5db5d8a 100644 --- a/contrib/isc-dhcp/includes/osdep.h +++ b/contrib/isc-dhcp/includes/osdep.h @@ -75,6 +75,10 @@ # endif #endif +#ifdef aix +# include "cf/aix.h" +#endif + #ifdef bsdi # include "cf/bsdos.h" #endif @@ -115,14 +119,18 @@ # include "cf/cygwin32.h" #endif -#ifdef NeXT -# ifdef __APPLE__ -# include "cf/rhapsody.h" -# else +#ifdef __APPLE__ +# include "cf/rhapsody.h" +#else +# if defined (NeXT) # include "cf/nextstep.h" # endif #endif +#if defined(IRIX) || defined(__sgi) +# include "cf/irix.h" +#endif + #if !defined (TIME_MAX) # define TIME_MAX 2147483647 #endif @@ -247,6 +255,26 @@ # define HAVE_ARPHRD_LOOPBACK #endif +#if defined (ARPHRD_ROSE) && !defined (HAVE_ARPHRD_ROSE) +# define HAVE_ARPHRD_ROSE +#endif + +#if defined (ARPHRD_IEEE802) && !defined (HAVE_ARPHRD_IEEE802) +# define HAVE_ARPHRD_IEEE802 +#endif + +#if defined (ARPHRD_FDDI) && !defined (HAVE_ARPHRD_FDDI) +# define HAVE_ARPHRD_FDDI +#endif + +#if defined (ARPHRD_AX25) && !defined (HAVE_ARPHRD_AX25) +# define HAVE_ARPHRD_AX25 +#endif + +#if defined (ARPHRD_NETROM) && !defined (HAVE_ARPHRD_NETROM) +# define HAVE_ARPHRD_NETROM +#endif + #if defined (ARPHRD_METRICOM) && !defined (HAVE_ARPHRD_METRICOM) # define HAVE_ARPHRD_METRICOM #endif @@ -262,4 +290,3 @@ #if defined (AF_LINK) && !defined (HAVE_AF_LINK) # define HAVE_AF_LINK #endif - |