- Upgraded to ISC dhcp-4.1.0
- Had to rename the -T option to -timeout as ISC is now using -T - Allow package rebuilders to easily enable DHCPv6 support with: rpmbuild --with DHCPv6 dhcp.spec Note that Fedora is still using the 'dhcpv6' package, but some users may want to experiment with the ISC DHCPv6 implementation locally.
This commit is contained in:
parent
bd47089600
commit
4bf24c8243
@ -1 +1 @@
|
||||
dhcp-4.0.0.tar.gz
|
||||
dhcp-4.1.0.tar.gz
|
||||
|
@ -1,12 +0,0 @@
|
||||
--- dhcp-4.0.0//client/clparse.c.nmcrash 2008-04-01 10:25:39.000000000 -1000
|
||||
+++ dhcp-4.0.0//client/clparse.c 2008-04-01 10:26:20.000000000 -1000
|
||||
@@ -227,6 +227,9 @@ int read_client_conf_file (const char *n
|
||||
cfile = (struct parse *)0;
|
||||
new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0);
|
||||
|
||||
+ if (!cfile)
|
||||
+ return ISC_R_BADPARSE;
|
||||
+
|
||||
do {
|
||||
token = peek_token (&val, (unsigned *)0, cfile);
|
||||
if (token == END_OF_FILE)
|
@ -1,43 +0,0 @@
|
||||
diff -up dhcp-4.0.0/client/dhclient.c.usage dhcp-4.0.0/client/dhclient.c
|
||||
--- dhcp-4.0.0/client/dhclient.c.usage 2008-02-13 16:20:30.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.c 2008-02-13 16:21:05.000000000 -1000
|
||||
@@ -882,21 +882,30 @@ main(int argc, char **argv) {
|
||||
|
||||
static void usage ()
|
||||
{
|
||||
- log_info ("%s %s", message, PACKAGE_VERSION);
|
||||
- log_info (copyright);
|
||||
- log_info (arr);
|
||||
- log_info (url);
|
||||
+ printf ("%s %s\n", message, PACKAGE_VERSION);
|
||||
+ printf (copyright);
|
||||
+ printf ("\n");
|
||||
+ printf (arr);
|
||||
+ printf ("\n");
|
||||
+ printf (url);
|
||||
+ printf ("\n");
|
||||
|
||||
- log_error ("Usage: dhclient %s %s",
|
||||
+ printf ("Usage: dhclient %s %s",
|
||||
#ifdef DHCPv6
|
||||
"[-4|-6] [-1dvrx] [-nw] [-p <port>]",
|
||||
#else /* DHCPv6 */
|
||||
"[-1dvrx] [-nw] [-p <port>]",
|
||||
#endif /* DHCPv6 */
|
||||
- "[-s server]");
|
||||
- log_error (" [-cf config-file] [-lf lease-file]%s",
|
||||
- "[-pf pid-file] [-e VAR=val]");
|
||||
- log_fatal (" [-sf script-file] [interface]");
|
||||
+ "[-s server]\n");
|
||||
+ printf (" [-cf config-file] [-lf lease-file]%s",
|
||||
+ "[-pf pid-file] [-e VAR=val]\n");
|
||||
+ printf (" [ -I <dhcp-client-identifier> ] [-B]\n");
|
||||
+ printf (" [ -H <host-name> | -F <fqdn.fqdn> ] [ -T <timeout> ]\n");
|
||||
+ printf (" [ -V <vendor-class-identifier> ]\n");
|
||||
+ printf (" [ -R <request option list> ]\n");
|
||||
+ printf (" [-sf script-file] [interface]\n");
|
||||
+
|
||||
+ exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
isc_result_t find_class (struct class **c,
|
@ -1,16 +0,0 @@
|
||||
diff -up dhcp-4.0.0//common/dispatch.c.timeout dhcp-4.0.0//common/dispatch.c
|
||||
--- dhcp-4.0.0//common/dispatch.c.timeout 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.0.0//common/dispatch.c 2008-08-01 10:11:35.000000000 -1000
|
||||
@@ -190,7 +190,6 @@ void cancel_timeout (where, what)
|
||||
}
|
||||
}
|
||||
|
||||
-#if defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
|
||||
void cancel_all_timeouts ()
|
||||
{
|
||||
struct timeout *t, *n;
|
||||
@@ -211,4 +210,3 @@ void relinquish_timeouts ()
|
||||
dfree (t, MDL);
|
||||
}
|
||||
}
|
||||
-#endif
|
@ -1,15 +0,0 @@
|
||||
diff -up dhcp-4.0.0//client/dhclient.c.fast_timeout dhcp-4.0.0//client/dhclient.c
|
||||
--- dhcp-4.0.0//client/dhclient.c.fast_timeout 2008-08-01 10:10:10.000000000 -1000
|
||||
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:13:37.000000000 -1000
|
||||
@@ -3613,10 +3613,7 @@ isc_result_t dhclient_interface_startup_
|
||||
ip -> flags |= INTERFACE_RUNNING;
|
||||
for (client = ip -> client; client; client = client -> next) {
|
||||
client -> state = S_INIT;
|
||||
- /* Set up a timeout to start the initialization
|
||||
- process. */
|
||||
- add_timeout (cur_time + random () % 5,
|
||||
- state_reboot, client, 0, 0);
|
||||
+ add_timeout (cur_time, state_reboot, client, 0, 0);
|
||||
}
|
||||
}
|
||||
return ISC_R_SUCCESS;
|
@ -1,37 +0,0 @@
|
||||
diff -up dhcp-4.0.0//common/lpf.c.memory dhcp-4.0.0//common/lpf.c
|
||||
--- dhcp-4.0.0//common/lpf.c.memory 2007-07-12 20:43:41.000000000 -1000
|
||||
+++ dhcp-4.0.0//common/lpf.c 2008-08-01 10:08:01.000000000 -1000
|
||||
@@ -245,6 +245,7 @@ static void lpf_tr_filter_setup (info)
|
||||
struct interface_info *info;
|
||||
{
|
||||
struct sock_fprog p;
|
||||
+ memset(&p,'\0', sizeof(struct sock_fprog));
|
||||
|
||||
/* Set up the bpf filter program structure. This is defined in
|
||||
bpf.c */
|
||||
diff -up dhcp-4.0.0//common/packet.c.memory dhcp-4.0.0//common/packet.c
|
||||
--- dhcp-4.0.0//common/packet.c.memory 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0//common/packet.c 2008-08-01 10:08:01.000000000 -1000
|
||||
@@ -135,6 +135,7 @@ void assemble_udp_ip_header (interface,
|
||||
struct ip ip;
|
||||
struct udphdr udp;
|
||||
|
||||
+ memset( &ip, '\0', sizeof ip);
|
||||
/* Fill out the IP header */
|
||||
IP_V_SET (&ip, 4);
|
||||
IP_HL_SET (&ip, 20);
|
||||
diff -up dhcp-4.0.0//minires/ns_name.c.memory dhcp-4.0.0//minires/ns_name.c
|
||||
--- dhcp-4.0.0//minires/ns_name.c.memory 2005-03-17 10:15:17.000000000 -1000
|
||||
+++ dhcp-4.0.0//minires/ns_name.c 2008-08-01 10:08:01.000000000 -1000
|
||||
@@ -71,6 +71,11 @@ ns_name_ntop(const u_char *src, char *ds
|
||||
dn = dst;
|
||||
eom = dst + dstsiz;
|
||||
|
||||
+ if (dn >= eom) {
|
||||
+ errno = EMSGSIZE;
|
||||
+ return (-1);
|
||||
+ }
|
||||
+
|
||||
while ((n = *cp++) != 0) {
|
||||
if ((n & NS_CMPRSFLGS) != 0) {
|
||||
/* Some kind of compression pointer. */
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0/client/clparse.c.cloexec dhcp-4.0.0/client/clparse.c
|
||||
--- dhcp-4.0.0/client/clparse.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/clparse.c 2008-10-29 13:11:34.000000000 -1000
|
||||
@@ -221,7 +221,7 @@ int read_client_conf_file (const char *n
|
||||
diff -up dhcp-4.1.0/client/clparse.c.cloexec dhcp-4.1.0/client/clparse.c
|
||||
--- dhcp-4.1.0/client/clparse.c.cloexec 2009-01-06 11:56:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/clparse.c 2009-01-06 12:04:48.000000000 -1000
|
||||
@@ -226,7 +226,7 @@ int read_client_conf_file (const char *n
|
||||
int token;
|
||||
isc_result_t status;
|
||||
|
||||
@ -9,35 +9,35 @@ diff -up dhcp-4.0.0/client/clparse.c.cloexec dhcp-4.0.0/client/clparse.c
|
||||
+ if ((file = open (name, O_RDONLY | O_CLOEXEC)) < 0)
|
||||
return uerr2isc (errno);
|
||||
|
||||
cfile = (struct parse *)0;
|
||||
@@ -258,7 +258,7 @@ void read_client_leases ()
|
||||
cfile = NULL;
|
||||
@@ -263,7 +263,7 @@ void read_client_leases ()
|
||||
|
||||
/* Open the lease file. If we can't open it, just return -
|
||||
we can safely trust the server to remember our state. */
|
||||
- if ((file = open (path_dhclient_db, O_RDONLY)) < 0)
|
||||
+ if ((file = open (path_dhclient_db, O_RDONLY | O_CLOEXEC)) < 0)
|
||||
return;
|
||||
cfile = (struct parse *)0;
|
||||
/* new_parse() may fail if the file is of zero length. */
|
||||
diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
--- dhcp-4.0.0/client/dhclient.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.c 2008-10-29 13:26:16.000000000 -1000
|
||||
@@ -125,11 +125,11 @@ main(int argc, char **argv) {
|
||||
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
|
||||
2 (stderr) are open. To do this, we assume that when we
|
||||
open a file the lowest available file descriptor is used. */
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 0)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 1)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 2)
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
else if (fd != -1)
|
||||
@@ -403,7 +403,7 @@ main(int argc, char **argv) {
|
||||
|
||||
cfile = NULL;
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.cloexec dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.cloexec 2009-01-06 11:56:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 12:04:01.000000000 -1000
|
||||
@@ -135,11 +135,11 @@ main(int argc, char **argv) {
|
||||
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
|
||||
2 (stderr) are open. To do this, we assume that when we
|
||||
open a file the lowest available file descriptor is used. */
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 0)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 1)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 2)
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
else if (fd != -1)
|
||||
@@ -465,7 +465,7 @@ main(int argc, char **argv) {
|
||||
int e;
|
||||
|
||||
oldpid = 0;
|
||||
@ -46,7 +46,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
e = fscanf(pidfd, "%ld\n", &temp);
|
||||
oldpid = (pid_t)temp;
|
||||
|
||||
@@ -445,7 +445,7 @@ main(int argc, char **argv) {
|
||||
@@ -507,7 +507,7 @@ main(int argc, char **argv) {
|
||||
strncpy(new_path_dhclient_pid, path_dhclient_pid, pfx);
|
||||
sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name);
|
||||
|
||||
@ -55,7 +55,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
e = fscanf(pidfd, "%ld\n", &temp);
|
||||
oldpid = (pid_t)temp;
|
||||
|
||||
@@ -470,7 +470,7 @@ main(int argc, char **argv) {
|
||||
@@ -532,7 +532,7 @@ main(int argc, char **argv) {
|
||||
int dhc_running = 0;
|
||||
char procfn[256] = "";
|
||||
|
||||
@ -63,8 +63,8 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
+ if ((pidfp = fopen(path_dhclient_pid, "re")) != NULL) {
|
||||
if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
|
||||
snprintf(procfn,256,"/proc/%u",dhcpid);
|
||||
dhc_running = (access(procfn, F_OK) == 0);
|
||||
@@ -2702,7 +2702,7 @@ void rewrite_client_leases ()
|
||||
dhc_running = (access(procfn, F_OK) == 0);
|
||||
@@ -2908,7 +2908,7 @@ void rewrite_client_leases ()
|
||||
|
||||
if (leaseFile != NULL)
|
||||
fclose (leaseFile);
|
||||
@ -73,7 +73,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
if (leaseFile == NULL) {
|
||||
log_error ("can't create %s: %m", path_dhclient_db);
|
||||
return;
|
||||
@@ -2806,7 +2806,7 @@ write_duid(struct data_string *duid)
|
||||
@@ -3012,7 +3012,7 @@ write_duid(struct data_string *duid)
|
||||
return ISC_R_INVALIDARG;
|
||||
|
||||
if (leaseFile == NULL) { /* XXX? */
|
||||
@ -82,16 +82,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
if (leaseFile == NULL) {
|
||||
log_error("can't create %s: %m", path_dhclient_db);
|
||||
return ISC_R_IOERROR;
|
||||
@@ -2853,7 +2853,7 @@ write_client6_lease(struct client_state
|
||||
return ISC_R_INVALIDARG;
|
||||
|
||||
if (leaseFile == NULL) { /* XXX? */
|
||||
- leaseFile = fopen(path_dhclient_db, "w");
|
||||
+ leaseFile = fopen(path_dhclient_db, "we");
|
||||
if (leaseFile == NULL) {
|
||||
log_error("can't create %s: %m", path_dhclient_db);
|
||||
return ISC_R_IOERROR;
|
||||
@@ -2956,7 +2956,7 @@ int write_client_lease (client, lease, r
|
||||
@@ -3192,7 +3192,7 @@ int write_client_lease (client, lease, r
|
||||
return 1;
|
||||
|
||||
if (leaseFile == NULL) { /* XXX */
|
||||
@ -100,8 +91,8 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
if (leaseFile == NULL) {
|
||||
log_error ("can't create %s: %m", path_dhclient_db);
|
||||
return 0;
|
||||
@@ -3402,9 +3402,9 @@ void go_daemon ()
|
||||
close(2);
|
||||
@@ -3638,9 +3638,9 @@ void go_daemon ()
|
||||
close(2);
|
||||
|
||||
/* Reopen them on /dev/null. */
|
||||
- open("/dev/null", O_RDWR);
|
||||
@ -113,7 +104,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
|
||||
write_client_pid_file ();
|
||||
|
||||
@@ -3416,14 +3416,14 @@ void write_client_pid_file ()
|
||||
@@ -3652,14 +3652,14 @@ void write_client_pid_file ()
|
||||
FILE *pf;
|
||||
int pfdesc;
|
||||
|
||||
@ -130,9 +121,9 @@ diff -up dhcp-4.0.0/client/dhclient.c.cloexec dhcp-4.0.0/client/dhclient.c
|
||||
if (!pf)
|
||||
log_error ("Can't fdopen %s: %m", path_dhclient_pid);
|
||||
else {
|
||||
diff -up dhcp-4.0.0/common/bpf.c.cloexec dhcp-4.0.0/common/bpf.c
|
||||
--- dhcp-4.0.0/common/bpf.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/bpf.c 2008-10-29 13:03:48.000000000 -1000
|
||||
diff -up dhcp-4.1.0/common/bpf.c.cloexec dhcp-4.1.0/common/bpf.c
|
||||
--- dhcp-4.1.0/common/bpf.c.cloexec 2009-01-06 11:56:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/bpf.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -94,7 +94,7 @@ int if_register_bpf (info)
|
||||
for (b = 0; 1; b++) {
|
||||
/* %Audit% 31 bytes max. %2004.06.17,Safe% */
|
||||
@ -142,10 +133,10 @@ diff -up dhcp-4.0.0/common/bpf.c.cloexec dhcp-4.0.0/common/bpf.c
|
||||
if (sock < 0) {
|
||||
if (errno == EBUSY) {
|
||||
continue;
|
||||
diff -up dhcp-4.0.0/common/discover.c.cloexec dhcp-4.0.0/common/discover.c
|
||||
--- dhcp-4.0.0/common/discover.c.cloexec 2007-10-05 12:29:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/discover.c 2008-10-29 13:04:07.000000000 -1000
|
||||
@@ -388,7 +388,7 @@ begin_iface_scan(struct iface_conf_list
|
||||
diff -up dhcp-4.1.0/common/discover.c.cloexec dhcp-4.1.0/common/discover.c
|
||||
--- dhcp-4.1.0/common/discover.c.cloexec 2008-08-29 07:48:57.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/discover.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -409,7 +409,7 @@ begin_iface_scan(struct iface_conf_list
|
||||
int len;
|
||||
int i;
|
||||
|
||||
@ -154,7 +145,7 @@ diff -up dhcp-4.0.0/common/discover.c.cloexec dhcp-4.0.0/common/discover.c
|
||||
if (ifaces->fp == NULL) {
|
||||
log_error("Error opening '/proc/net/dev' to list interfaces");
|
||||
return 0;
|
||||
@@ -422,7 +422,7 @@ begin_iface_scan(struct iface_conf_list
|
||||
@@ -443,7 +443,7 @@ begin_iface_scan(struct iface_conf_list
|
||||
}
|
||||
|
||||
#ifdef DHCPv6
|
||||
@ -163,9 +154,9 @@ diff -up dhcp-4.0.0/common/discover.c.cloexec dhcp-4.0.0/common/discover.c
|
||||
if (ifaces->fp6 == NULL) {
|
||||
log_error("Error opening '/proc/net/if_inet6' to "
|
||||
"list IPv6 interfaces; %m");
|
||||
diff -up dhcp-4.0.0/common/dlpi.c.cloexec dhcp-4.0.0/common/dlpi.c
|
||||
--- dhcp-4.0.0/common/dlpi.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/dlpi.c 2008-10-29 13:04:35.000000000 -1000
|
||||
diff -up dhcp-4.1.0/common/dlpi.c.cloexec dhcp-4.1.0/common/dlpi.c
|
||||
--- dhcp-4.1.0/common/dlpi.c.cloexec 2009-01-06 11:56:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/dlpi.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -795,7 +795,7 @@ dlpiopen(const char *ifname) {
|
||||
}
|
||||
*dp = '\0';
|
||||
@ -175,9 +166,9 @@ diff -up dhcp-4.0.0/common/dlpi.c.cloexec dhcp-4.0.0/common/dlpi.c
|
||||
}
|
||||
|
||||
/*
|
||||
diff -up dhcp-4.0.0/common/nit.c.cloexec dhcp-4.0.0/common/nit.c
|
||||
--- dhcp-4.0.0/common/nit.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/nit.c 2008-10-29 13:04:53.000000000 -1000
|
||||
diff -up dhcp-4.1.0/common/nit.c.cloexec dhcp-4.1.0/common/nit.c
|
||||
--- dhcp-4.1.0/common/nit.c.cloexec 2009-01-06 11:56:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/nit.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -81,7 +81,7 @@ int if_register_nit (info)
|
||||
struct strioctl sio;
|
||||
|
||||
@ -187,21 +178,21 @@ diff -up dhcp-4.0.0/common/nit.c.cloexec dhcp-4.0.0/common/nit.c
|
||||
if (sock < 0)
|
||||
log_fatal ("Can't open NIT device for %s: %m", info -> name);
|
||||
|
||||
diff -up dhcp-4.0.0/common/resolv.c.cloexec dhcp-4.0.0/common/resolv.c
|
||||
--- dhcp-4.0.0/common/resolv.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/resolv.c 2008-10-29 13:05:08.000000000 -1000
|
||||
@@ -48,7 +48,7 @@ void read_resolv_conf (parse_time)
|
||||
struct name_server *sp, *sl, *ns;
|
||||
diff -up dhcp-4.1.0/common/resolv.c.cloexec dhcp-4.1.0/common/resolv.c
|
||||
--- dhcp-4.1.0/common/resolv.c.cloexec 2008-03-07 10:12:44.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/resolv.c 2009-01-06 12:05:17.000000000 -1000
|
||||
@@ -49,7 +49,7 @@ void read_resolv_conf (parse_time)
|
||||
struct domain_search_list *dp, *dl, *nd;
|
||||
isc_result_t status;
|
||||
|
||||
- if ((file = open (path_resolv_conf, O_RDONLY)) < 0) {
|
||||
+ if ((file = open (path_resolv_conf, O_RDONLY | O_CLOEXEC)) < 0) {
|
||||
log_error ("Can't open %s: %m", path_resolv_conf);
|
||||
return;
|
||||
}
|
||||
diff -up dhcp-4.0.0/common/upf.c.cloexec dhcp-4.0.0/common/upf.c
|
||||
--- dhcp-4.0.0/common/upf.c.cloexec 2008-10-29 12:59:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/upf.c 2008-10-29 13:05:27.000000000 -1000
|
||||
diff -up dhcp-4.1.0/common/upf.c.cloexec dhcp-4.1.0/common/upf.c
|
||||
--- dhcp-4.1.0/common/upf.c.cloexec 2009-01-06 11:56:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/upf.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -77,7 +77,7 @@ int if_register_upf (info)
|
||||
/* %Audit% Cannot exceed 36 bytes. %2004.06.17,Safe% */
|
||||
sprintf(filename, "/dev/pf/pfilt%d", b);
|
||||
@ -211,9 +202,9 @@ diff -up dhcp-4.0.0/common/upf.c.cloexec dhcp-4.0.0/common/upf.c
|
||||
if (sock < 0) {
|
||||
if (errno == EBUSY) {
|
||||
continue;
|
||||
diff -up dhcp-4.0.0/dst/dst_api.c.cloexec dhcp-4.0.0/dst/dst_api.c
|
||||
--- dhcp-4.0.0/dst/dst_api.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/dst/dst_api.c 2008-10-29 13:06:22.000000000 -1000
|
||||
diff -up dhcp-4.1.0/dst/dst_api.c.cloexec dhcp-4.1.0/dst/dst_api.c
|
||||
--- dhcp-4.1.0/dst/dst_api.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/dst/dst_api.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -436,7 +436,7 @@ dst_s_write_private_key(const DST_KEY *k
|
||||
PRIVATE_KEY, PATH_MAX);
|
||||
|
||||
@ -250,9 +241,9 @@ diff -up dhcp-4.0.0/dst/dst_api.c.cloexec dhcp-4.0.0/dst/dst_api.c
|
||||
EREPORT(("dst_s_read_private_key_file: Could not open file %s in directory %s\n",
|
||||
filename, dst_path[0] ? dst_path :
|
||||
(char *) getcwd(NULL, PATH_MAX - 1)));
|
||||
diff -up dhcp-4.0.0/dst/prandom.c.cloexec dhcp-4.0.0/dst/prandom.c
|
||||
--- dhcp-4.0.0/dst/prandom.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/dst/prandom.c 2008-10-29 13:06:50.000000000 -1000
|
||||
diff -up dhcp-4.1.0/dst/prandom.c.cloexec dhcp-4.1.0/dst/prandom.c
|
||||
--- dhcp-4.1.0/dst/prandom.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/dst/prandom.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -267,7 +267,7 @@ get_dev_random(u_char *output, unsigned
|
||||
|
||||
s = stat("/dev/random", &st);
|
||||
@ -271,10 +262,10 @@ diff -up dhcp-4.0.0/dst/prandom.c.cloexec dhcp-4.0.0/dst/prandom.c
|
||||
return (0);
|
||||
for (no = 0; (i = fread(buf, sizeof(*buf), sizeof(buf), fp)) > 0;
|
||||
no += i)
|
||||
diff -up dhcp-4.0.0/minires/res_init.c.cloexec dhcp-4.0.0/minires/res_init.c
|
||||
--- dhcp-4.0.0/minires/res_init.c.cloexec 2007-10-01 04:47:35.000000000 -1000
|
||||
+++ dhcp-4.0.0/minires/res_init.c 2008-10-29 13:07:12.000000000 -1000
|
||||
@@ -234,7 +234,7 @@ minires_vinit(res_state statp, int prein
|
||||
diff -up dhcp-4.1.0/minires/res_init.c.cloexec dhcp-4.1.0/minires/res_init.c
|
||||
--- dhcp-4.1.0/minires/res_init.c.cloexec 2008-02-28 11:21:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/minires/res_init.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -233,7 +233,7 @@ minires_vinit(res_state statp, int prein
|
||||
(line[sizeof(name) - 1] == ' ' || \
|
||||
line[sizeof(name) - 1] == '\t'))
|
||||
|
||||
@ -283,10 +274,10 @@ diff -up dhcp-4.0.0/minires/res_init.c.cloexec dhcp-4.0.0/minires/res_init.c
|
||||
/* read the config file */
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
/* skip comments */
|
||||
diff -up dhcp-4.0.0/minires/res_query.c.cloexec dhcp-4.0.0/minires/res_query.c
|
||||
--- dhcp-4.0.0/minires/res_query.c.cloexec 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.0.0/minires/res_query.c 2008-10-29 13:07:30.000000000 -1000
|
||||
@@ -391,7 +391,7 @@ res_hostalias(const res_state statp, con
|
||||
diff -up dhcp-4.1.0/minires/res_query.c.cloexec dhcp-4.1.0/minires/res_query.c
|
||||
--- dhcp-4.1.0/minires/res_query.c.cloexec 2008-02-28 11:21:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/minires/res_query.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -379,7 +379,7 @@ res_hostalias(const res_state statp, con
|
||||
if (statp->options & RES_NOALIASES)
|
||||
return (NULL);
|
||||
file = getenv("HOSTALIASES");
|
||||
@ -295,9 +286,9 @@ diff -up dhcp-4.0.0/minires/res_query.c.cloexec dhcp-4.0.0/minires/res_query.c
|
||||
return (NULL);
|
||||
setbuf(fp, NULL);
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
diff -up dhcp-4.0.0/omapip/trace.c.cloexec dhcp-4.0.0/omapip/trace.c
|
||||
--- dhcp-4.0.0/omapip/trace.c.cloexec 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.0.0/omapip/trace.c 2008-10-29 13:08:04.000000000 -1000
|
||||
diff -up dhcp-4.1.0/omapip/trace.c.cloexec dhcp-4.1.0/omapip/trace.c
|
||||
--- dhcp-4.1.0/omapip/trace.c.cloexec 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.1.0/omapip/trace.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -140,10 +140,10 @@ isc_result_t trace_begin (const char *fi
|
||||
return ISC_R_INVALIDARG;
|
||||
}
|
||||
@ -320,43 +311,43 @@ diff -up dhcp-4.0.0/omapip/trace.c.cloexec dhcp-4.0.0/omapip/trace.c
|
||||
if (!traceinfile) {
|
||||
log_error ("Can't open tracefile %s: %m", filename);
|
||||
return;
|
||||
diff -up dhcp-4.0.0/relay/dhcrelay.c.cloexec dhcp-4.0.0/relay/dhcrelay.c
|
||||
--- dhcp-4.0.0/relay/dhcrelay.c.cloexec 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/relay/dhcrelay.c 2008-10-29 13:08:49.000000000 -1000
|
||||
@@ -112,11 +112,11 @@ main(int argc, char **argv) {
|
||||
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
|
||||
2 (stderr) are open. To do this, we assume that when we
|
||||
open a file the lowest available file descriptor is used. */
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 0)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 1)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 2)
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
else if (fd != -1)
|
||||
@@ -288,12 +288,12 @@ main(int argc, char **argv) {
|
||||
exit (0);
|
||||
diff -up dhcp-4.1.0/relay/dhcrelay.c.cloexec dhcp-4.1.0/relay/dhcrelay.c
|
||||
--- dhcp-4.1.0/relay/dhcrelay.c.cloexec 2008-11-12 13:22:14.000000000 -1000
|
||||
+++ dhcp-4.1.0/relay/dhcrelay.c 2009-01-06 12:06:23.000000000 -1000
|
||||
@@ -174,11 +174,11 @@ main(int argc, char **argv) {
|
||||
/* Make sure that file descriptors 0(stdin), 1,(stdout), and
|
||||
2(stderr) are open. To do this, we assume that when we
|
||||
open a file the lowest available file descriptor is used. */
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 0)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 1)
|
||||
- fd = open("/dev/null", O_RDWR);
|
||||
+ fd = open("/dev/null", O_RDWR | O_CLOEXEC);
|
||||
if (fd == 2)
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
else if (fd != -1)
|
||||
@@ -511,12 +511,12 @@ main(int argc, char **argv) {
|
||||
exit(0);
|
||||
|
||||
pfdesc = open (path_dhcrelay_pid,
|
||||
pfdesc = open(path_dhcrelay_pid,
|
||||
- O_CREAT | O_TRUNC | O_WRONLY, 0644);
|
||||
+ O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC, 0644);
|
||||
|
||||
if (pfdesc < 0) {
|
||||
log_error ("Can't create %s: %m", path_dhcrelay_pid);
|
||||
log_error("Can't create %s: %m", path_dhcrelay_pid);
|
||||
} else {
|
||||
- pf = fdopen (pfdesc, "w");
|
||||
+ pf = fdopen (pfdesc, "we");
|
||||
- pf = fdopen(pfdesc, "w");
|
||||
+ pf = fdopen(pfdesc, "we");
|
||||
if (!pf)
|
||||
log_error ("Can't fdopen %s: %m",
|
||||
log_error("Can't fdopen %s: %m",
|
||||
path_dhcrelay_pid);
|
||||
diff -up dhcp-4.0.0/server/confpars.c.cloexec dhcp-4.0.0/server/confpars.c
|
||||
--- dhcp-4.0.0/server/confpars.c.cloexec 2008-10-29 12:59:28.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/confpars.c 2008-10-29 13:09:17.000000000 -1000
|
||||
@@ -115,7 +115,7 @@ isc_result_t read_conf_file (const char
|
||||
diff -up dhcp-4.1.0/server/confpars.c.cloexec dhcp-4.1.0/server/confpars.c
|
||||
--- dhcp-4.1.0/server/confpars.c.cloexec 2009-01-06 11:56:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/confpars.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -116,7 +116,7 @@ isc_result_t read_conf_file (const char
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -365,10 +356,10 @@ diff -up dhcp-4.0.0/server/confpars.c.cloexec dhcp-4.0.0/server/confpars.c
|
||||
if (leasep) {
|
||||
log_error ("Can't open lease database %s: %m --",
|
||||
path_dhcpd_db);
|
||||
diff -up dhcp-4.0.0/server/db.c.cloexec dhcp-4.0.0/server/db.c
|
||||
--- dhcp-4.0.0/server/db.c.cloexec 2007-10-05 12:29:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/db.c 2008-10-29 13:09:39.000000000 -1000
|
||||
@@ -974,7 +974,7 @@ void db_startup (testp)
|
||||
diff -up dhcp-4.1.0/server/db.c.cloexec dhcp-4.1.0/server/db.c
|
||||
--- dhcp-4.1.0/server/db.c.cloexec 2008-03-31 03:49:45.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/db.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -1021,7 +1021,7 @@ void db_startup (testp)
|
||||
}
|
||||
#endif
|
||||
if (!testp) {
|
||||
@ -377,7 +368,7 @@ diff -up dhcp-4.0.0/server/db.c.cloexec dhcp-4.0.0/server/db.c
|
||||
if (!db_file)
|
||||
log_fatal ("Can't open %s for append.", path_dhcpd_db);
|
||||
expire_all_pools ();
|
||||
@@ -1022,12 +1022,12 @@ int new_lease_file ()
|
||||
@@ -1069,12 +1069,12 @@ int new_lease_file ()
|
||||
path_dhcpd_db, (int)t) >= sizeof newfname)
|
||||
log_fatal("new_lease_file: lease file path too long");
|
||||
|
||||
@ -392,10 +383,10 @@ diff -up dhcp-4.0.0/server/db.c.cloexec dhcp-4.0.0/server/db.c
|
||||
log_error("Can't fdopen new lease file: %m");
|
||||
close(db_fd);
|
||||
goto fdfail;
|
||||
diff -up dhcp-4.0.0/server/dhcpd.c.cloexec dhcp-4.0.0/server/dhcpd.c
|
||||
--- dhcp-4.0.0/server/dhcpd.c.cloexec 2008-10-29 12:59:28.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/dhcpd.c 2008-10-29 13:10:42.000000000 -1000
|
||||
@@ -225,11 +225,11 @@ main(int argc, char **argv) {
|
||||
diff -up dhcp-4.1.0/server/dhcpd.c.cloexec dhcp-4.1.0/server/dhcpd.c
|
||||
--- dhcp-4.1.0/server/dhcpd.c.cloexec 2009-01-06 11:56:09.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/dhcpd.c 2009-01-06 12:06:49.000000000 -1000
|
||||
@@ -266,11 +266,11 @@ main(int argc, char **argv) {
|
||||
/* Make sure that file descriptors 0 (stdin), 1, (stdout), and
|
||||
2 (stderr) are open. To do this, we assume that when we
|
||||
open a file the lowest available file descriptor is used. */
|
||||
@ -410,8 +401,8 @@ diff -up dhcp-4.0.0/server/dhcpd.c.cloexec dhcp-4.0.0/server/dhcpd.c
|
||||
if (fd == 2)
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
else if (fd != -1)
|
||||
@@ -658,7 +658,7 @@ main(int argc, char **argv) {
|
||||
}
|
||||
@@ -779,7 +779,7 @@ main(int argc, char **argv) {
|
||||
#endif /* PARANOIA */
|
||||
|
||||
/* Read previous pid file. */
|
||||
- if ((i = open (path_dhcpd_pid, O_RDONLY)) >= 0) {
|
||||
@ -419,7 +410,7 @@ diff -up dhcp-4.0.0/server/dhcpd.c.cloexec dhcp-4.0.0/server/dhcpd.c
|
||||
status = read(i, pbuf, (sizeof pbuf) - 1);
|
||||
close (i);
|
||||
if (status > 0) {
|
||||
@@ -676,7 +676,7 @@ main(int argc, char **argv) {
|
||||
@@ -797,7 +797,7 @@ main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
/* Write new pid file. */
|
||||
@ -428,7 +419,7 @@ diff -up dhcp-4.0.0/server/dhcpd.c.cloexec dhcp-4.0.0/server/dhcpd.c
|
||||
sprintf(pbuf, "%d\n", (int) getpid());
|
||||
write(i, pbuf, strlen(pbuf));
|
||||
close(i);
|
||||
@@ -702,9 +702,9 @@ main(int argc, char **argv) {
|
||||
@@ -823,9 +823,9 @@ main(int argc, char **argv) {
|
||||
close(2);
|
||||
|
||||
/* Reopen them on /dev/null. */
|
||||
@ -441,9 +432,9 @@ diff -up dhcp-4.0.0/server/dhcpd.c.cloexec dhcp-4.0.0/server/dhcpd.c
|
||||
log_perror = 0; /* No sense logging to /dev/null. */
|
||||
|
||||
chdir("/");
|
||||
diff -up dhcp-4.0.0/server/ldap.c.cloexec dhcp-4.0.0/server/ldap.c
|
||||
--- dhcp-4.0.0/server/ldap.c.cloexec 2008-10-29 12:59:28.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/ldap.c 2008-10-29 13:11:10.000000000 -1000
|
||||
diff -up dhcp-4.1.0/server/ldap.c.cloexec dhcp-4.1.0/server/ldap.c
|
||||
--- dhcp-4.1.0/server/ldap.c.cloexec 2009-01-06 11:56:09.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/ldap.c 2009-01-06 11:56:11.000000000 -1000
|
||||
@@ -685,7 +685,7 @@ ldap_start (void)
|
||||
|
||||
if (ldap_debug_file != NULL && ldap_debug_fd == -1)
|
@ -1,6 +1,6 @@
|
||||
diff -up dhcp-4.0.0/client/clparse.c.dho dhcp-4.0.0/client/clparse.c
|
||||
--- dhcp-4.0.0/client/clparse.c.dho 2007-12-29 06:32:16.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/clparse.c 2007-12-29 06:35:41.000000000 -1000
|
||||
diff -up dhcp-4.1.0/client/clparse.c.requested dhcp-4.1.0/client/clparse.c
|
||||
--- dhcp-4.1.0/client/clparse.c.requested 2009-01-06 10:40:46.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/clparse.c 2009-01-06 10:40:47.000000000 -1000
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
struct client_config top_level_config;
|
||||
@ -10,7 +10,7 @@ diff -up dhcp-4.0.0/client/clparse.c.dho dhcp-4.0.0/client/clparse.c
|
||||
struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
|
||||
|
||||
static void parse_client_default_duid(struct parse *cfile);
|
||||
@@ -107,6 +107,21 @@ isc_result_t read_client_conf ()
|
||||
@@ -111,6 +111,21 @@ isc_result_t read_client_conf ()
|
||||
option_code_hash_lookup(&default_requested_options[8],
|
||||
dhcpv6_universe.code_hash, &code, 0, MDL);
|
||||
|
@ -1,56 +1,7 @@
|
||||
diff -up dhcp-4.0.0/common/lpf.c.anycast dhcp-4.0.0/common/lpf.c
|
||||
--- dhcp-4.0.0/common/lpf.c.anycast 2007-12-29 06:44:46.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/lpf.c 2007-12-29 10:40:11.000000000 -1000
|
||||
@@ -331,6 +331,9 @@ ssize_t send_packet (interface, packet,
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
+ if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
+ hto = &interface->anycast_mac_addr;
|
||||
+
|
||||
/* Assemble the headers... */
|
||||
assemble_hw_header (interface, (unsigned char *)hh, &hbufp, hto);
|
||||
fudge = hbufp % 4; /* IP header must be word-aligned. */
|
||||
diff -up dhcp-4.0.0/common/conflex.c.anycast dhcp-4.0.0/common/conflex.c
|
||||
--- dhcp-4.0.0/common/conflex.c.anycast 2007-12-29 06:44:46.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/conflex.c 2007-12-29 10:39:30.000000000 -1000
|
||||
@@ -715,6 +715,8 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
}
|
||||
if (!strcasecmp (atom + 1, "nd"))
|
||||
return AND;
|
||||
+ if (!strcasecmp (atom + 1, "nycast-mac"))
|
||||
+ return ANYCAST_MAC;
|
||||
if (!strcasecmp (atom + 1, "ppend"))
|
||||
return APPEND;
|
||||
if (!strcasecmp (atom + 1, "llow"))
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.anycast dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.anycast 2007-12-29 06:44:46.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2007-12-29 10:42:56.000000000 -1000
|
||||
@@ -1188,6 +1188,7 @@ struct interface_info {
|
||||
int dlpi_sap_length;
|
||||
struct hardware dlpi_broadcast_addr;
|
||||
# endif /* DLPI_SEND || DLPI_RECEIVE */
|
||||
+ struct hardware anycast_mac_addr;
|
||||
};
|
||||
|
||||
struct hardware_link {
|
||||
diff -up dhcp-4.0.0/includes/dhctoken.h.anycast dhcp-4.0.0/includes/dhctoken.h
|
||||
--- dhcp-4.0.0/includes/dhctoken.h.anycast 2007-12-29 06:44:46.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhctoken.h 2007-12-29 10:44:00.000000000 -1000
|
||||
@@ -346,7 +346,8 @@ enum dhcp_token {
|
||||
WHITESPACE = 649,
|
||||
TOKEN_ALSO = 650,
|
||||
AFTER = 651,
|
||||
- BOOTP_BROADCAST_ALWAYS = 652
|
||||
+ BOOTP_BROADCAST_ALWAYS = 652,
|
||||
+ ANYCAST_MAC = 653
|
||||
};
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||
diff -up dhcp-4.0.0/client/clparse.c.anycast dhcp-4.0.0/client/clparse.c
|
||||
--- dhcp-4.0.0/client/clparse.c.anycast 2007-12-29 06:44:46.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/clparse.c 2007-12-29 10:38:55.000000000 -1000
|
||||
@@ -550,6 +550,17 @@ void parse_client_statement (cfile, ip,
|
||||
diff -up dhcp-4.1.0/client/clparse.c.anycast dhcp-4.1.0/client/clparse.c
|
||||
--- dhcp-4.1.0/client/clparse.c.anycast 2009-01-06 10:43:52.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/clparse.c 2009-01-06 10:43:53.000000000 -1000
|
||||
@@ -558,6 +558,17 @@ void parse_client_statement (cfile, ip,
|
||||
}
|
||||
return;
|
||||
|
||||
@ -68,3 +19,52 @@ diff -up dhcp-4.0.0/client/clparse.c.anycast dhcp-4.0.0/client/clparse.c
|
||||
case REQUEST:
|
||||
token = next_token (&val, (unsigned *)0, cfile);
|
||||
if (config -> requested_options == default_requested_options)
|
||||
diff -up dhcp-4.1.0/common/conflex.c.anycast dhcp-4.1.0/common/conflex.c
|
||||
--- dhcp-4.1.0/common/conflex.c.anycast 2009-01-06 10:43:52.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/conflex.c 2009-01-06 10:43:53.000000000 -1000
|
||||
@@ -729,6 +729,8 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
}
|
||||
if (!strcasecmp (atom + 1, "nd"))
|
||||
return AND;
|
||||
+ if (!strcasecmp (atom + 1, "nycast-mac"))
|
||||
+ return ANYCAST_MAC;
|
||||
if (!strcasecmp (atom + 1, "ppend"))
|
||||
return APPEND;
|
||||
if (!strcasecmp (atom + 1, "llow"))
|
||||
diff -up dhcp-4.1.0/common/lpf.c.anycast dhcp-4.1.0/common/lpf.c
|
||||
--- dhcp-4.1.0/common/lpf.c.anycast 2009-01-06 10:43:52.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/lpf.c 2009-01-06 10:43:53.000000000 -1000
|
||||
@@ -333,6 +333,9 @@ ssize_t send_packet (interface, packet,
|
||||
return send_fallback (interface, packet, raw,
|
||||
len, from, to, hto);
|
||||
|
||||
+ if (hto == NULL && interface->anycast_mac_addr.hlen)
|
||||
+ hto = &interface->anycast_mac_addr;
|
||||
+
|
||||
/* Assemble the headers... */
|
||||
assemble_hw_header (interface, (unsigned char *)hh, &hbufp, hto);
|
||||
fudge = hbufp % 4; /* IP header must be word-aligned. */
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.anycast dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.anycast 2009-01-06 10:43:53.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 10:43:53.000000000 -1000
|
||||
@@ -1215,6 +1215,7 @@ struct interface_info {
|
||||
int dlpi_sap_length;
|
||||
struct hardware dlpi_broadcast_addr;
|
||||
# endif /* DLPI_SEND || DLPI_RECEIVE */
|
||||
+ struct hardware anycast_mac_addr;
|
||||
};
|
||||
|
||||
struct hardware_link {
|
||||
diff -up dhcp-4.1.0/includes/dhctoken.h.anycast dhcp-4.1.0/includes/dhctoken.h
|
||||
--- dhcp-4.1.0/includes/dhctoken.h.anycast 2009-01-06 10:43:52.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhctoken.h 2009-01-06 10:49:12.000000000 -1000
|
||||
@@ -353,7 +353,8 @@ enum dhcp_token {
|
||||
TEMPORARY = 656,
|
||||
PREFIX6 = 657,
|
||||
FIXED_PREFIX6 = 658,
|
||||
- BOOTP_BROADCAST_ALWAYS = 659
|
||||
+ BOOTP_BROADCAST_ALWAYS = 659,
|
||||
+ ANYCAST_MAC = 660
|
||||
};
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
|
||||
--- dhcp-4.0.0//client/dhclient.c.backoff 2008-08-01 10:09:17.000000000 -1000
|
||||
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:10:10.000000000 -1000
|
||||
@@ -1003,6 +1003,7 @@ void state_init (cpp)
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.backoff dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.backoff 2009-01-06 10:08:07.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 10:10:27.000000000 -1000
|
||||
@@ -1185,6 +1185,7 @@ void state_init (cpp)
|
||||
void *cpp;
|
||||
{
|
||||
struct client_state *client = cpp;
|
||||
@ -9,7 +9,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
|
||||
|
||||
ASSERT_STATE(state, S_INIT);
|
||||
|
||||
@@ -1015,9 +1016,16 @@ void state_init (cpp)
|
||||
@@ -1197,9 +1198,16 @@ void state_init (cpp)
|
||||
client -> first_sending = cur_time;
|
||||
client -> interval = client -> config -> initial_interval;
|
||||
|
||||
@ -28,8 +28,8 @@ diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
|
||||
+ }
|
||||
}
|
||||
|
||||
/* state_selecting is called when one or more DHCPOFFER packets have been
|
||||
@@ -1284,6 +1292,7 @@ void bind_lease (client)
|
||||
/*
|
||||
@@ -1478,6 +1486,7 @@ void bind_lease (client)
|
||||
send_decline (client);
|
||||
destroy_client_lease (client -> new);
|
||||
client -> new = (struct client_lease *)0;
|
||||
@ -37,7 +37,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
|
||||
state_init (client);
|
||||
return;
|
||||
}
|
||||
@@ -3439,6 +3448,7 @@ void client_location_changed ()
|
||||
@@ -3680,6 +3689,7 @@ void client_location_changed ()
|
||||
case S_INIT:
|
||||
case S_REBINDING:
|
||||
case S_STOPPED:
|
||||
@ -45,10 +45,10 @@ diff -up dhcp-4.0.0//client/dhclient.c.backoff dhcp-4.0.0//client/dhclient.c
|
||||
break;
|
||||
}
|
||||
client -> state = S_INIT;
|
||||
diff -up dhcp-4.0.0//includes/dhcpd.h.backoff dhcp-4.0.0//includes/dhcpd.h
|
||||
--- dhcp-4.0.0//includes/dhcpd.h.backoff 2008-08-01 10:09:01.000000000 -1000
|
||||
+++ dhcp-4.0.0//includes/dhcpd.h 2008-08-01 10:10:10.000000000 -1000
|
||||
@@ -992,7 +992,8 @@ enum dhcp_state {
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.backoff dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.backoff 2009-01-06 10:08:07.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 10:08:07.000000000 -1000
|
||||
@@ -1016,7 +1016,8 @@ enum dhcp_state {
|
||||
S_BOUND = 5,
|
||||
S_RENEWING = 6,
|
||||
S_REBINDING = 7,
|
14
dhcp-4.1.0-dhclient-usage.patch
Normal file
14
dhcp-4.1.0-dhclient-usage.patch
Normal file
@ -0,0 +1,14 @@
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.usage dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.usage 2009-01-06 10:36:55.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 10:39:58.000000000 -1000
|
||||
@@ -990,6 +990,10 @@ static void usage()
|
||||
"[-s server]");
|
||||
log_error(" [-cf config-file] [-lf lease-file]%s",
|
||||
"[-pf pid-file] [-e VAR=val]");
|
||||
+ log_error(" [-I <dhcp-client-identifier>] [-B]");
|
||||
+ log_error(" [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]");
|
||||
+ log_error(" [-V <vendor-class-identifier>]");
|
||||
+ log_error(" [-R <request option list>]");
|
||||
log_fatal(" [-sf script-file] [interface]");
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
diff -up dhcp-4.0.0//omapip/errwarn.c.errwarn dhcp-4.0.0//omapip/errwarn.c
|
||||
--- dhcp-4.0.0//omapip/errwarn.c.errwarn 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.0.0//omapip/errwarn.c 2008-08-01 10:06:05.000000000 -1000
|
||||
diff -up dhcp-4.1.0/omapip/errwarn.c.errwarn dhcp-4.1.0/omapip/errwarn.c
|
||||
--- dhcp-4.1.0/omapip/errwarn.c.errwarn 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.1.0/omapip/errwarn.c 2009-01-06 07:02:20.000000000 -1000
|
||||
@@ -76,20 +76,13 @@ void log_fatal (const char * fmt, ... )
|
||||
|
||||
#if !defined (NOMINUM)
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0//server/confpars.c.failover dhcp-4.0.0//server/confpars.c
|
||||
--- dhcp-4.0.0//server/confpars.c.failover 2008-08-01 10:07:46.000000000 -1000
|
||||
+++ dhcp-4.0.0//server/confpars.c 2008-08-01 10:14:03.000000000 -1000
|
||||
@@ -1065,10 +1065,17 @@ void parse_failover_peer (cfile, group,
|
||||
diff -up dhcp-4.1.0/server/confpars.c.failover dhcp-4.1.0/server/confpars.c
|
||||
--- dhcp-4.1.0/server/confpars.c.failover 2009-01-06 10:24:38.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/confpars.c 2009-01-06 10:24:38.000000000 -1000
|
||||
@@ -1142,10 +1142,17 @@ void parse_failover_peer (cfile, group,
|
||||
parse_warn (cfile, "peer address may not be omitted");
|
||||
|
||||
/* XXX - when/if we get a port number assigned, just set as default */
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0//common/tables.c.garbage dhcp-4.0.0//common/tables.c
|
||||
--- dhcp-4.0.0//common/tables.c.garbage 2007-12-03 09:10:19.000000000 -1000
|
||||
+++ dhcp-4.0.0//common/tables.c 2008-08-05 14:59:08.000000000 -1000
|
||||
@@ -201,7 +201,7 @@ static struct option dhcp_options[] = {
|
||||
diff -up dhcp-4.1.0/common/tables.c.garbage dhcp-4.1.0/common/tables.c
|
||||
--- dhcp-4.1.0/common/tables.c.garbage 2008-01-23 16:43:04.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/tables.c 2009-01-06 12:09:41.000000000 -1000
|
||||
@@ -207,7 +207,7 @@ static struct option dhcp_options[] = {
|
||||
{ "netinfo-server-tag", "t", &dhcp_universe, 113, 1 },
|
||||
{ "default-url", "t", &dhcp_universe, 114, 1 },
|
||||
{ "subnet-selection", "I", &dhcp_universe, 118, 1 },
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0/client/dhclient.c.inherit dhcp-4.0.0/client/dhclient.c
|
||||
--- dhcp-4.0.0/client/dhclient.c.inherit 2008-08-01 11:34:29.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.c 2008-08-01 11:34:42.000000000 -1000
|
||||
@@ -2296,6 +2296,7 @@ void send_request (cpp)
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.inherit dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.inherit 2009-01-06 12:08:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 12:08:57.000000000 -1000
|
||||
@@ -2299,6 +2299,7 @@ void send_request (cpp)
|
||||
{
|
||||
struct client_state *client = cpp;
|
||||
|
||||
@ -9,7 +9,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.inherit dhcp-4.0.0/client/dhclient.c
|
||||
int result;
|
||||
int interval;
|
||||
struct sockaddr_in destination;
|
||||
@@ -2354,6 +2355,22 @@ void send_request (cpp)
|
||||
@@ -2358,6 +2359,22 @@ void send_request (cpp)
|
||||
/* Now do a preinit on the interface so that we can
|
||||
discover a new address. */
|
||||
script_init (client, "PREINIT", (struct string_list *)0);
|
@ -1,6 +1,6 @@
|
||||
diff -up dhcp-4.0.0/client/dhclient.conf.invalid dhcp-4.0.0/client/dhclient.conf
|
||||
--- dhcp-4.0.0/client/dhclient.conf.invalid 1997-06-02 12:50:44.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.conf 2008-10-23 10:01:58.000000000 -1000
|
||||
diff -up dhcp-4.1.0/client/dhclient.conf.supersede dhcp-4.1.0/client/dhclient.conf
|
||||
--- dhcp-4.1.0/client/dhclient.conf.supersede 1997-06-02 12:50:44.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.conf 2009-01-06 12:27:08.000000000 -1000
|
||||
@@ -1,10 +1,10 @@
|
||||
send host-name "andare.fugue.com";
|
||||
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
|
@ -1,41 +1,377 @@
|
||||
diff -up dhcp-4.0.0/server/Makefile.am.ldap dhcp-4.0.0/server/Makefile.am
|
||||
--- dhcp-4.0.0/server/Makefile.am.ldap 2007-05-29 06:32:11.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/Makefile.am 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -4,12 +4,10 @@ dist_sysconf_DATA = dhcpd.conf
|
||||
sbin_PROGRAMS = dhcpd
|
||||
dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c confpars.c db.c class.c failover.c \
|
||||
omapi.c mdb.c stables.c salloc.c ddns.c dhcpleasequery.c \
|
||||
- dhcpv6.c mdb6.c
|
||||
+ dhcpv6.c mdb6.c ldap.c ldap_casa.c
|
||||
diff -up dhcp-4.1.0/common/conflex.c.ldap dhcp-4.1.0/common/conflex.c
|
||||
--- dhcp-4.1.0/common/conflex.c.ldap 2008-03-07 10:12:44.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/conflex.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -43,6 +43,7 @@ static enum dhcp_token read_string PROTO
|
||||
static enum dhcp_token read_number PROTO ((int, struct parse *));
|
||||
static enum dhcp_token read_num_or_name PROTO ((int, struct parse *));
|
||||
static enum dhcp_token intern PROTO ((char *, enum dhcp_token));
|
||||
+static int read_function PROTO ((struct parse *));
|
||||
|
||||
-# libomapi.a this is here twice to handle circular library dependencies :(
|
||||
-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dst/libdst.a \
|
||||
- ../dhcpctl/libdhcpctl.a ../minires/libres.a \
|
||||
- ../omapip/libomapi.a
|
||||
+dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../minires/libres.a \
|
||||
+ ../dhcpctl/libdhcpctl.a ../dst/libdstnomd5.a -lldap
|
||||
isc_result_t new_parse (cfile, file, inbuf, buflen, name, eolp)
|
||||
struct parse **cfile;
|
||||
@@ -73,6 +74,10 @@ isc_result_t new_parse (cfile, file, inb
|
||||
tmp->file = file;
|
||||
tmp->eol_token = eolp;
|
||||
|
||||
man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
|
||||
EXTRA_DIST = $(man_MANS)
|
||||
diff -up dhcp-4.0.0/server/mdb.c.ldap dhcp-4.0.0/server/mdb.c
|
||||
--- dhcp-4.0.0/server/mdb.c.ldap 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/mdb.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -600,6 +600,12 @@ int find_hosts_by_haddr (struct host_dec
|
||||
const char *file, int line)
|
||||
{
|
||||
struct hardware h;
|
||||
+ int ret;
|
||||
+ if (file != -1) {
|
||||
+ tmp -> read_function = read_function;
|
||||
+ }
|
||||
+
|
||||
if (inbuf != NULL) {
|
||||
tmp->inbuf = inbuf;
|
||||
tmp->buflen = buflen;
|
||||
@@ -177,9 +182,13 @@ static int get_char (cfile)
|
||||
/* My kingdom for WITH... */
|
||||
int c;
|
||||
|
||||
- if (cfile->bufix == cfile->buflen)
|
||||
- c = EOF;
|
||||
- else {
|
||||
+ if (cfile->bufix == cfile->buflen) {
|
||||
+ if (cfile -> read_function) {
|
||||
+ c = cfile -> read_function (cfile);
|
||||
+ } else {
|
||||
+ c = EOF;
|
||||
+ }
|
||||
+ } else {
|
||||
c = cfile->inbuf [cfile->bufix];
|
||||
cfile->bufix++;
|
||||
}
|
||||
@@ -1443,3 +1452,25 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
}
|
||||
return dfv;
|
||||
}
|
||||
+
|
||||
+static int
|
||||
+read_function (struct parse * cfile)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ ssize_t n = read (cfile -> file, cfile -> inbuf, cfile -> bufsiz);
|
||||
+ if (n == 0) {
|
||||
+ c = EOF;
|
||||
+ cfile -> bufix = 0;
|
||||
+ cfile -> buflen = 0;
|
||||
+ } else if (n < 0) {
|
||||
+ c = EOF;
|
||||
+ cfile -> bufix = cfile -> buflen = 0;
|
||||
+ } else {
|
||||
+ c = cfile -> inbuf [0];
|
||||
+ cfile -> bufix = 1;
|
||||
+ cfile -> buflen = n;
|
||||
+ }
|
||||
+
|
||||
+ return c;
|
||||
+}
|
||||
diff -up dhcp-4.1.0/common/print.c.ldap dhcp-4.1.0/common/print.c
|
||||
--- dhcp-4.1.0/common/print.c.ldap 2007-10-01 04:47:35.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/print.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -163,9 +163,9 @@ char *print_base64 (const unsigned char
|
||||
}
|
||||
|
||||
char *print_hw_addr (htype, hlen, data)
|
||||
- int htype;
|
||||
- int hlen;
|
||||
- unsigned char *data;
|
||||
+ const int htype;
|
||||
+ const int hlen;
|
||||
+ const unsigned char *data;
|
||||
{
|
||||
static char habuf [49];
|
||||
char *s;
|
||||
diff -up dhcp-4.1.0/dst/Makefile.am.ldap dhcp-4.1.0/dst/Makefile.am
|
||||
--- dhcp-4.1.0/dst/Makefile.am.ldap 2007-05-29 06:32:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/dst/Makefile.am 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -2,7 +2,12 @@ AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
|
||||
|
||||
lib_LIBRARIES = libdst.a
|
||||
|
||||
+noinst_LIBRARIES = libdstnomd5.a
|
||||
+
|
||||
libdst_a_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
|
||||
base64.c prandom.c
|
||||
|
||||
+libdstnomd5_a_SOURCES = dst_support.c dst_api.c hmac_link.c \
|
||||
+ base64.c prandom.c
|
||||
+
|
||||
EXTRA_DIST = dst_internal.h md5.h md5_locl.h
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.ldap dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.ldap 2008-08-29 07:48:57.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -102,6 +102,11 @@ typedef time_t TIME;
|
||||
#include <isc-dhcp/result.h>
|
||||
#include <omapip/omapip_p.h>
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+ if ((ret = find_haddr_in_ldap (hp, htype, hlen, haddr, file, line)))
|
||||
+ return ret;
|
||||
+# include <ldap.h>
|
||||
+# include <sys/utsname.h> /* for uname() */
|
||||
+#endif
|
||||
+
|
||||
#if !defined (BYTE_NAME_HASH_SIZE)
|
||||
# define BYTE_NAME_HASH_SIZE 401 /* Default would be ridiculous. */
|
||||
#endif
|
||||
@@ -291,6 +296,8 @@ struct parse {
|
||||
size_t bufsiz;
|
||||
|
||||
struct parse *saved_state;
|
||||
+
|
||||
+ int (*read_function) (struct parse *);
|
||||
};
|
||||
|
||||
/* Variable-length array of data. */
|
||||
@@ -422,6 +429,32 @@ struct hardware {
|
||||
u_int8_t hbuf [17];
|
||||
};
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+# define LDAP_BUFFER_SIZE 8192
|
||||
+# define LDAP_METHOD_STATIC 0
|
||||
+# define LDAP_METHOD_DYNAMIC 1
|
||||
+#if defined (USE_SSL)
|
||||
+# define LDAP_SSL_OFF 0
|
||||
+# define LDAP_SSL_ON 1
|
||||
+# define LDAP_SSL_TLS 2
|
||||
+# define LDAP_SSL_LDAPS 3
|
||||
+#endif
|
||||
+
|
||||
+/* This is a tree of the current configuration we are building from LDAP */
|
||||
+struct ldap_config_stack {
|
||||
+ LDAPMessage * res; /* Pointer returned from ldap_search */
|
||||
+ LDAPMessage * ldent; /* Current item in LDAP that we're processing.
|
||||
+ in res */
|
||||
+ int close_brace; /* Put a closing } after we're through with
|
||||
+ this item */
|
||||
+ int processed; /* We set this flag if this base item has been
|
||||
+ processed. After this base item is processed,
|
||||
+ we can start processing the children */
|
||||
+ struct ldap_config_stack *children;
|
||||
+ struct ldap_config_stack *next;
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
typedef enum {
|
||||
server_startup = 0,
|
||||
server_running = 1,
|
||||
@@ -642,6 +675,29 @@ struct lease_state {
|
||||
# define DEFAULT_ACK_DELAY_USECS 250000 /* 1/4 of a second */
|
||||
#endif
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+# define SV_LDAP_SERVER 57
|
||||
+# define SV_LDAP_PORT 58
|
||||
+# define SV_LDAP_USERNAME 59
|
||||
+# define SV_LDAP_PASSWORD 60
|
||||
+# define SV_LDAP_BASE_DN 61
|
||||
+# define SV_LDAP_METHOD 62
|
||||
+# define SV_LDAP_DEBUG_FILE 63
|
||||
+# define SV_LDAP_DHCP_SERVER_CN 64
|
||||
+# define SV_LDAP_REFERRALS 65
|
||||
+#if defined (USE_SSL)
|
||||
+# define SV_LDAP_SSL 66
|
||||
+# define SV_LDAP_TLS_REQCERT 67
|
||||
+# define SV_LDAP_TLS_CA_FILE 68
|
||||
+# define SV_LDAP_TLS_CA_DIR 69
|
||||
+# define SV_LDAP_TLS_CERT 70
|
||||
+# define SV_LDAP_TLS_KEY 71
|
||||
+# define SV_LDAP_TLS_CRLCHECK 72
|
||||
+# define SV_LDAP_TLS_CIPHERS 73
|
||||
+# define SV_LDAP_TLS_RANDFILE 74
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
#if !defined (DEFAULT_DEFAULT_LEASE_TIME)
|
||||
# define DEFAULT_DEFAULT_LEASE_TIME 43200
|
||||
#endif
|
||||
@@ -2107,7 +2163,7 @@ extern int db_time_format;
|
||||
char *quotify_string (const char *, const char *, int);
|
||||
char *quotify_buf (const unsigned char *, unsigned, const char *, int);
|
||||
char *print_base64 (const unsigned char *, unsigned, const char *, int);
|
||||
-char *print_hw_addr PROTO ((int, int, unsigned char *));
|
||||
+char *print_hw_addr PROTO ((const int, const int, const unsigned char *));
|
||||
void print_lease PROTO ((struct lease *));
|
||||
void dump_raw PROTO ((const unsigned char *, unsigned));
|
||||
void dump_packet_option (struct option_cache *, struct packet *,
|
||||
@@ -3228,6 +3284,20 @@ OMAPI_OBJECT_ALLOC_DECL (dhcp_failover_l
|
||||
|
||||
const char *binding_state_print (enum failover_state);
|
||||
|
||||
+/* ldap.c */
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+extern struct enumeration ldap_methods;
|
||||
+#if defined (USE_SSL)
|
||||
+extern struct enumeration ldap_ssl_usage_enum;
|
||||
+extern struct enumeration ldap_tls_reqcert_enum;
|
||||
+extern struct enumeration ldap_tls_crlcheck_enum;
|
||||
+#endif
|
||||
+isc_result_t ldap_read_config (void);
|
||||
+int find_haddr_in_ldap (struct host_decl **, int, unsigned,
|
||||
+ const unsigned char *, const char *, int);
|
||||
+int find_subclass_in_ldap (struct class *, struct class **,
|
||||
+ struct data_string *);
|
||||
+#endif
|
||||
|
||||
h.hlen = hlen + 1;
|
||||
h.hbuf [0] = htype;
|
||||
diff -up /dev/null dhcp-4.0.0/server/ldap_casa.c
|
||||
--- /dev/null 2008-02-04 11:13:29.142014072 -1000
|
||||
+++ dhcp-4.0.0/server/ldap_casa.c 2008-02-06 14:34:44.000000000 -1000
|
||||
/* mdb6.c */
|
||||
HASH_FUNCTIONS_DECL(ia, unsigned char *, struct ia_xx, ia_hash_t);
|
||||
diff -up /dev/null dhcp-4.1.0/includes/ldap_casa.h
|
||||
--- /dev/null 2009-01-06 04:53:53.119052255 -1000
|
||||
+++ dhcp-4.1.0/includes/ldap_casa.h 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -0,0 +1,83 @@
|
||||
+/* ldap_casa.h
|
||||
+
|
||||
+ Definition for CASA modules... */
|
||||
+
|
||||
+/* Copyright (c) 2004 Internet Systems Consorium, Inc. ("ISC")
|
||||
+ * Copyright (c) 1995-2003 Internet Software Consortium.
|
||||
+ * Copyright (c) 2006 Novell, Inc.
|
||||
+
|
||||
+ * 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 ISC, ISC DHCP, 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 INTERNET SYSTEMS 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 ISC 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.
|
||||
+
|
||||
+ * This file was written by S Kalyanasundaram <skalyanasundaram@novell.com>
|
||||
+ */
|
||||
+
|
||||
+#if defined(LDAP_CASA_AUTH)
|
||||
+#ifndef __LDAP_CASA_H__
|
||||
+#define __LDAP_CASA_H__
|
||||
+
|
||||
+#include <micasa_mgmd.h>
|
||||
+#include <dlfcn.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+#define MICASA_LIB "libmicasa.so.1"
|
||||
+
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_GetCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ uint32_t *credentialType,
|
||||
+ void *credential,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_SetCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ uint32_t credentialType,
|
||||
+ void *credential,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_RemoveCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+static CASA_GetCredential_T p_miCASAGetCredential = NULL;
|
||||
+static CASA_SetCredential_T p_miCASASetCredential = NULL;
|
||||
+static CASA_RemoveCredential_T p_miCASARemoveCredential = NULL;
|
||||
+static void *casaIDK = NULL;
|
||||
+
|
||||
+int load_casa(void);
|
||||
+static void release_casa(void);
|
||||
+int load_uname_pwd_from_miCASA(char **, char **);
|
||||
+
|
||||
+#endif /* __LDAP_CASA_H__ */
|
||||
+#endif /* LDAP_CASA_AUTH */
|
||||
+
|
||||
diff -up dhcp-4.1.0/server/class.c.ldap dhcp-4.1.0/server/class.c
|
||||
--- dhcp-4.1.0/server/class.c.ldap 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/class.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -84,6 +84,7 @@ int check_collection (packet, lease, col
|
||||
int matched = 0;
|
||||
int status;
|
||||
int ignorep;
|
||||
+ int classfound;
|
||||
|
||||
for (class = collection -> classes; class; class = class -> nic) {
|
||||
#if defined (DEBUG_CLASS_MATCHING)
|
||||
@@ -129,9 +130,15 @@ int check_collection (packet, lease, col
|
||||
class -> submatch, MDL));
|
||||
if (status && data.len) {
|
||||
nc = (struct class *)0;
|
||||
- if (class_hash_lookup (&nc, class -> hash,
|
||||
- (const char *)data.data,
|
||||
- data.len, MDL)) {
|
||||
+ classfound = class_hash_lookup (&nc, class -> hash,
|
||||
+ (const char *)data.data, data.len, MDL);
|
||||
+
|
||||
+#ifdef LDAP_CONFIGURATION
|
||||
+ if (!classfound && find_subclass_in_ldap (class, &nc, &data))
|
||||
+ classfound = 1;
|
||||
+#endif
|
||||
+
|
||||
+ if (classfound) {
|
||||
#if defined (DEBUG_CLASS_MATCHING)
|
||||
log_info ("matches subclass %s.",
|
||||
print_hex_1 (data.len,
|
||||
diff -up dhcp-4.1.0/server/confpars.c.ldap dhcp-4.1.0/server/confpars.c
|
||||
--- dhcp-4.1.0/server/confpars.c.ldap 2008-10-22 01:41:57.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/confpars.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -61,7 +61,17 @@ void parse_trace_setup ()
|
||||
|
||||
isc_result_t readconf ()
|
||||
{
|
||||
- return read_conf_file (path_dhcpd_conf, root_group, ROOT_GROUP, 0);
|
||||
+ isc_result_t res;
|
||||
+
|
||||
+ res = read_conf_file (path_dhcpd_conf, root_group, ROOT_GROUP, 0);
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+ if (res != ISC_R_SUCCESS)
|
||||
+ return (res);
|
||||
+
|
||||
+ return ldap_read_config ();
|
||||
+#else
|
||||
+ return (res);
|
||||
+#endif
|
||||
}
|
||||
|
||||
isc_result_t read_conf_file (const char *filename, struct group *group,
|
||||
diff -up dhcp-4.1.0/server/dhcpd.c.ldap dhcp-4.1.0/server/dhcpd.c
|
||||
--- dhcp-4.1.0/server/dhcpd.c.ldap 2008-03-18 08:28:14.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/dhcpd.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -598,6 +598,14 @@ main(int argc, char **argv) {
|
||||
/* Add the ddns update style enumeration prior to parsing. */
|
||||
add_enumeration (&ddns_styles);
|
||||
add_enumeration (&syslog_enum);
|
||||
+#if defined (LDAP_CONFIGURATION)
|
||||
+ add_enumeration (&ldap_methods);
|
||||
+#if defined (USE_SSL)
|
||||
+ add_enumeration (&ldap_ssl_usage_enum);
|
||||
+ add_enumeration (&ldap_tls_reqcert_enum);
|
||||
+ add_enumeration (&ldap_tls_crlcheck_enum);
|
||||
+#endif
|
||||
+#endif
|
||||
|
||||
if (!group_allocate (&root_group, MDL))
|
||||
log_fatal ("Can't allocate root group!");
|
||||
diff -up /dev/null dhcp-4.1.0/server/ldap_casa.c
|
||||
--- /dev/null 2009-01-06 04:53:53.119052255 -1000
|
||||
+++ dhcp-4.1.0/server/ldap_casa.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -0,0 +1,138 @@
|
||||
+/* ldap_casa.c
|
||||
+
|
||||
@ -175,27 +511,9 @@ diff -up /dev/null dhcp-4.0.0/server/ldap_casa.c
|
||||
+
|
||||
+#endif /* LDAP_CASA_AUTH */
|
||||
+
|
||||
diff -up dhcp-4.0.0/server/dhcpd.c.ldap dhcp-4.0.0/server/dhcpd.c
|
||||
--- dhcp-4.0.0/server/dhcpd.c.ldap 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/dhcpd.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -505,6 +505,14 @@ main(int argc, char **argv) {
|
||||
/* Add the ddns update style enumeration prior to parsing. */
|
||||
add_enumeration (&ddns_styles);
|
||||
add_enumeration (&syslog_enum);
|
||||
+#if defined (LDAP_CONFIGURATION)
|
||||
+ add_enumeration (&ldap_methods);
|
||||
+#if defined (USE_SSL)
|
||||
+ add_enumeration (&ldap_ssl_usage_enum);
|
||||
+ add_enumeration (&ldap_tls_reqcert_enum);
|
||||
+ add_enumeration (&ldap_tls_crlcheck_enum);
|
||||
+#endif
|
||||
+#endif
|
||||
|
||||
if (!group_allocate (&root_group, MDL))
|
||||
log_fatal ("Can't allocate root group!");
|
||||
diff -up /dev/null dhcp-4.0.0/server/ldap.c
|
||||
--- /dev/null 2008-02-04 11:13:29.142014072 -1000
|
||||
+++ dhcp-4.0.0/server/ldap.c 2008-02-06 14:35:19.000000000 -1000
|
||||
diff -up /dev/null dhcp-4.1.0/server/ldap.c
|
||||
--- /dev/null 2009-01-06 04:53:53.119052255 -1000
|
||||
+++ dhcp-4.1.0/server/ldap.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -0,0 +1,2004 @@
|
||||
+/* ldap.c
|
||||
+
|
||||
@ -2201,106 +2519,89 @@ diff -up /dev/null dhcp-4.0.0/server/ldap.c
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
diff -up dhcp-4.0.0/server/confpars.c.ldap dhcp-4.0.0/server/confpars.c
|
||||
--- dhcp-4.0.0/server/confpars.c.ldap 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/confpars.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -60,7 +60,17 @@ void parse_trace_setup ()
|
||||
diff -up dhcp-4.1.0/server/Makefile.am.ldap dhcp-4.1.0/server/Makefile.am
|
||||
--- dhcp-4.1.0/server/Makefile.am.ldap 2007-05-29 06:32:11.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/Makefile.am 2009-01-06 07:03:12.000000000 -1000
|
||||
@@ -4,12 +4,10 @@ dist_sysconf_DATA = dhcpd.conf
|
||||
sbin_PROGRAMS = dhcpd
|
||||
dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c confpars.c db.c class.c failover.c \
|
||||
omapi.c mdb.c stables.c salloc.c ddns.c dhcpleasequery.c \
|
||||
- dhcpv6.c mdb6.c
|
||||
+ dhcpv6.c mdb6.c ldap.c ldap_casa.c
|
||||
|
||||
isc_result_t readconf ()
|
||||
-# libomapi.a this is here twice to handle circular library dependencies :(
|
||||
-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dst/libdst.a \
|
||||
- ../dhcpctl/libdhcpctl.a ../minires/libres.a \
|
||||
- ../omapip/libomapi.a
|
||||
+dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../minires/libres.a \
|
||||
+ ../dhcpctl/libdhcpctl.a ../dst/libdstnomd5.a -lldap
|
||||
|
||||
man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
|
||||
EXTRA_DIST = $(man_MANS)
|
||||
diff -up dhcp-4.1.0/server/mdb.c.ldap dhcp-4.1.0/server/mdb.c
|
||||
--- dhcp-4.1.0/server/mdb.c.ldap 2008-02-28 11:21:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/mdb.c 2009-01-06 07:03:13.000000000 -1000
|
||||
@@ -600,6 +600,12 @@ int find_hosts_by_haddr (struct host_dec
|
||||
const char *file, int line)
|
||||
{
|
||||
- return read_conf_file (path_dhcpd_conf, root_group, ROOT_GROUP, 0);
|
||||
+ isc_result_t res;
|
||||
struct hardware h;
|
||||
+ int ret;
|
||||
+
|
||||
+ res = read_conf_file (path_dhcpd_conf, root_group, ROOT_GROUP, 0);
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+ if (res != ISC_R_SUCCESS)
|
||||
+ return (res);
|
||||
+
|
||||
+ return ldap_read_config ();
|
||||
+#else
|
||||
+ return (res);
|
||||
+ if ((ret = find_haddr_in_ldap (hp, htype, hlen, haddr, file, line)))
|
||||
+ return ret;
|
||||
+#endif
|
||||
}
|
||||
|
||||
isc_result_t read_conf_file (const char *filename, struct group *group,
|
||||
diff -up dhcp-4.0.0/server/class.c.ldap dhcp-4.0.0/server/class.c
|
||||
--- dhcp-4.0.0/server/class.c.ldap 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/class.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -84,6 +84,7 @@ int check_collection (packet, lease, col
|
||||
int matched = 0;
|
||||
int status;
|
||||
int ignorep;
|
||||
+ int classfound;
|
||||
|
||||
for (class = collection -> classes; class; class = class -> nic) {
|
||||
#if defined (DEBUG_CLASS_MATCHING)
|
||||
@@ -129,9 +130,15 @@ int check_collection (packet, lease, col
|
||||
class -> submatch, MDL));
|
||||
if (status && data.len) {
|
||||
nc = (struct class *)0;
|
||||
- if (class_hash_lookup (&nc, class -> hash,
|
||||
- (const char *)data.data,
|
||||
- data.len, MDL)) {
|
||||
+ classfound = class_hash_lookup (&nc, class -> hash,
|
||||
+ (const char *)data.data, data.len, MDL);
|
||||
+
|
||||
+#ifdef LDAP_CONFIGURATION
|
||||
+ if (!classfound && find_subclass_in_ldap (class, &nc, &data))
|
||||
+ classfound = 1;
|
||||
+#endif
|
||||
+
|
||||
+ if (classfound) {
|
||||
#if defined (DEBUG_CLASS_MATCHING)
|
||||
log_info ("matches subclass %s.",
|
||||
print_hex_1 (data.len,
|
||||
diff -up dhcp-4.0.0/server/stables.c.ldap dhcp-4.0.0/server/stables.c
|
||||
--- dhcp-4.0.0/server/stables.c.ldap 2007-11-20 08:34:37.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/stables.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -238,9 +238,107 @@ static struct option server_options[] =
|
||||
{ "dhcpv6-lease-file-name", "t", &server_universe, 54, 1 },
|
||||
{ "dhcpv6-pid-file-name", "t", &server_universe, 55, 1 },
|
||||
{ "limit-addrs-per-ia", "L", &server_universe, 56, 1 },
|
||||
h.hlen = hlen + 1;
|
||||
h.hbuf [0] = htype;
|
||||
diff -up dhcp-4.1.0/server/stables.c.ldap dhcp-4.1.0/server/stables.c
|
||||
--- dhcp-4.1.0/server/stables.c.ldap 2008-11-03 08:13:58.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/stables.c 2009-01-06 07:56:33.000000000 -1000
|
||||
@@ -244,9 +244,107 @@ static struct option server_options[] =
|
||||
{ "delayed-ack", "S", &server_universe, 58, 1 },
|
||||
{ "max-ack-delay", "L", &server_universe, 59, 1 },
|
||||
#endif
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+ { "ldap-server", "t", &server_universe, 57, 1 },
|
||||
+ { "ldap-port", "d", &server_universe, 58, 1 },
|
||||
+ { "ldap-username", "t", &server_universe, 59, 1 },
|
||||
+ { "ldap-password", "t", &server_universe, 60, 1 },
|
||||
+ { "ldap-base-dn", "t", &server_universe, 61, 1 },
|
||||
+ { "ldap-method", "Nldap-methods.", &server_universe, 62, 1 },
|
||||
+ { "ldap-debug-file", "t", &server_universe, 63, 1 },
|
||||
+ { "ldap-dhcp-server-cn", "t", &server_universe, 64, 1 },
|
||||
+ { "ldap-referrals", "f", &server_universe, 65, 1 },
|
||||
+ { "ldap-server", "t", &server_universe, 60, 1 },
|
||||
+ { "ldap-port", "d", &server_universe, 61, 1 },
|
||||
+ { "ldap-username", "t", &server_universe, 62, 1 },
|
||||
+ { "ldap-password", "t", &server_universe, 63, 1 },
|
||||
+ { "ldap-base-dn", "t", &server_universe, 64, 1 },
|
||||
+ { "ldap-method", "Nldap-methods.", &server_universe, 65, 1 },
|
||||
+ { "ldap-debug-file", "t", &server_universe, 66, 1 },
|
||||
+ { "ldap-dhcp-server-cn", "t", &server_universe, 67, 1 },
|
||||
+ { "ldap-referrals", "f", &server_universe, 68, 1 },
|
||||
+#if defined(USE_SSL)
|
||||
+ { "ldap-ssl", "Nldap-ssl-usage.", &server_universe, 66, 1 },
|
||||
+ { "ldap-tls-reqcert", "Nldap-tls-reqcert.", &server_universe, 67, 1 },
|
||||
+ { "ldap-tls-ca-file", "t", &server_universe, 68, 1 },
|
||||
+ { "ldap-tls-ca-dir", "t", &server_universe, 69, 1 },
|
||||
+ { "ldap-tls-cert", "t", &server_universe, 70, 1 },
|
||||
+ { "ldap-tls-key", "t", &server_universe, 71, 1 },
|
||||
+ { "ldap-tls-crlcheck", "Nldap-tls-crlcheck.", &server_universe, 72, 1 },
|
||||
+ { "ldap-tls-ciphers", "t", &server_universe, 73, 1 },
|
||||
+ { "ldap-tls-randfile", "t", &server_universe, 74, 1 },
|
||||
+ { "ldap-ssl", "Nldap-ssl-usage.", &server_universe, 69, 1 },
|
||||
+ { "ldap-tls-reqcert", "Nldap-tls-reqcert.", &server_universe, 70, 1 },
|
||||
+ { "ldap-tls-ca-file", "t", &server_universe, 71, 1 },
|
||||
+ { "ldap-tls-ca-dir", "t", &server_universe, 72, 1 },
|
||||
+ { "ldap-tls-cert", "t", &server_universe, 73, 1 },
|
||||
+ { "ldap-tls-key", "t", &server_universe, 74, 1 },
|
||||
+ { "ldap-tls-crlcheck", "Nldap-tls-crlcheck.", &server_universe, 75, 1 },
|
||||
+ { "ldap-tls-ciphers", "t", &server_universe, 76, 1 },
|
||||
+ { "ldap-tls-randfile", "t", &server_universe, 77, 1 },
|
||||
+#else
|
||||
+ { "unknown-66", "X", &server_universe, 66, 1 },
|
||||
+ { "unknown-67", "X", &server_universe, 67, 1 },
|
||||
+ { "unknown-68", "X", &server_universe, 68, 1 },
|
||||
+ { "unknown-69", "X", &server_universe, 69, 1 },
|
||||
+ { "unknown-70", "X", &server_universe, 70, 1 },
|
||||
+ { "unknown-71", "X", &server_universe, 71, 1 },
|
||||
+ { "unknown-72", "X", &server_universe, 72, 1 },
|
||||
+ { "unknown-73", "X", &server_universe, 73, 1 },
|
||||
+ { "unknown-74", "X", &server_universe, 74, 1 },
|
||||
+ { "unknown-75", "X", &server_universe, 75, 1 },
|
||||
+ { "unknown-76", "X", &server_universe, 76, 1 },
|
||||
+ { "unknown-77", "X", &server_universe, 77, 1 },
|
||||
+#endif
|
||||
+#else
|
||||
+ { "unknown-57", "X", &server_universe, 57, 1 },
|
||||
+ { "unknown-58", "X", &server_universe, 58, 1 },
|
||||
+ { "unknown-59", "X", &server_universe, 59, 1 },
|
||||
+ { "unknown-60", "X", &server_universe, 60, 1 },
|
||||
+ { "unknown-61", "X", &server_universe, 61, 1 },
|
||||
+ { "unknown-62", "X", &server_universe, 62, 1 },
|
||||
+ { "unknown-63", "X", &server_universe, 63, 1 },
|
||||
+ { "unknown-64", "X", &server_universe, 64, 1 },
|
||||
+ { "unknown-65", "X", &server_universe, 65, 1 },
|
||||
+ { "unknown-66", "X", &server_universe, 66, 1 },
|
||||
+ { "unknown-67", "X", &server_universe, 67, 1 },
|
||||
+ { "unknown-68", "X", &server_universe, 68, 1 },
|
||||
+#endif
|
||||
{ NULL, NULL, NULL, 0, 0 }
|
||||
};
|
||||
@ -2364,321 +2665,3 @@ diff -up dhcp-4.0.0/server/stables.c.ldap dhcp-4.0.0/server/stables.c
|
||||
struct enumeration_value ddns_styles_values [] = {
|
||||
{ "none", 0 },
|
||||
{ "ad-hoc", 1 },
|
||||
diff -up dhcp-4.0.0/dst/Makefile.am.ldap dhcp-4.0.0/dst/Makefile.am
|
||||
--- dhcp-4.0.0/dst/Makefile.am.ldap 2007-05-29 06:32:10.000000000 -1000
|
||||
+++ dhcp-4.0.0/dst/Makefile.am 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -2,7 +2,12 @@ AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
|
||||
|
||||
lib_LIBRARIES = libdst.a
|
||||
|
||||
+noinst_LIBRARIES = libdstnomd5.a
|
||||
+
|
||||
libdst_a_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
|
||||
base64.c prandom.c
|
||||
|
||||
+libdstnomd5_a_SOURCES = dst_support.c dst_api.c hmac_link.c \
|
||||
+ base64.c prandom.c
|
||||
+
|
||||
EXTRA_DIST = dst_internal.h md5.h md5_locl.h
|
||||
diff -up dhcp-4.0.0/common/print.c.ldap dhcp-4.0.0/common/print.c
|
||||
--- dhcp-4.0.0/common/print.c.ldap 2007-10-01 04:47:35.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/print.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -163,9 +163,9 @@ char *print_base64 (const unsigned char
|
||||
}
|
||||
|
||||
char *print_hw_addr (htype, hlen, data)
|
||||
- int htype;
|
||||
- int hlen;
|
||||
- unsigned char *data;
|
||||
+ const int htype;
|
||||
+ const int hlen;
|
||||
+ const unsigned char *data;
|
||||
{
|
||||
static char habuf [49];
|
||||
char *s;
|
||||
diff -up dhcp-4.0.0/common/conflex.c.ldap dhcp-4.0.0/common/conflex.c
|
||||
--- dhcp-4.0.0/common/conflex.c.ldap 2007-10-31 09:13:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/conflex.c 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -43,6 +43,7 @@ static enum dhcp_token read_string PROTO
|
||||
static enum dhcp_token read_number PROTO ((int, struct parse *));
|
||||
static enum dhcp_token read_num_or_name PROTO ((int, struct parse *));
|
||||
static enum dhcp_token intern PROTO ((char *, enum dhcp_token));
|
||||
+static int read_function PROTO ((struct parse *));
|
||||
|
||||
isc_result_t new_parse (cfile, file, inbuf, buflen, name, eolp)
|
||||
struct parse **cfile;
|
||||
@@ -76,6 +77,10 @@ isc_result_t new_parse (cfile, file, inb
|
||||
tmp->file = file;
|
||||
tmp->eol_token = eolp;
|
||||
|
||||
+ if (file != -1) {
|
||||
+ tmp -> read_function = read_function;
|
||||
+ }
|
||||
+
|
||||
if (inbuf != NULL) {
|
||||
tmp->inbuf = inbuf;
|
||||
tmp->buflen = buflen;
|
||||
@@ -170,9 +175,13 @@ static int get_char (cfile)
|
||||
/* My kingdom for WITH... */
|
||||
int c;
|
||||
|
||||
- if (cfile->bufix == cfile->buflen)
|
||||
- c = EOF;
|
||||
- else {
|
||||
+ if (cfile->bufix == cfile->buflen) {
|
||||
+ if (cfile -> read_function) {
|
||||
+ c = cfile -> read_function (cfile);
|
||||
+ } else {
|
||||
+ c = EOF;
|
||||
+ }
|
||||
+ } else {
|
||||
c = cfile->inbuf [cfile->bufix];
|
||||
cfile->bufix++;
|
||||
}
|
||||
@@ -1415,3 +1424,25 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
}
|
||||
return dfv;
|
||||
}
|
||||
+
|
||||
+static int
|
||||
+read_function (struct parse * cfile)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+ ssize_t n = read (cfile -> file, cfile -> inbuf, cfile -> bufsiz);
|
||||
+ if (n == 0) {
|
||||
+ c = EOF;
|
||||
+ cfile -> bufix = 0;
|
||||
+ cfile -> buflen = 0;
|
||||
+ } else if (n < 0) {
|
||||
+ c = EOF;
|
||||
+ cfile -> bufix = cfile -> buflen = 0;
|
||||
+ } else {
|
||||
+ c = cfile -> inbuf [0];
|
||||
+ cfile -> bufix = 1;
|
||||
+ cfile -> buflen = n;
|
||||
+ }
|
||||
+
|
||||
+ return c;
|
||||
+}
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.ldap dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.ldap 2007-12-08 09:36:00.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -101,6 +101,11 @@ typedef time_t TIME;
|
||||
#include <isc-dhcp/result.h>
|
||||
#include <omapip/omapip_p.h>
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+# include <ldap.h>
|
||||
+# include <sys/utsname.h> /* for uname() */
|
||||
+#endif
|
||||
+
|
||||
#if !defined (BYTE_NAME_HASH_SIZE)
|
||||
# define BYTE_NAME_HASH_SIZE 401 /* Default would be ridiculous. */
|
||||
#endif
|
||||
@@ -290,6 +295,8 @@ struct parse {
|
||||
size_t bufsiz;
|
||||
|
||||
struct parse *saved_state;
|
||||
+
|
||||
+ int (*read_function) (struct parse *);
|
||||
};
|
||||
|
||||
/* Variable-length array of data. */
|
||||
@@ -421,6 +428,32 @@ struct hardware {
|
||||
u_int8_t hbuf [17];
|
||||
};
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+# define LDAP_BUFFER_SIZE 8192
|
||||
+# define LDAP_METHOD_STATIC 0
|
||||
+# define LDAP_METHOD_DYNAMIC 1
|
||||
+#if defined (USE_SSL)
|
||||
+# define LDAP_SSL_OFF 0
|
||||
+# define LDAP_SSL_ON 1
|
||||
+# define LDAP_SSL_TLS 2
|
||||
+# define LDAP_SSL_LDAPS 3
|
||||
+#endif
|
||||
+
|
||||
+/* This is a tree of the current configuration we are building from LDAP */
|
||||
+struct ldap_config_stack {
|
||||
+ LDAPMessage * res; /* Pointer returned from ldap_search */
|
||||
+ LDAPMessage * ldent; /* Current item in LDAP that we're processing.
|
||||
+ in res */
|
||||
+ int close_brace; /* Put a closing } after we're through with
|
||||
+ this item */
|
||||
+ int processed; /* We set this flag if this base item has been
|
||||
+ processed. After this base item is processed,
|
||||
+ we can start processing the children */
|
||||
+ struct ldap_config_stack *children;
|
||||
+ struct ldap_config_stack *next;
|
||||
+};
|
||||
+#endif
|
||||
+
|
||||
typedef enum {
|
||||
server_startup = 0,
|
||||
server_running = 1,
|
||||
@@ -626,6 +659,29 @@ struct lease_state {
|
||||
# define DEFAULT_PING_TIMEOUT 1
|
||||
#endif
|
||||
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+# define SV_LDAP_SERVER 57
|
||||
+# define SV_LDAP_PORT 58
|
||||
+# define SV_LDAP_USERNAME 59
|
||||
+# define SV_LDAP_PASSWORD 60
|
||||
+# define SV_LDAP_BASE_DN 61
|
||||
+# define SV_LDAP_METHOD 62
|
||||
+# define SV_LDAP_DEBUG_FILE 63
|
||||
+# define SV_LDAP_DHCP_SERVER_CN 64
|
||||
+# define SV_LDAP_REFERRALS 65
|
||||
+#if defined (USE_SSL)
|
||||
+# define SV_LDAP_SSL 66
|
||||
+# define SV_LDAP_TLS_REQCERT 67
|
||||
+# define SV_LDAP_TLS_CA_FILE 68
|
||||
+# define SV_LDAP_TLS_CA_DIR 69
|
||||
+# define SV_LDAP_TLS_CERT 70
|
||||
+# define SV_LDAP_TLS_KEY 71
|
||||
+# define SV_LDAP_TLS_CRLCHECK 72
|
||||
+# define SV_LDAP_TLS_CIPHERS 73
|
||||
+# define SV_LDAP_TLS_RANDFILE 74
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
#if !defined (DEFAULT_DEFAULT_LEASE_TIME)
|
||||
# define DEFAULT_DEFAULT_LEASE_TIME 43200
|
||||
#endif
|
||||
@@ -2035,7 +2091,7 @@ extern int db_time_format;
|
||||
char *quotify_string (const char *, const char *, int);
|
||||
char *quotify_buf (const unsigned char *, unsigned, const char *, int);
|
||||
char *print_base64 (const unsigned char *, unsigned, const char *, int);
|
||||
-char *print_hw_addr PROTO ((int, int, unsigned char *));
|
||||
+char *print_hw_addr PROTO ((const int, const int, const unsigned char *));
|
||||
void print_lease PROTO ((struct lease *));
|
||||
void dump_raw PROTO ((const unsigned char *, unsigned));
|
||||
void dump_packet_option (struct option_cache *, struct packet *,
|
||||
@@ -3158,6 +3214,20 @@ OMAPI_OBJECT_ALLOC_DECL (dhcp_failover_l
|
||||
|
||||
const char *binding_state_print (enum failover_state);
|
||||
|
||||
+/* ldap.c */
|
||||
+#if defined(LDAP_CONFIGURATION)
|
||||
+extern struct enumeration ldap_methods;
|
||||
+#if defined (USE_SSL)
|
||||
+extern struct enumeration ldap_ssl_usage_enum;
|
||||
+extern struct enumeration ldap_tls_reqcert_enum;
|
||||
+extern struct enumeration ldap_tls_crlcheck_enum;
|
||||
+#endif
|
||||
+isc_result_t ldap_read_config (void);
|
||||
+int find_haddr_in_ldap (struct host_decl **, int, unsigned,
|
||||
+ const unsigned char *, const char *, int);
|
||||
+int find_subclass_in_ldap (struct class *, struct class **,
|
||||
+ struct data_string *);
|
||||
+#endif
|
||||
|
||||
/* mdb6.c */
|
||||
HASH_FUNCTIONS_DECL(ia_na, unsigned char *, struct ia_na, ia_na_hash_t);
|
||||
diff -up dhcp-4.0.0/includes/site.h.ldap dhcp-4.0.0/includes/site.h
|
||||
--- dhcp-4.0.0/includes/site.h.ldap 2006-07-31 12:19:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/site.h 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -183,3 +183,13 @@
|
||||
traces. */
|
||||
|
||||
#define TRACING
|
||||
+
|
||||
+/* Define this if you want to read your config from LDAP. Read README.ldap
|
||||
+ about how to set this up */
|
||||
+
|
||||
+#define LDAP_CONFIGURATION
|
||||
+
|
||||
+/* Define this if you want to enable LDAP over a SSL connection. You will need
|
||||
+ to add -lcrypto -lssl to the LIBS= line of server/Makefile */
|
||||
+
|
||||
+#define USE_SSL
|
||||
diff -up /dev/null dhcp-4.0.0/includes/ldap_casa.h
|
||||
--- /dev/null 2008-02-04 11:13:29.142014072 -1000
|
||||
+++ dhcp-4.0.0/includes/ldap_casa.h 2008-02-06 14:34:44.000000000 -1000
|
||||
@@ -0,0 +1,83 @@
|
||||
+/* ldap_casa.h
|
||||
+
|
||||
+ Definition for CASA modules... */
|
||||
+
|
||||
+/* Copyright (c) 2004 Internet Systems Consorium, Inc. ("ISC")
|
||||
+ * Copyright (c) 1995-2003 Internet Software Consortium.
|
||||
+ * Copyright (c) 2006 Novell, Inc.
|
||||
+
|
||||
+ * 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 ISC, ISC DHCP, 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 INTERNET SYSTEMS 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 ISC 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.
|
||||
+
|
||||
+ * This file was written by S Kalyanasundaram <skalyanasundaram@novell.com>
|
||||
+ */
|
||||
+
|
||||
+#if defined(LDAP_CASA_AUTH)
|
||||
+#ifndef __LDAP_CASA_H__
|
||||
+#define __LDAP_CASA_H__
|
||||
+
|
||||
+#include <micasa_mgmd.h>
|
||||
+#include <dlfcn.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+#define MICASA_LIB "libmicasa.so.1"
|
||||
+
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_GetCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ uint32_t *credentialType,
|
||||
+ void *credential,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_SetCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ uint32_t credentialType,
|
||||
+ void *credential,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+
|
||||
+SSCS_TYPEDEF_LIBCALL(int, CASA_RemoveCredential_T)
|
||||
+(
|
||||
+ uint32_t ssFlags,
|
||||
+ SSCS_SECRET_ID_T *appSecretID,
|
||||
+ SSCS_SECRET_ID_T *sharedSecretID,
|
||||
+ SSCS_EXT_T *ext
|
||||
+);
|
||||
+static CASA_GetCredential_T p_miCASAGetCredential = NULL;
|
||||
+static CASA_SetCredential_T p_miCASASetCredential = NULL;
|
||||
+static CASA_RemoveCredential_T p_miCASARemoveCredential = NULL;
|
||||
+static void *casaIDK = NULL;
|
||||
+
|
||||
+int load_casa(void);
|
||||
+static void release_casa(void);
|
||||
+int load_uname_pwd_from_miCASA(char **, char **);
|
||||
+
|
||||
+#endif /* __LDAP_CASA_H__ */
|
||||
+#endif /* LDAP_CASA_AUTH */
|
||||
+
|
@ -1,90 +1,7 @@
|
||||
diff -up dhcp-4.0.0/client/dhclient-script.8.manpages dhcp-4.0.0/client/dhclient-script.8
|
||||
--- dhcp-4.0.0/client/dhclient-script.8.manpages 2006-02-24 13:16:27.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient-script.8 2008-10-23 09:58:40.000000000 -1000
|
||||
@@ -47,16 +47,16 @@ customizations are needed, they should b
|
||||
exit hooks provided (see HOOKS for details). These hooks will allow the
|
||||
user to override the default behaviour of the client in creating a
|
||||
.B /etc/resolv.conf
|
||||
-file.
|
||||
+file, and to handle DHCP options not handled by default.
|
||||
.PP
|
||||
No standard client script exists for some operating systems, even though
|
||||
the actual client may work, so a pioneering user may well need to create
|
||||
a new script or modify an existing one. In general, customizations specific
|
||||
to a particular computer should be done in the
|
||||
-.B ETCDIR/dhclient.conf
|
||||
+.B /usr/local/etc/dhclient.conf
|
||||
file. If you find that you can't make such a customization without
|
||||
customizing
|
||||
-.B ETCDIR/dhclient.conf
|
||||
+.B /usr/local/etc/dhclient.conf
|
||||
or using the enter and exit hooks, please submit a bug report.
|
||||
.SH HOOKS
|
||||
When it starts, the client script first defines a shell function,
|
||||
@@ -68,33 +68,53 @@ the enter hook script.
|
||||
.PP
|
||||
On after defining the make_resolv_conf function, the client script checks
|
||||
for the presence of an executable
|
||||
-.B ETCDIR/dhclient-enter-hooks
|
||||
+.B /usr/local/etc/dhclient-enter-hooks
|
||||
script, and if present, it invokes the script inline, using the Bourne
|
||||
shell '.' command. The entire environment documented under OPERATION
|
||||
is available to this script, which may modify the environment if needed
|
||||
to change the behaviour of the script. If an error occurs during the
|
||||
execution of the script, it can set the exit_status variable to a nonzero
|
||||
value, and
|
||||
-.B CLIENTBINDIR/dhclient-script
|
||||
+.B /sbin/dhclient-script
|
||||
will exit with that error code immediately after the client script exits.
|
||||
.PP
|
||||
After all processing has completed,
|
||||
-.B CLIENTBINDIR/dhclient-script
|
||||
+.B /sbin/dhclient-script
|
||||
checks for the presence of an executable
|
||||
-.B ETCDIR/dhclient-exit-hooks
|
||||
+.B /usr/local/etc/dhclient-exit-hooks
|
||||
script, which if present is invoked using the '.' command. The exit
|
||||
status of dhclient-script will be passed to dhclient-exit-hooks in the
|
||||
exit_status shell variable, and will always be zero if the script
|
||||
succeeded at the task for which it was invoked. The rest of the
|
||||
environment as described previously for dhclient-enter-hooks is also
|
||||
present. The
|
||||
-.B ETCDIR/dhclient-exit-hooks
|
||||
+.B /usr/local/etc/dhclient-exit-hooks
|
||||
script can modify the valid of exit_status to change the exit status
|
||||
of dhclient-script.
|
||||
+.PP
|
||||
+Immediately after dhclient brings an interface UP with a new IP address,
|
||||
+subnet mask, and routes, in the REBOOT/BOUND states, it will check for the
|
||||
+existence of an executable
|
||||
+.B /usr/local/etc/dhclient-up-hooks
|
||||
+script, and source it if found. This script can handle DHCP options in
|
||||
+the environment that are not handled by default. A per-interface.
|
||||
+.B /usr/local/etc/dhclient-${IF}-up-hooks
|
||||
+script will override the generic script and be sourced when interface
|
||||
+$IF has been brought up.
|
||||
+.PP
|
||||
+Immediately before dhclient brings an interface DOWN, removing its IP
|
||||
+address, subnet mask, and routes, in the STOP/RELEASE states, it will
|
||||
+check for the existence of an executable
|
||||
+.B /usr/local/etc/dhclient-down-hooks
|
||||
+script, and source it if found. This script can handle DHCP options in
|
||||
+the environment that are not handled by default. A per-interface
|
||||
+.B /usr/local/etc/dhclient-${IF}-down-hooks
|
||||
+script will override the generic script and be sourced when interface
|
||||
+$IF is about to be brought down.
|
||||
.SH OPERATION
|
||||
When dhclient needs to invoke the client configuration script, it
|
||||
defines a set of variables in the environment, and then invokes
|
||||
-.B CLIENTBINDIR/dhclient-script.
|
||||
+.B /sbin/dhclient-script.
|
||||
In all cases, $reason is set to the name of the reason why the script
|
||||
has been invoked. The following reasons are currently defined:
|
||||
MEDIUM, PREINIT, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAIL, STOP, RELEASE,
|
||||
diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
--- dhcp-4.0.0/client/dhclient.8.manpages 2007-10-04 07:13:25.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.8 2008-10-23 09:58:40.000000000 -1000
|
||||
@@ -91,6 +91,33 @@ relay
|
||||
diff -up dhcp-4.1.0/client/dhclient.8.man dhcp-4.1.0/client/dhclient.8
|
||||
--- dhcp-4.1.0/client/dhclient.8.man 2008-11-20 04:55:14.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.8 2009-01-06 11:51:30.000000000 -1000
|
||||
@@ -111,6 +111,33 @@ relay
|
||||
.B -w
|
||||
]
|
||||
[
|
||||
@ -111,14 +28,14 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+.I request-option-list
|
||||
+]
|
||||
+[
|
||||
+.B -T
|
||||
+.B -timeout
|
||||
+.I timeout
|
||||
+]
|
||||
+[
|
||||
.B -v
|
||||
]
|
||||
[
|
||||
@@ -118,16 +145,6 @@ important details about the network to w
|
||||
@@ -138,32 +165,6 @@ important details about the network to w
|
||||
the location of a default router, the location of a name server, and
|
||||
so on.
|
||||
.PP
|
||||
@ -127,7 +44,23 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
-.PP
|
||||
-If given the -6 command line argument, dhclient will use the DHCPv6
|
||||
-protocol to obtain whatever IPv6 addresses are available along with
|
||||
-configuration parameters. Information-request is not yet supported.
|
||||
-configuration parameters. But with
|
||||
-.B -S
|
||||
-it uses Information-request to get only (i.e., without address)
|
||||
-stateless configuration parameters.
|
||||
-.PP
|
||||
-The default DHCPv6 behavior is modified too with
|
||||
-.B -T
|
||||
-which asks for IPv6 temporary addresses, one set per
|
||||
-.B -T
|
||||
-flag.
|
||||
-.B -P
|
||||
-enables the IPv6 prefix delegation.
|
||||
-As temporary addresses or prefix delegation disables the normal
|
||||
-address query,
|
||||
-.B -N
|
||||
-restores it. Note it is not recommended to mix queries of different types
|
||||
-together, or even to share the lease file between them.
|
||||
-.PP
|
||||
-If given the --version command line argument, dhclient will print its
|
||||
-version number and exit.
|
||||
@ -135,7 +68,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
On startup, dhclient reads the
|
||||
.IR dhclient.conf
|
||||
for configuration instructions. It then gets a list of all the
|
||||
@@ -181,67 +198,183 @@ file. If interfaces are specified in t
|
||||
@@ -217,141 +218,259 @@ file. If interfaces are specified in t
|
||||
only configure interfaces that are either specified in the
|
||||
configuration file or on the command line, and will ignore all other
|
||||
interfaces.
|
||||
@ -147,7 +80,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
-dhclient should use. This is mostly useful for debugging purposes.
|
||||
-If a different port is specified for the client to listen on and
|
||||
-transmit on, the client will also use a different destination port -
|
||||
-one greater than the specified destination port.
|
||||
-one less than the specified port.
|
||||
-.PP
|
||||
-The DHCP client normally transmits any protocol messages it sends
|
||||
-before acquiring an IP address to, 255.255.255.255, the IP limited
|
||||
@ -156,6 +89,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
-be specified with the
|
||||
-.B -s
|
||||
-flag, followed by the IP address or domain name of the destination.
|
||||
-This feature is not supported by DHCPv6.
|
||||
-.PP
|
||||
-For testing purposes, the giaddr field of all packets that the client
|
||||
-sends can be set using the
|
||||
@ -196,17 +130,85 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
-The client normally doesn't release the current lease as it is not
|
||||
-required by the DHCP protocol. Some cable ISPs require their clients
|
||||
-to notify the server if they wish to release an assigned IP address.
|
||||
-The
|
||||
-.B -r
|
||||
-flag explicitly releases the current lease, and once the lease has been
|
||||
-released, the client exits.
|
||||
-.PP
|
||||
+.SH OPTIONS
|
||||
+.TP
|
||||
+.BI \-4
|
||||
+Use the DHCPv4 protocol to obtain an IPv4 address and configuration
|
||||
+parameters.
|
||||
+parameters (default).
|
||||
+
|
||||
+.TP
|
||||
+.BI \-6
|
||||
+Use the DHCPv6 protocol to obtain whatever IPv6 addresses are available
|
||||
+along with configuration parameters. Information-request is not yet
|
||||
+supported.
|
||||
+along with configuration parameters. The functionality of DHCPv6 mode
|
||||
+may be modified with the
|
||||
+.BI \-S
|
||||
+,
|
||||
+.BI \-T
|
||||
+, and
|
||||
+.BI \-N
|
||||
+options.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-S
|
||||
+Perform an information-only request over DHCPv6 to get stateless
|
||||
+configuration parameters. It is not recommended to combine this option
|
||||
+with the
|
||||
+.BI \-N
|
||||
+,
|
||||
+.BI \-P
|
||||
+, or
|
||||
+.BI \-T
|
||||
+options or to share lease files between different modes of operation. Only
|
||||
+valid with the
|
||||
+.BI \-6
|
||||
+option.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-N
|
||||
+Perform a normal (IA_NA) address query over DHCPv6. It is not recommended
|
||||
+to combine this option with the
|
||||
+.BI \-P
|
||||
+,
|
||||
+.BI \-S
|
||||
+, or
|
||||
+.BI \-T
|
||||
+options or to share lease files between different modes of operation. Only
|
||||
+valid with the
|
||||
+.BI \-6
|
||||
+option.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-T
|
||||
+Perform a temporary (IA_TA) address query over DHCPv6 (disables normal address
|
||||
+query). It is not recommended to combine this option with the
|
||||
+.BI \-N
|
||||
+,
|
||||
+.BI \-P
|
||||
+, or
|
||||
+.BI \-S
|
||||
+options or to share lease files between different modes of operation. Only
|
||||
+valid with the
|
||||
+.BI \-6
|
||||
+option.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-P
|
||||
+Enable IPv6 prefix delegation (disables normal address query). It is not
|
||||
+not recommended to combine this option with the
|
||||
+.BI \-N
|
||||
+,
|
||||
+.BI \-S
|
||||
+, or
|
||||
+.BI \-T
|
||||
+options or to share lease files between different modes of operation. Only
|
||||
+valid with the
|
||||
+.BI \-6
|
||||
+option.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-p\ <port\ number>
|
||||
@ -216,7 +218,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+uses the default port 68. This option is mostly useful for debugging
|
||||
+purposes. If a different port is specified for the client to listen and
|
||||
+transmit on, the client will also use a different destination port - one
|
||||
+greater than the specified destination port.
|
||||
+less than the specified port.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-d
|
||||
@ -228,9 +230,10 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+.TP
|
||||
+.BI \-e\ VAR=value
|
||||
+Define additional environment variables for the environment where
|
||||
+dhclient-script executes. You may specify multiple
|
||||
+dhclient-script executes. You may specify multiplate
|
||||
+.B \-e
|
||||
+options on the command line.
|
||||
+options on the command line. For example:
|
||||
+.B \-e IF_METRIC=1
|
||||
+
|
||||
+.TP
|
||||
+.BI \-q
|
||||
@ -238,7 +241,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+
|
||||
+.TP
|
||||
+.BI \-1
|
||||
+Try one to get a lease. On failure, exit with code 2.
|
||||
+Try once to get a lease. One failure, exit with code 2.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-r
|
||||
@ -251,19 +254,19 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+.TP
|
||||
+.BI \-lf\ <lease-file>
|
||||
+Path to the lease database file. If unspecified, the default
|
||||
+.B /private/var/db/dhclient/dhclient.leases
|
||||
+.B DBDIR/dhclient.leases
|
||||
+is used.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-pf\ <pid-file>
|
||||
+Path to the process ID file. If unspecified, the default
|
||||
+.B /private/var/run/dhclient.pid
|
||||
+.B RUNDIR/dhclient.pid
|
||||
+is used.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-cf\ <config-file>
|
||||
+Path to the client configuration file. If unspecified, the default
|
||||
+.B /usr/local/etc/dhclient.conf
|
||||
+.B ETCDIR/dhclient.conf
|
||||
+is used.
|
||||
+
|
||||
+.TP
|
||||
@ -354,9 +357,9 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+ nis-servers, ntp-servers
|
||||
+
|
||||
The
|
||||
-.B -r
|
||||
-flag explicitly releases the current lease, and once the lease has been
|
||||
-released, the client exits.
|
||||
-.B -x
|
||||
-flag tells any currently running client to exit gracefully without
|
||||
-releasing leases first.
|
||||
+.B -R
|
||||
+option does not append options to the default request, it overrides the
|
||||
+default request list. Keep this in mind if you want to request an
|
||||
@ -366,7 +369,7 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+parameter.
|
||||
+
|
||||
+.TP
|
||||
+.BI \-T\ <timeout>
|
||||
+.BI \-timeout\ <timeout>
|
||||
+Specify the time after which
|
||||
+.B dhclient
|
||||
+will decide that no DHCP servers can be contacted when no responses have been
|
||||
@ -377,17 +380,32 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
+Enable verbose log messages.
|
||||
+
|
||||
.PP
|
||||
If the client is killed by a signal (for example at shutdown or reboot)
|
||||
it won't execute the
|
||||
@@ -253,57 +386,7 @@ or
|
||||
-If the client is killed by a signal (for example at shutdown or reboot)
|
||||
-it won't execute the
|
||||
+If the client is killed by a signale (for example at shutdown or reboot), it
|
||||
+will not execute the
|
||||
.B dhclient-script (8)
|
||||
-at exit. However if you shut the client down gracefully with
|
||||
-.B -r
|
||||
+at exit. However, if you shut the client down gracefully with
|
||||
+.BI \-r
|
||||
or
|
||||
-.B -x
|
||||
+.BI \-x
|
||||
it will execute
|
||||
.B dhclient-script (8)
|
||||
at shutdown with the specific reason for calling the script set.
|
||||
-at shutdown with the specific reason for calling the script set.
|
||||
-.PP
|
||||
-The
|
||||
-.B -1
|
||||
-flag will cause dhclient to try once to get a lease. If it fails, dhclient
|
||||
-exits with exit code two.
|
||||
-exits with exit code two. In DHCPv6 the
|
||||
-.B -1
|
||||
-flag sets the max duration of the initial exchange to
|
||||
-.I timeout
|
||||
-(from
|
||||
-.IR dhclient.conf ,
|
||||
-default sixty seconds).
|
||||
-.PP
|
||||
-The DHCP client normally gets its configuration information from
|
||||
-.B ETCDIR/dhclient.conf,
|
||||
@ -434,26 +452,23 @@ diff -up dhcp-4.0.0/client/dhclient.8.manpages dhcp-4.0.0/client/dhclient.8
|
||||
-supplying the
|
||||
-.B -nw
|
||||
-flag.
|
||||
+
|
||||
+at shutdown with the specific reason for calling the script set in the
|
||||
+environment table.
|
||||
.SH CONFIGURATION
|
||||
The syntax of the dhclient.conf(5) file is discussed separately.
|
||||
.SH OMAPI
|
||||
@@ -338,9 +421,9 @@ do a DHCPRELEASE. To pause it, set its
|
||||
@@ -386,7 +505,7 @@ do a DHCPRELEASE. To pause it, set its
|
||||
resume it, set its state attribute to 4.
|
||||
.PP
|
||||
.SH FILES
|
||||
-.B CLIENTBINDIR/dhclient-script,
|
||||
-.B ETCDIR/dhclient.conf, DBDIR/dhclient.leases, RUNDIR/dhclient.pid,
|
||||
-.B DBDIR/dhclient.leases~.
|
||||
+.B /sbin/dhclient-script,
|
||||
+.B /usr/local/etc/dhclient.conf, /private/var/db/dhclient/dhclient.leases, /private/var/run/dhclient.pid,
|
||||
+.B /private/var/db/dhclient/dhclient.leases~.
|
||||
.B ETCDIR/dhclient.conf, DBDIR/dhclient.leases, RUNDIR/dhclient.pid,
|
||||
.B DBDIR/dhclient.leases~.
|
||||
.SH SEE ALSO
|
||||
dhcpd(8), dhcrelay(8), dhclient-script(8), dhclient.conf(5),
|
||||
dhclient.leases(5), dhcp-eval(5).
|
||||
diff -up dhcp-4.0.0/client/dhclient.conf.5.manpages dhcp-4.0.0/client/dhclient.conf.5
|
||||
--- dhcp-4.0.0/client/dhclient.conf.5.manpages 2007-08-23 06:06:08.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.conf.5 2008-10-23 10:01:34.000000000 -1000
|
||||
diff -up dhcp-4.1.0/client/dhclient.conf.5.man dhcp-4.1.0/client/dhclient.conf.5
|
||||
--- dhcp-4.1.0/client/dhclient.conf.5.man 2008-03-07 08:58:29.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.conf.5 2009-01-06 10:50:40.000000000 -1000
|
||||
@@ -186,9 +186,9 @@ responding to the client send the client
|
||||
options. Only the option names should be specified in the request
|
||||
statement - not option parameters. By default, the DHCP server
|
||||
@ -467,7 +482,7 @@ diff -up dhcp-4.0.0/client/dhclient.conf.5.manpages dhcp-4.0.0/client/dhclient.c
|
||||
.PP
|
||||
In some cases, it may be desirable to send no parameter request list
|
||||
at all. To do this, simply write the request statement but specify
|
||||
@@ -626,6 +626,18 @@ database and will record the media type
|
||||
@@ -627,6 +627,18 @@ database and will record the media type
|
||||
Whenever the client tries to renew the lease, it will use that same
|
||||
media type. The lease must expire before the client will go back to
|
||||
cycling through media types.
|
||||
@ -486,7 +501,7 @@ diff -up dhcp-4.0.0/client/dhclient.conf.5.manpages dhcp-4.0.0/client/dhclient.c
|
||||
.SH SAMPLE
|
||||
The following configuration file is used on a laptop running NetBSD
|
||||
1.3. The laptop has an IP alias of 192.5.5.213, and has one
|
||||
@@ -647,12 +659,12 @@ interface "ep0" {
|
||||
@@ -648,12 +660,12 @@ interface "ep0" {
|
||||
send host-name "andare.fugue.com";
|
||||
send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
|
||||
send dhcp-lease-time 3600;
|
||||
@ -502,10 +517,93 @@ diff -up dhcp-4.0.0/client/dhclient.conf.5.manpages dhcp-4.0.0/client/dhclient.c
|
||||
media "media 10baseT/UTP", "media 10base2/BNC";
|
||||
}
|
||||
|
||||
diff -up dhcp-4.0.0/common/dhcp-options.5.manpages dhcp-4.0.0/common/dhcp-options.5
|
||||
--- dhcp-4.0.0/common/dhcp-options.5.manpages 2007-09-17 07:52:01.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/dhcp-options.5 2008-10-23 09:58:40.000000000 -1000
|
||||
@@ -896,6 +896,21 @@ classless IP routing - it does not inclu
|
||||
diff -up dhcp-4.1.0/client/dhclient-script.8.man dhcp-4.1.0/client/dhclient-script.8
|
||||
--- dhcp-4.1.0/client/dhclient-script.8.man 2006-02-24 13:16:27.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient-script.8 2009-01-06 10:50:40.000000000 -1000
|
||||
@@ -47,16 +47,16 @@ customizations are needed, they should b
|
||||
exit hooks provided (see HOOKS for details). These hooks will allow the
|
||||
user to override the default behaviour of the client in creating a
|
||||
.B /etc/resolv.conf
|
||||
-file.
|
||||
+file, and to handle DHCP options not handled by default.
|
||||
.PP
|
||||
No standard client script exists for some operating systems, even though
|
||||
the actual client may work, so a pioneering user may well need to create
|
||||
a new script or modify an existing one. In general, customizations specific
|
||||
to a particular computer should be done in the
|
||||
-.B ETCDIR/dhclient.conf
|
||||
+.B /usr/local/etc/dhclient.conf
|
||||
file. If you find that you can't make such a customization without
|
||||
customizing
|
||||
-.B ETCDIR/dhclient.conf
|
||||
+.B /usr/local/etc/dhclient.conf
|
||||
or using the enter and exit hooks, please submit a bug report.
|
||||
.SH HOOKS
|
||||
When it starts, the client script first defines a shell function,
|
||||
@@ -68,33 +68,53 @@ the enter hook script.
|
||||
.PP
|
||||
On after defining the make_resolv_conf function, the client script checks
|
||||
for the presence of an executable
|
||||
-.B ETCDIR/dhclient-enter-hooks
|
||||
+.B /usr/local/etc/dhclient-enter-hooks
|
||||
script, and if present, it invokes the script inline, using the Bourne
|
||||
shell '.' command. The entire environment documented under OPERATION
|
||||
is available to this script, which may modify the environment if needed
|
||||
to change the behaviour of the script. If an error occurs during the
|
||||
execution of the script, it can set the exit_status variable to a nonzero
|
||||
value, and
|
||||
-.B CLIENTBINDIR/dhclient-script
|
||||
+.B /sbin/dhclient-script
|
||||
will exit with that error code immediately after the client script exits.
|
||||
.PP
|
||||
After all processing has completed,
|
||||
-.B CLIENTBINDIR/dhclient-script
|
||||
+.B /sbin/dhclient-script
|
||||
checks for the presence of an executable
|
||||
-.B ETCDIR/dhclient-exit-hooks
|
||||
+.B /usr/local/etc/dhclient-exit-hooks
|
||||
script, which if present is invoked using the '.' command. The exit
|
||||
status of dhclient-script will be passed to dhclient-exit-hooks in the
|
||||
exit_status shell variable, and will always be zero if the script
|
||||
succeeded at the task for which it was invoked. The rest of the
|
||||
environment as described previously for dhclient-enter-hooks is also
|
||||
present. The
|
||||
-.B ETCDIR/dhclient-exit-hooks
|
||||
+.B /usr/local/etc/dhclient-exit-hooks
|
||||
script can modify the valid of exit_status to change the exit status
|
||||
of dhclient-script.
|
||||
+.PP
|
||||
+Immediately after dhclient brings an interface UP with a new IP address,
|
||||
+subnet mask, and routes, in the REBOOT/BOUND states, it will check for the
|
||||
+existence of an executable
|
||||
+.B /usr/local/etc/dhclient-up-hooks
|
||||
+script, and source it if found. This script can handle DHCP options in
|
||||
+the environment that are not handled by default. A per-interface.
|
||||
+.B /usr/local/etc/dhclient-${IF}-up-hooks
|
||||
+script will override the generic script and be sourced when interface
|
||||
+$IF has been brought up.
|
||||
+.PP
|
||||
+Immediately before dhclient brings an interface DOWN, removing its IP
|
||||
+address, subnet mask, and routes, in the STOP/RELEASE states, it will
|
||||
+check for the existence of an executable
|
||||
+.B /usr/local/etc/dhclient-down-hooks
|
||||
+script, and source it if found. This script can handle DHCP options in
|
||||
+the environment that are not handled by default. A per-interface
|
||||
+.B /usr/local/etc/dhclient-${IF}-down-hooks
|
||||
+script will override the generic script and be sourced when interface
|
||||
+$IF is about to be brought down.
|
||||
.SH OPERATION
|
||||
When dhclient needs to invoke the client configuration script, it
|
||||
defines a set of variables in the environment, and then invokes
|
||||
-.B CLIENTBINDIR/dhclient-script.
|
||||
+.B /sbin/dhclient-script.
|
||||
In all cases, $reason is set to the name of the reason why the script
|
||||
has been invoked. The following reasons are currently defined:
|
||||
MEDIUM, PREINIT, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAIL, STOP, RELEASE,
|
||||
diff -up dhcp-4.1.0/common/dhcp-options.5.man dhcp-4.1.0/common/dhcp-options.5
|
||||
--- dhcp-4.1.0/common/dhcp-options.5.man 2008-11-21 03:59:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/dhcp-options.5 2009-01-06 10:50:40.000000000 -1000
|
||||
@@ -905,6 +905,21 @@ classless IP routing - it does not inclu
|
||||
classless IP routing is now the most widely deployed routing standard,
|
||||
this option is virtually useless, and is not implemented by any of the
|
||||
popular DHCP clients, for example the Microsoft DHCP client.
|
||||
@ -527,10 +625,10 @@ diff -up dhcp-4.0.0/common/dhcp-options.5.manpages dhcp-4.0.0/common/dhcp-option
|
||||
.RE
|
||||
.PP
|
||||
.nf
|
||||
diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
--- dhcp-4.0.0/server/dhcpd.conf.5.manpages 2007-11-20 08:34:37.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/dhcpd.conf.5 2008-10-23 09:58:40.000000000 -1000
|
||||
@@ -513,6 +513,9 @@ pool {
|
||||
diff -up dhcp-4.1.0/server/dhcpd.conf.5.man dhcp-4.1.0/server/dhcpd.conf.5
|
||||
--- dhcp-4.1.0/server/dhcpd.conf.5.man 2008-11-03 08:13:58.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/dhcpd.conf.5 2009-01-06 10:50:40.000000000 -1000
|
||||
@@ -519,6 +519,9 @@ pool {
|
||||
};
|
||||
.fi
|
||||
.PP
|
||||
@ -540,7 +638,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
The server currently does very little sanity checking, so if you
|
||||
configure it wrong, it will just fail in odd ways. I would recommend
|
||||
therefore that you either do failover or don't do failover, but don't
|
||||
@@ -527,9 +530,9 @@ primary server might look like this:
|
||||
@@ -533,9 +536,9 @@ primary server might look like this:
|
||||
failover peer "foo" {
|
||||
primary;
|
||||
address anthrax.rc.vix.com;
|
||||
@ -552,7 +650,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
max-response-delay 60;
|
||||
max-unacked-updates 10;
|
||||
mclt 3600;
|
||||
@@ -588,9 +591,7 @@ statement
|
||||
@@ -594,9 +597,7 @@ statement
|
||||
.B port \fIport-number\fR\fB;\fR
|
||||
.PP
|
||||
The \fBport\fR statement declares the TCP port on which the server
|
||||
@ -563,7 +661,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
.RE
|
||||
.PP
|
||||
The
|
||||
@@ -602,10 +603,8 @@ statement
|
||||
@@ -608,10 +609,8 @@ statement
|
||||
.PP
|
||||
The \fBpeer port\fR statement declares the TCP port to which the
|
||||
server should connect to reach its failover peer for failover
|
||||
@ -576,7 +674,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
.RE
|
||||
.PP
|
||||
The
|
||||
@@ -1272,7 +1271,7 @@ the zone containing PTR records - for IS
|
||||
@@ -1278,7 +1277,7 @@ the zone containing PTR records - for IS
|
||||
.PP
|
||||
.nf
|
||||
key DHCP_UPDATER {
|
||||
@ -585,7 +683,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
secret pRP5FapFoJ95JEL06sv4PQ==;
|
||||
};
|
||||
|
||||
@@ -1295,7 +1294,7 @@ dhcpd.conf file:
|
||||
@@ -1301,7 +1300,7 @@ dhcpd.conf file:
|
||||
.PP
|
||||
.nf
|
||||
key DHCP_UPDATER {
|
||||
@ -594,7 +692,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
secret pRP5FapFoJ95JEL06sv4PQ==;
|
||||
};
|
||||
|
||||
@@ -2240,7 +2239,7 @@ statement
|
||||
@@ -2302,7 +2301,7 @@ statement
|
||||
.PP
|
||||
.I Name
|
||||
should be the name of the DHCP server's lease file. By default, this
|
||||
@ -603,7 +701,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
scope of the configuration file - if it appears in some other scope,
|
||||
it will have no effect. Furthermore, it has no effect if overridden
|
||||
by the
|
||||
@@ -2275,7 +2274,7 @@ statement
|
||||
@@ -2337,7 +2336,7 @@ statement
|
||||
.PP
|
||||
.I Name
|
||||
is the name of the lease file to use if and only if the server is running
|
||||
@ -612,7 +710,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
like
|
||||
.I lease-file-name,
|
||||
\fBmust\fR appear in the outer scope of the configuration file. It
|
||||
@@ -2433,7 +2432,8 @@ statement
|
||||
@@ -2495,7 +2494,8 @@ statement
|
||||
The \fInext-server\fR statement is used to specify the host address of
|
||||
the server from which the initial boot file (specified in the
|
||||
\fIfilename\fR statement) is to be loaded. \fIServer-name\fR should
|
||||
@ -622,7 +720,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
.RE
|
||||
.PP
|
||||
The
|
||||
@@ -2478,7 +2478,7 @@ statement
|
||||
@@ -2540,7 +2540,7 @@ statement
|
||||
.I Name
|
||||
should be the name of the DHCP server's process ID file. This is the
|
||||
file in which the DHCP server's process ID is stored when the server
|
||||
@ -631,7 +729,7 @@ diff -up dhcp-4.0.0/server/dhcpd.conf.5.manpages dhcp-4.0.0/server/dhcpd.conf.5
|
||||
.I lease-file-name
|
||||
statement, this statement must appear in the outer scope
|
||||
of the configuration file. It has no effect if overridden by the
|
||||
@@ -2496,7 +2496,7 @@ statement
|
||||
@@ -2558,7 +2558,7 @@ statement
|
||||
.PP
|
||||
.I Name
|
||||
is the name of the pid file to use if and only if the server is running
|
37
dhcp-4.1.0-memory.patch
Normal file
37
dhcp-4.1.0-memory.patch
Normal file
@ -0,0 +1,37 @@
|
||||
diff -up dhcp-4.1.0/common/lpf.c.memory dhcp-4.1.0/common/lpf.c
|
||||
--- dhcp-4.1.0/common/lpf.c.memory 2008-03-18 08:28:14.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/lpf.c 2009-01-06 07:57:54.000000000 -1000
|
||||
@@ -247,6 +247,7 @@ static void lpf_tr_filter_setup (info)
|
||||
struct interface_info *info;
|
||||
{
|
||||
struct sock_fprog p;
|
||||
+ memset(&p,'\0', sizeof(struct sock_fprog));
|
||||
|
||||
/* Set up the bpf filter program structure. This is defined in
|
||||
bpf.c */
|
||||
diff -up dhcp-4.1.0/common/packet.c.memory dhcp-4.1.0/common/packet.c
|
||||
--- dhcp-4.1.0/common/packet.c.memory 2007-11-30 11:51:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/packet.c 2009-01-06 07:57:54.000000000 -1000
|
||||
@@ -135,6 +135,7 @@ void assemble_udp_ip_header (interface,
|
||||
struct ip ip;
|
||||
struct udphdr udp;
|
||||
|
||||
+ memset( &ip, '\0', sizeof ip);
|
||||
/* Fill out the IP header */
|
||||
IP_V_SET (&ip, 4);
|
||||
IP_HL_SET (&ip, 20);
|
||||
diff -up dhcp-4.1.0/minires/ns_name.c.memory dhcp-4.1.0/minires/ns_name.c
|
||||
--- dhcp-4.1.0/minires/ns_name.c.memory 2005-03-17 10:15:17.000000000 -1000
|
||||
+++ dhcp-4.1.0/minires/ns_name.c 2009-01-06 07:57:54.000000000 -1000
|
||||
@@ -71,6 +71,11 @@ ns_name_ntop(const u_char *src, char *ds
|
||||
dn = dst;
|
||||
eom = dst + dstsiz;
|
||||
|
||||
+ if (dn >= eom) {
|
||||
+ errno = EMSGSIZE;
|
||||
+ return (-1);
|
||||
+ }
|
||||
+
|
||||
while ((n = *cp++) != 0) {
|
||||
if ((n & NS_CMPRSFLGS) != 0) {
|
||||
/* Some kind of compression pointer. */
|
@ -1,45 +1,41 @@
|
||||
diff -up dhcp-4.0.0/common/conflex.c.options dhcp-4.0.0/common/conflex.c
|
||||
--- dhcp-4.0.0/common/conflex.c.options 2007-12-29 11:13:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/conflex.c 2007-12-29 11:13:51.000000000 -1000
|
||||
@@ -769,6 +769,8 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
return BALANCE;
|
||||
if (!strcasecmp (atom + 1, "ound"))
|
||||
return BOUND;
|
||||
+ if (!strcasecmp (atom + 1, "ootp-broadcast-always"))
|
||||
+ return BOOTP_BROADCAST_ALWAYS;
|
||||
break;
|
||||
case 'c':
|
||||
if (!strcasecmp (atom + 1, "ase"))
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.options dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.options 2007-12-29 11:13:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2007-12-29 11:13:51.000000000 -1000
|
||||
@@ -1055,6 +1055,9 @@ struct client_config {
|
||||
int do_forward_update; /* If nonzero, and if we have the
|
||||
information we need, update the
|
||||
A record for the address we get. */
|
||||
diff -up dhcp-4.1.0/client/clparse.c.options dhcp-4.1.0/client/clparse.c
|
||||
--- dhcp-4.1.0/client/clparse.c.options 2008-05-23 03:22:23.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/clparse.c 2009-01-06 07:59:14.000000000 -1000
|
||||
@@ -136,6 +136,7 @@ isc_result_t read_client_conf ()
|
||||
/* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache)
|
||||
*/
|
||||
top_level_config.requested_lease = 7200;
|
||||
+ top_level_config.bootp_broadcast_always = 0;
|
||||
|
||||
group_allocate (&top_level_config.on_receipt, MDL);
|
||||
if (!top_level_config.on_receipt)
|
||||
@@ -303,7 +304,8 @@ void read_client_leases ()
|
||||
interface-declaration |
|
||||
LEASE client-lease-statement |
|
||||
ALIAS client-lease-statement |
|
||||
- KEY key-definition */
|
||||
+ KEY key-definition |
|
||||
+ BOOTP_BROADCAST_ALWAYS */
|
||||
|
||||
void parse_client_statement (cfile, ip, config)
|
||||
struct parse *cfile;
|
||||
@@ -693,6 +695,12 @@ void parse_client_statement (cfile, ip,
|
||||
parse_reject_statement (cfile, config);
|
||||
return;
|
||||
|
||||
+ case BOOTP_BROADCAST_ALWAYS:
|
||||
+ token = next_token(&val, (unsigned*)0, cfile);
|
||||
+ config -> bootp_broadcast_always = 1;
|
||||
+ parse_semi (cfile);
|
||||
+ return;
|
||||
+
|
||||
+ int bootp_broadcast_always; /* If nonzero, always set the BOOTP_BROADCAST
|
||||
+ flag in requests */
|
||||
};
|
||||
|
||||
/* Per-interface state used in the dhcp client... */
|
||||
diff -up dhcp-4.0.0/includes/dhctoken.h.options dhcp-4.0.0/includes/dhctoken.h
|
||||
--- dhcp-4.0.0/includes/dhctoken.h.options 2007-10-31 09:13:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhctoken.h 2007-12-29 11:13:51.000000000 -1000
|
||||
@@ -345,7 +345,8 @@ enum dhcp_token {
|
||||
RANGE6 = 648,
|
||||
WHITESPACE = 649,
|
||||
TOKEN_ALSO = 650,
|
||||
- AFTER = 651
|
||||
+ AFTER = 651,
|
||||
+ BOOTP_BROADCAST_ALWAYS = 652
|
||||
};
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
||||
diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
--- dhcp-4.0.0/client/dhclient.c.options 2007-11-30 11:51:42.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.c 2007-12-29 11:14:15.000000000 -1000
|
||||
@@ -37,6 +37,12 @@
|
||||
default:
|
||||
lose = 0;
|
||||
stmt = (struct executable_statement *)0;
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.options dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.options 2008-06-11 10:17:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 08:27:57.000000000 -1000
|
||||
@@ -38,6 +38,12 @@
|
||||
#include <sys/wait.h>
|
||||
#include <limits.h>
|
||||
|
||||
@ -52,19 +48,19 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
TIME default_lease_time = 43200; /* 12 hours... */
|
||||
TIME max_lease_time = 86400; /* 24 hours... */
|
||||
|
||||
@@ -75,6 +81,9 @@ int onetry=0;
|
||||
int quiet=1;
|
||||
int nowait=0;
|
||||
@@ -80,6 +86,9 @@ int wanted_ia_na = -1; /* the absolute
|
||||
int wanted_ia_ta = 0;
|
||||
int wanted_ia_pd = 0;
|
||||
char *mockup_relay = NULL;
|
||||
+int bootp_broadcast_always = 0;
|
||||
+
|
||||
+extern u_int32_t default_requested_options[];
|
||||
|
||||
static void usage PROTO ((void));
|
||||
void run_stateless(int exit_mode);
|
||||
|
||||
@@ -100,6 +109,15 @@ main(int argc, char **argv) {
|
||||
int no_dhclient_script = 0;
|
||||
@@ -110,6 +119,15 @@ main(int argc, char **argv) {
|
||||
int local_family_set = 0;
|
||||
#endif /* DHCPv6 */
|
||||
char *s;
|
||||
+ char *dhcp_client_identifier_arg = NULL;
|
||||
+ char *dhcp_host_name_arg = NULL;
|
||||
@ -78,32 +74,32 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
|
||||
/* Initialize client globals. */
|
||||
memset(&default_duid, 0, sizeof(default_duid));
|
||||
@@ -224,6 +242,88 @@ main(int argc, char **argv) {
|
||||
} else if (!strcmp (argv [i], "--version")) {
|
||||
log_info ("isc-dhclient-%s", PACKAGE_VERSION);
|
||||
exit (0);
|
||||
+ } else if (!strcmp (argv [i], "-I")) {
|
||||
@@ -274,6 +292,88 @@ main(int argc, char **argv) {
|
||||
} else if (!strcmp(argv[i], "--version")) {
|
||||
log_info("isc-dhclient-%s", PACKAGE_VERSION);
|
||||
exit(0);
|
||||
+ } else if (!strcmp(argv[i], "-I")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
|
||||
+ log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ dhcp_client_identifier_arg = argv[i];
|
||||
+ } else if (!strcmp (argv [i], "-B")) {
|
||||
+ } else if (!strcmp(argv[i], "-B")) {
|
||||
+ bootp_broadcast_always = 1;
|
||||
+ } else if (!strcmp (argv [i], "-H")) {
|
||||
+ } else if (!strcmp(argv[i], "-H")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
|
||||
+ log_error("-H option host-name string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ log_error("-H option host-name string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
@ -113,14 +109,14 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ }
|
||||
+
|
||||
+ dhcp_host_name_arg = argv[i];
|
||||
+ } else if (!strcmp (argv [i], "-F")) {
|
||||
+ } else if (!strcmp(argv[i], "-F")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
|
||||
+ log_error("-F option fqdn.fqdn string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ log_error("-F option fqdn.fqdn string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
@ -135,41 +131,41 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ }
|
||||
+
|
||||
+ dhcp_fqdn_arg = argv[i];
|
||||
+ } else if (!strcmp (argv [i], "-T")) {
|
||||
+ } else if (!strcmp(argv[i], "-timeout")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if ((timeout_arg = atoi(argv[i])) <= 0) {
|
||||
+ log_error("-T timeout option must be > 0 - bad value: %s",argv[i]);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ } else if (!strcmp (argv [i], "-V")) {
|
||||
+ } else if (!strcmp(argv[i], "-V")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
|
||||
+ log_error("-V option vendor-class-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ log_error("-V option vendor-class-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ dhcp_vendor_class_identifier_arg = argv[i];
|
||||
+ } else if (!strcmp (argv [i], "-R")) {
|
||||
+ } else if (!strcmp(argv[i], "-R")) {
|
||||
+ if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
|
||||
+ usage ();
|
||||
+ return EXIT_FAILURE;
|
||||
+ usage();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ dhclient_request_options=argv[i];
|
||||
} else if (argv [i][0] == '-') {
|
||||
usage ();
|
||||
} else {
|
||||
@@ -370,6 +470,166 @@ main(int argc, char **argv) {
|
||||
+ dhclient_request_options = argv[i];
|
||||
} else if (argv[i][0] == '-') {
|
||||
usage();
|
||||
} else if (interfaces_requested < 0) {
|
||||
@@ -443,6 +543,166 @@ main(int argc, char **argv) {
|
||||
/* Parse the dhclient.conf file. */
|
||||
read_client_conf ();
|
||||
read_client_conf();
|
||||
|
||||
+ /* Parse any extra command line configuration arguments: */
|
||||
+ if ((dhcp_client_identifier_arg != NULL) && (*dhcp_client_identifier_arg != '\0')) {
|
||||
@ -188,7 +184,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ } else {
|
||||
+ char *last_arg_conf = arg_conf;
|
||||
+ arg_conf = NULL;
|
||||
+ arg_conf_len = asprintf( &arg_conf, "%s\nsend host-name \"%s\";", last_arg_conf, dhcp_host_name_arg);
|
||||
+ arg_conf_len = asprintf(&arg_conf, "%s\nsend host-name \"%s\";", last_arg_conf, dhcp_host_name_arg);
|
||||
+
|
||||
+ if ((arg_conf == 0) || (arg_conf_len <= 0))
|
||||
+ log_fatal("Unable to send -H option host-name");
|
||||
@ -206,7 +202,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ } else {
|
||||
+ char *last_arg_conf = arg_conf;
|
||||
+ arg_conf = NULL;
|
||||
+ arg_conf_len = asprintf( &arg_conf, "%s\nsend fqdn.fqdn \"%s\";", last_arg_conf, dhcp_fqdn_arg);
|
||||
+ arg_conf_len = asprintf(&arg_conf, "%s\nsend fqdn.fqdn \"%s\";", last_arg_conf, dhcp_fqdn_arg);
|
||||
+
|
||||
+ if ((arg_conf == 0) || (arg_conf_len <= 0))
|
||||
+ log_fatal("Unable to send -F option fqdn.fqdn");
|
||||
@ -220,14 +216,14 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ arg_conf_len = asprintf(&arg_conf, "timeout %d;", timeout_arg);
|
||||
+
|
||||
+ if ((arg_conf == 0) || (arg_conf_len <= 0))
|
||||
+ log_fatal("Unable to process -T timeout argument");
|
||||
+ log_fatal("Unable to process -timeout timeout argument");
|
||||
+ } else {
|
||||
+ char *last_arg_conf = arg_conf;
|
||||
+ arg_conf = NULL;
|
||||
+ arg_conf_len = asprintf( &arg_conf, "%s\ntimeout %d;", last_arg_conf, timeout_arg);
|
||||
+ arg_conf_len = asprintf(&arg_conf, "%s\ntimeout %d;", last_arg_conf, timeout_arg);
|
||||
+
|
||||
+ if ((arg_conf == 0) || (arg_conf_len == 0))
|
||||
+ log_fatal("Unable to process -T timeout argument");
|
||||
+ log_fatal("Unable to process -timeout timeout argument");
|
||||
+
|
||||
+ free(last_arg_conf);
|
||||
+ }
|
||||
@ -273,7 +269,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ if (arg_conf_len == 0)
|
||||
+ if ((arg_conf_len = strlen(arg_conf)) == 0)
|
||||
+ /* huh ? cannot happen ! */
|
||||
+ log_fatal("Unable to process -I/-H/-F/-T/-V/-R configuration arguments");
|
||||
+ log_fatal("Unable to process -I/-H/-F/-timeout/-V/-R configuration arguments");
|
||||
+
|
||||
+ /* parse the extra dhclient.conf configuration arguments
|
||||
+ * into top level config: */
|
||||
@ -281,23 +277,23 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ const char *val = NULL;
|
||||
+ int token;
|
||||
+
|
||||
+ status = new_parse (&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-T/-V/-R configuration arguments", 0);
|
||||
+ status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-timeout/-V/-R configuration arguments", 0);
|
||||
+
|
||||
+ if ((status != ISC_R_SUCCESS) || (cfile -> warnings_occurred))
|
||||
+ log_fatal("Cannot parse -I/-H/-F/-T/-V/-R configuration arguments !");
|
||||
+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
|
||||
+ /* more detailed parse failures will be logged */
|
||||
+
|
||||
+ do {
|
||||
+ token = peek_token (&val, (unsigned *)0, cfile);
|
||||
+ token = peek_token(&val, (unsigned *)0, cfile);
|
||||
+ if (token == END_OF_FILE)
|
||||
+ break;
|
||||
+
|
||||
+ parse_client_statement (cfile, (struct interface_info *)0, &top_level_config);
|
||||
+ parse_client_statement(cfile, (struct interface_info *)0, &top_level_config);
|
||||
+ } while (1);
|
||||
+
|
||||
+ if (cfile -> warnings_occurred)
|
||||
+ log_fatal ("Cannot parse -I/-H/-F/-T/-V/-R configuration arguments !");
|
||||
+ end_parse (&cfile);
|
||||
+ log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
|
||||
+ end_parse(&cfile);
|
||||
+
|
||||
+ if (timeout_arg) {
|
||||
+ /* we just set the toplevel timeout, but per-client
|
||||
@ -308,7 +304,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ if ((top_level_config.backoff_cutoff == 15) && (top_level_config.backoff_cutoff > (timeout_arg / 2)))
|
||||
+ top_level_config.backoff_cutoff = (((unsigned long)(timeout_arg / 2)) == 0) ? timeout_arg : (unsigned long)(timeout_arg / 2);
|
||||
+
|
||||
+ for (ip = interfaces; ip; ip = ip -> next) {
|
||||
+ for (ip=interfaces; ip; ip = ip->next) {
|
||||
+ if (ip->client->config->timeout == 60)
|
||||
+ ip->client->config->timeout = timeout_arg;
|
||||
+
|
||||
@ -320,7 +316,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ }
|
||||
+
|
||||
+ if ((dhclient_request_options != 0) && (top_level_config.requested_options != default_requested_options)) {
|
||||
+ for (ip = interfaces; ip; ip = ip -> next) {
|
||||
+ for (ip=interfaces; ip; ip = ip->next) {
|
||||
+ if (ip->client->config->requested_options == default_requested_options)
|
||||
+ ip->client->config->requested_options = top_level_config.requested_options;
|
||||
+ }
|
||||
@ -332,9 +328,9 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
+ }
|
||||
+
|
||||
/* Parse the lease database. */
|
||||
read_client_leases ();
|
||||
read_client_leases();
|
||||
|
||||
@@ -2105,7 +2365,8 @@ void make_discover (client, lease)
|
||||
@@ -2313,7 +2573,8 @@ void make_discover (client, lease)
|
||||
client -> packet.xid = random ();
|
||||
client -> packet.secs = 0; /* filled in by send_discover. */
|
||||
|
||||
@ -344,7 +340,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
client -> packet.flags = 0;
|
||||
else
|
||||
client -> packet.flags = htons (BOOTP_BROADCAST);
|
||||
@@ -2189,7 +2450,9 @@ void make_request (client, lease)
|
||||
@@ -2397,7 +2658,9 @@ void make_request (client, lease)
|
||||
} else {
|
||||
memset (&client -> packet.ciaddr, 0,
|
||||
sizeof client -> packet.ciaddr);
|
||||
@ -355,7 +351,7 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
client -> packet.flags = 0;
|
||||
else
|
||||
client -> packet.flags = htons (BOOTP_BROADCAST);
|
||||
@@ -2248,7 +2511,8 @@ void make_decline (client, lease)
|
||||
@@ -2459,7 +2722,8 @@ void make_decline (client, lease)
|
||||
client -> packet.hops = 0;
|
||||
client -> packet.xid = client -> xid;
|
||||
client -> packet.secs = 0; /* Filled in by send_request. */
|
||||
@ -365,37 +361,41 @@ diff -up dhcp-4.0.0/client/dhclient.c.options dhcp-4.0.0/client/dhclient.c
|
||||
client -> packet.flags = 0;
|
||||
else
|
||||
client -> packet.flags = htons (BOOTP_BROADCAST);
|
||||
diff -up dhcp-4.0.0/client/clparse.c.options dhcp-4.0.0/client/clparse.c
|
||||
--- dhcp-4.0.0/client/clparse.c.options 2007-12-08 09:36:00.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/clparse.c 2007-12-29 11:13:51.000000000 -1000
|
||||
@@ -132,6 +132,7 @@ isc_result_t read_client_conf ()
|
||||
/* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache)
|
||||
*/
|
||||
top_level_config.requested_lease = 7200;
|
||||
+ top_level_config.bootp_broadcast_always = 0;
|
||||
|
||||
group_allocate (&top_level_config.on_receipt, MDL);
|
||||
if (!top_level_config.on_receipt)
|
||||
@@ -295,7 +296,8 @@ void read_client_leases ()
|
||||
interface-declaration |
|
||||
LEASE client-lease-statement |
|
||||
ALIAS client-lease-statement |
|
||||
- KEY key-definition */
|
||||
+ KEY key-definition |
|
||||
+ BOOTP_BROADCAST_ALWAYS */
|
||||
|
||||
void parse_client_statement (cfile, ip, config)
|
||||
struct parse *cfile;
|
||||
@@ -685,6 +687,12 @@ void parse_client_statement (cfile, ip,
|
||||
parse_reject_statement (cfile, config);
|
||||
return;
|
||||
|
||||
+ case BOOTP_BROADCAST_ALWAYS:
|
||||
+ token = next_token(&val, (unsigned*)0, cfile);
|
||||
+ config -> bootp_broadcast_always = 1;
|
||||
+ parse_semi (cfile);
|
||||
+ return;
|
||||
diff -up dhcp-4.1.0/common/conflex.c.options dhcp-4.1.0/common/conflex.c
|
||||
--- dhcp-4.1.0/common/conflex.c.options 2009-01-06 07:59:13.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/conflex.c 2009-01-06 07:59:14.000000000 -1000
|
||||
@@ -783,6 +783,8 @@ intern(char *atom, enum dhcp_token dfv)
|
||||
return BALANCE;
|
||||
if (!strcasecmp (atom + 1, "ound"))
|
||||
return BOUND;
|
||||
+ if (!strcasecmp (atom + 1, "ootp-broadcast-always"))
|
||||
+ return BOOTP_BROADCAST_ALWAYS;
|
||||
break;
|
||||
case 'c':
|
||||
if (!strcasecmp (atom + 1, "ase"))
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.options dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.options 2009-01-06 07:59:13.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 07:59:14.000000000 -1000
|
||||
@@ -1079,6 +1079,9 @@ struct client_config {
|
||||
int do_forward_update; /* If nonzero, and if we have the
|
||||
information we need, update the
|
||||
A record for the address we get. */
|
||||
+
|
||||
default:
|
||||
lose = 0;
|
||||
stmt = (struct executable_statement *)0;
|
||||
+ int bootp_broadcast_always; /* If nonzero, always set the BOOTP_BROADCAST
|
||||
+ flag in requests */
|
||||
};
|
||||
|
||||
/* Per-interface state used in the dhcp client... */
|
||||
diff -up dhcp-4.1.0/includes/dhctoken.h.options dhcp-4.1.0/includes/dhctoken.h
|
||||
--- dhcp-4.1.0/includes/dhctoken.h.options 2008-02-20 02:45:53.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhctoken.h 2009-01-06 08:00:51.000000000 -1000
|
||||
@@ -352,7 +352,8 @@ enum dhcp_token {
|
||||
ZEROLEN = 655,
|
||||
TEMPORARY = 656,
|
||||
PREFIX6 = 657,
|
||||
- FIXED_PREFIX6 = 658
|
||||
+ FIXED_PREFIX6 = 658,
|
||||
+ BOOTP_BROADCAST_ALWAYS = 659
|
||||
};
|
||||
|
||||
#define is_identifier(x) ((x) >= FIRST_TOKEN && \
|
@ -1,7 +1,7 @@
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.path dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.path 2008-08-23 18:25:54.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2008-08-23 18:26:21.000000000 -1000
|
||||
@@ -1302,15 +1302,15 @@ typedef unsigned char option_mask [16];
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.paths dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.paths 2009-01-06 11:52:57.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 11:52:57.000000000 -1000
|
||||
@@ -1340,15 +1340,15 @@ typedef unsigned char option_mask [16];
|
||||
#else /* !DEBUG */
|
||||
|
||||
#ifndef _PATH_DHCPD_CONF
|
||||
@ -20,7 +20,7 @@ diff -up dhcp-4.0.0/includes/dhcpd.h.path dhcp-4.0.0/includes/dhcpd.h
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_DHCPD_PID
|
||||
@@ -1324,7 +1324,7 @@ typedef unsigned char option_mask [16];
|
||||
@@ -1362,7 +1362,7 @@ typedef unsigned char option_mask [16];
|
||||
#endif /* DEBUG */
|
||||
|
||||
#ifndef _PATH_DHCLIENT_CONF
|
||||
@ -29,7 +29,7 @@ diff -up dhcp-4.0.0/includes/dhcpd.h.path dhcp-4.0.0/includes/dhcpd.h
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_DHCLIENT_SCRIPT
|
||||
@@ -1340,11 +1340,11 @@ typedef unsigned char option_mask [16];
|
||||
@@ -1378,11 +1378,11 @@ typedef unsigned char option_mask [16];
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_DHCLIENT_DB
|
@ -1,18 +1,18 @@
|
||||
diff -up dhcp-4.0.0/client/dhclient.c.port dhcp-4.0.0/client/dhclient.c
|
||||
--- dhcp-4.0.0/client/dhclient.c.port 2008-10-29 13:27:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/client/dhclient.c 2008-10-29 13:27:33.000000000 -1000
|
||||
@@ -218,7 +218,7 @@ int main(int argc, char **argv, char **e
|
||||
} else if (!strcmp (argv [i], "-p")) {
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.validate dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.validate 2009-01-06 12:11:44.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 12:25:06.000000000 -1000
|
||||
@@ -190,7 +190,7 @@ main(int argc, char **argv) {
|
||||
} else if (!strcmp(argv[i], "-p")) {
|
||||
if (++i == argc)
|
||||
usage ();
|
||||
- local_port = htons (atoi (argv [i]));
|
||||
usage();
|
||||
- local_port = htons(atoi(argv[i]));
|
||||
+ local_port = validate_port(argv[i]);
|
||||
log_debug ("binding to user-specified port %d",
|
||||
ntohs (local_port));
|
||||
} else if (!strcmp (argv [i], "-d")) {
|
||||
diff -up dhcp-4.0.0/common/inet.c.port dhcp-4.0.0/common/inet.c
|
||||
--- dhcp-4.0.0/common/inet.c.port 2007-07-12 20:43:41.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/inet.c 2008-10-29 13:27:33.000000000 -1000
|
||||
log_debug("binding to user-specified port %d",
|
||||
ntohs(local_port));
|
||||
} else if (!strcmp(argv[i], "-d")) {
|
||||
diff -up dhcp-4.1.0/common/inet.c.validate dhcp-4.1.0/common/inet.c
|
||||
--- dhcp-4.1.0/common/inet.c.validate 2007-07-12 20:43:41.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/inet.c 2009-01-06 12:11:44.000000000 -1000
|
||||
@@ -604,3 +604,20 @@ piaddrcidr(const struct iaddr *addr, uns
|
||||
return ret;
|
||||
}
|
||||
@ -34,10 +34,10 @@ diff -up dhcp-4.0.0/common/inet.c.port dhcp-4.0.0/common/inet.c
|
||||
+
|
||||
+ return htons(local_port);
|
||||
+}
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.port dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.port 2008-10-29 13:27:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2008-10-29 13:28:57.000000000 -1000
|
||||
@@ -64,6 +64,7 @@
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.validate dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.validate 2009-01-06 12:11:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 12:11:44.000000000 -1000
|
||||
@@ -65,6 +65,7 @@
|
||||
#endif
|
||||
|
||||
#include <setjmp.h>
|
||||
@ -45,7 +45,7 @@ diff -up dhcp-4.0.0/includes/dhcpd.h.port dhcp-4.0.0/includes/dhcpd.h
|
||||
|
||||
#include "cdefs.h"
|
||||
#include "osdep.h"
|
||||
@@ -2432,6 +2433,7 @@ isc_result_t free_iaddrcidrnetlist(struc
|
||||
@@ -2511,6 +2512,7 @@ isc_result_t free_iaddrcidrnetlist(struc
|
||||
const char *piaddr PROTO ((struct iaddr));
|
||||
char *piaddrmask(struct iaddr *, struct iaddr *);
|
||||
char *piaddrcidr(const struct iaddr *, unsigned int);
|
||||
@ -53,22 +53,22 @@ diff -up dhcp-4.0.0/includes/dhcpd.h.port dhcp-4.0.0/includes/dhcpd.h
|
||||
|
||||
/* dhclient.c */
|
||||
extern int nowait;
|
||||
diff -up dhcp-4.0.0/relay/dhcrelay.c.port dhcp-4.0.0/relay/dhcrelay.c
|
||||
--- dhcp-4.0.0/relay/dhcrelay.c.port 2008-10-29 13:27:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/relay/dhcrelay.c 2008-10-29 13:27:33.000000000 -1000
|
||||
@@ -141,7 +141,7 @@ main(int argc, char **argv) {
|
||||
if (!strcmp (argv [i], "-p")) {
|
||||
diff -up dhcp-4.1.0/relay/dhcrelay.c.validate dhcp-4.1.0/relay/dhcrelay.c
|
||||
--- dhcp-4.1.0/relay/dhcrelay.c.validate 2009-01-06 12:11:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/relay/dhcrelay.c 2009-01-06 12:23:29.000000000 -1000
|
||||
@@ -222,7 +222,7 @@ main(int argc, char **argv) {
|
||||
} else if (!strcmp(argv[i], "-p")) {
|
||||
if (++i == argc)
|
||||
usage ();
|
||||
- local_port = htons (atoi (argv [i]));
|
||||
usage();
|
||||
- local_port = htons(atoi (argv[i]));
|
||||
+ local_port = validate_port(argv[i]);
|
||||
log_debug ("binding to user-specified port %d",
|
||||
ntohs (local_port));
|
||||
} else if (!strcmp (argv [i], "-d")) {
|
||||
diff -up dhcp-4.0.0/server/dhcpd.c.port dhcp-4.0.0/server/dhcpd.c
|
||||
--- dhcp-4.0.0/server/dhcpd.c.port 2008-10-29 13:27:33.000000000 -1000
|
||||
+++ dhcp-4.0.0/server/dhcpd.c 2008-10-29 13:27:33.000000000 -1000
|
||||
@@ -257,15 +257,7 @@ main(int argc, char **argv) {
|
||||
log_debug("binding to user-specified port %d",
|
||||
ntohs(local_port));
|
||||
} else if (!strcmp(argv[i], "-c")) {
|
||||
diff -up dhcp-4.1.0/server/dhcpd.c.validate dhcp-4.1.0/server/dhcpd.c
|
||||
--- dhcp-4.1.0/server/dhcpd.c.validate 2009-01-06 12:11:43.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/dhcpd.c 2009-01-06 12:11:44.000000000 -1000
|
||||
@@ -298,15 +298,7 @@ main(int argc, char **argv) {
|
||||
if (!strcmp (argv [i], "-p")) {
|
||||
if (++i == argc)
|
||||
usage ();
|
||||
@ -85,7 +85,7 @@ diff -up dhcp-4.0.0/server/dhcpd.c.port dhcp-4.0.0/server/dhcpd.c
|
||||
log_debug ("binding to user-specified port %d",
|
||||
ntohs (local_port));
|
||||
} else if (!strcmp (argv [i], "-f")) {
|
||||
@@ -438,7 +430,7 @@ main(int argc, char **argv) {
|
||||
@@ -531,7 +523,7 @@ main(int argc, char **argv) {
|
||||
if (!local_port)
|
||||
{
|
||||
if ((s = getenv ("DHCPD_PORT"))) {
|
@ -1,13 +1,13 @@
|
||||
diff -up dhcp-4.0.0//client/dhclient.c.release dhcp-4.0.0//client/dhclient.c
|
||||
--- dhcp-4.0.0//client/dhclient.c.release 2008-08-01 10:09:01.000000000 -1000
|
||||
+++ dhcp-4.0.0//client/dhclient.c 2008-08-01 10:09:17.000000000 -1000
|
||||
@@ -412,9 +412,81 @@ main(int argc, char **argv) {
|
||||
diff -up dhcp-4.1.0/client/dhclient.c.ifup dhcp-4.1.0/client/dhclient.c
|
||||
--- dhcp-4.1.0/client/dhclient.c.ifup 2009-01-06 08:29:14.000000000 -1000
|
||||
+++ dhcp-4.1.0/client/dhclient.c 2009-01-06 10:07:08.000000000 -1000
|
||||
@@ -474,9 +474,81 @@ main(int argc, char **argv) {
|
||||
kill(oldpid, SIGTERM);
|
||||
}
|
||||
fclose(pidfd);
|
||||
+ } else {
|
||||
+ /* handle release for interfaces requested with Red Hat
|
||||
+ * /sbin/ifup - pidfile will be /var/run/dhclient-$interface.pid
|
||||
+ * /sbin/ifup - pidfile will be /var/run/dhclient-$interface.pid
|
||||
+ */
|
||||
+
|
||||
+ if ((path_dhclient_pid == NULL) || (*path_dhclient_pid == '\0'))
|
||||
@ -28,7 +28,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.release dhcp-4.0.0//client/dhclient.c
|
||||
+
|
||||
+ for (dpfx=pfx; (dpfx >= 0) && (path_dhclient_pid[dpfx] != '-') && (path_dhclient_pid[dpfx] != '/'); dpfx--);
|
||||
+ if ((dpfx > -1) && (path_dhclient_pid[dpfx] != '/'))
|
||||
+ pfx = dpfx;
|
||||
+ pfx = dpfx;
|
||||
+
|
||||
+ for (ip = interfaces; ip; ip = ip->next) {
|
||||
+ if (interfaces_requested && (ip->flags & (INTERFACE_REQUESTED)) && (ip->name != NULL)) {
|
||||
@ -66,7 +66,7 @@ diff -up dhcp-4.0.0//client/dhclient.c.release dhcp-4.0.0//client/dhclient.c
|
||||
+ if ((pidfp = fopen(path_dhclient_pid, "r")) != NULL) {
|
||||
+ if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
|
||||
+ snprintf(procfn,256,"/proc/%u",dhcpid);
|
||||
+ dhc_running = (access(procfn, F_OK) == 0);
|
||||
+ dhc_running = (access(procfn, F_OK) == 0);
|
||||
+ }
|
||||
+
|
||||
+ fclose(pidfp);
|
||||
@ -81,5 +81,5 @@ diff -up dhcp-4.0.0//client/dhclient.c.release dhcp-4.0.0//client/dhclient.c
|
||||
+ write_client_pid_file();
|
||||
+
|
||||
if (!quiet) {
|
||||
log_info ("%s %s", message, PACKAGE_VERSION);
|
||||
log_info (copyright);
|
||||
log_info("%s %s", message, PACKAGE_VERSION);
|
||||
log_info(copyright);
|
@ -1,6 +1,6 @@
|
||||
diff -up dhcp-4.0.0//server/bootp.c.unicast dhcp-4.0.0//server/bootp.c
|
||||
--- dhcp-4.0.0//server/bootp.c.unicast 2007-10-26 12:46:50.000000000 -1000
|
||||
+++ dhcp-4.0.0//server/bootp.c 2008-08-01 10:12:38.000000000 -1000
|
||||
diff -up dhcp-4.1.0/server/bootp.c.unicast dhcp-4.1.0/server/bootp.c
|
||||
--- dhcp-4.1.0/server/bootp.c.unicast 2008-08-20 13:07:19.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/bootp.c 2009-01-06 10:13:29.000000000 -1000
|
||||
@@ -58,6 +58,7 @@ void bootp (packet)
|
||||
char msgbuf [1024];
|
||||
int ignorep;
|
||||
@ -18,7 +18,7 @@ diff -up dhcp-4.0.0//server/bootp.c.unicast dhcp-4.0.0//server/bootp.c
|
||||
log_info ("%s: network unknown", msgbuf);
|
||||
return;
|
||||
}
|
||||
@@ -384,6 +385,13 @@ void bootp (packet)
|
||||
@@ -390,6 +391,13 @@ void bootp (packet)
|
||||
from, &to, &hto);
|
||||
goto out;
|
||||
}
|
||||
@ -32,10 +32,10 @@ diff -up dhcp-4.0.0//server/bootp.c.unicast dhcp-4.0.0//server/bootp.c
|
||||
|
||||
/* If it comes from a client that already knows its address
|
||||
and is not requesting a broadcast response, and we can
|
||||
diff -up dhcp-4.0.0//server/dhcp.c.unicast dhcp-4.0.0//server/dhcp.c
|
||||
--- dhcp-4.0.0//server/dhcp.c.unicast 2007-11-02 12:09:02.000000000 -1000
|
||||
+++ dhcp-4.0.0//server/dhcp.c 2008-08-01 10:12:38.000000000 -1000
|
||||
@@ -3904,6 +3904,7 @@ int locate_network (packet)
|
||||
diff -up dhcp-4.1.0/server/dhcp.c.unicast dhcp-4.1.0/server/dhcp.c
|
||||
--- dhcp-4.1.0/server/dhcp.c.unicast 2008-11-03 08:13:58.000000000 -1000
|
||||
+++ dhcp-4.1.0/server/dhcp.c 2009-01-06 10:13:29.000000000 -1000
|
||||
@@ -4111,6 +4111,7 @@ int locate_network (packet)
|
||||
struct data_string data;
|
||||
struct subnet *subnet = (struct subnet *)0;
|
||||
struct option_cache *oc;
|
||||
@ -43,7 +43,7 @@ diff -up dhcp-4.0.0//server/dhcp.c.unicast dhcp-4.0.0//server/dhcp.c
|
||||
|
||||
/* See if there's a Relay Agent Link Selection Option, or a
|
||||
* Subnet Selection Option. The Link-Select and Subnet-Select
|
||||
@@ -3919,12 +3920,24 @@ int locate_network (packet)
|
||||
@@ -4126,12 +4127,24 @@ int locate_network (packet)
|
||||
from the interface, if there is one. If not, fail. */
|
||||
if (!oc && !packet -> raw -> giaddr.s_addr) {
|
||||
if (packet -> interface -> shared_network) {
|
||||
@ -73,7 +73,7 @@ diff -up dhcp-4.0.0//server/dhcp.c.unicast dhcp-4.0.0//server/dhcp.c
|
||||
}
|
||||
|
||||
/* If there's an option indicating link connection, and it's valid,
|
||||
@@ -3947,7 +3960,10 @@ int locate_network (packet)
|
||||
@@ -4154,7 +4167,10 @@ int locate_network (packet)
|
||||
data_string_forget (&data, MDL);
|
||||
} else {
|
||||
ia.len = 4;
|
||||
@ -85,7 +85,7 @@ diff -up dhcp-4.0.0//server/dhcp.c.unicast dhcp-4.0.0//server/dhcp.c
|
||||
}
|
||||
|
||||
/* If we know the subnet on which the IP address lives, use it. */
|
||||
@@ -3955,7 +3971,10 @@ int locate_network (packet)
|
||||
@@ -4162,7 +4178,10 @@ int locate_network (packet)
|
||||
shared_network_reference (&packet -> shared_network,
|
||||
subnet -> shared_network, MDL);
|
||||
subnet_dereference (&subnet, MDL);
|
@ -1,18 +1,18 @@
|
||||
diff -up dhcp-4.0.0/common/nit.c.xen dhcp-4.0.0/common/nit.c
|
||||
--- dhcp-4.0.0/common/nit.c.xen 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/nit.c 2007-12-29 06:39:16.000000000 -1000
|
||||
@@ -366,7 +366,7 @@ ssize_t receive_packet (interface, buf,
|
||||
diff -up dhcp-4.1.0/common/bpf.c.xen dhcp-4.1.0/common/bpf.c
|
||||
--- dhcp-4.1.0/common/bpf.c.xen 2007-08-22 23:49:51.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/bpf.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -482,7 +482,7 @@ ssize_t receive_packet (interface, buf,
|
||||
offset = decode_udp_ip_header (interface,
|
||||
interface -> rbuf,
|
||||
interface -> rbuf_offset,
|
||||
- from, hdr.bh_caplen, &paylen);
|
||||
+ from, hdr.bh_caplen, &paylen, 0);
|
||||
|
||||
/* Decode the IP and UDP headers... */
|
||||
offset = decode_udp_ip_header (interface, ibuf, bufix,
|
||||
- from, length, &paylen);
|
||||
+ from, length, &paylen, 0);
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0)
|
||||
diff -up dhcp-4.0.0/common/dlpi.c.xen dhcp-4.0.0/common/dlpi.c
|
||||
--- dhcp-4.0.0/common/dlpi.c.xen 2007-10-08 04:27:53.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/dlpi.c 2007-12-29 06:39:13.000000000 -1000
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0) {
|
||||
diff -up dhcp-4.1.0/common/dlpi.c.xen dhcp-4.1.0/common/dlpi.c
|
||||
--- dhcp-4.1.0/common/dlpi.c.xen 2008-02-29 13:57:56.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/dlpi.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -689,7 +689,7 @@ ssize_t receive_packet (interface, buf,
|
||||
length -= offset;
|
||||
#endif
|
||||
@ -22,21 +22,9 @@ diff -up dhcp-4.0.0/common/dlpi.c.xen dhcp-4.0.0/common/dlpi.c
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0) {
|
||||
diff -up dhcp-4.0.0/common/upf.c.xen dhcp-4.0.0/common/upf.c
|
||||
--- dhcp-4.0.0/common/upf.c.xen 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/upf.c 2007-12-29 06:39:24.000000000 -1000
|
||||
@@ -317,7 +317,7 @@ ssize_t receive_packet (interface, buf,
|
||||
|
||||
/* Decode the IP and UDP headers... */
|
||||
offset = decode_udp_ip_header (interface, ibuf, bufix,
|
||||
- from, length, &paylen);
|
||||
+ from, length, &paylen, 0);
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0)
|
||||
diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
--- dhcp-4.0.0/common/lpf.c.xen 2007-12-29 06:37:53.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/lpf.c 2007-12-29 06:43:08.000000000 -1000
|
||||
diff -up dhcp-4.1.0/common/lpf.c.xen dhcp-4.1.0/common/lpf.c
|
||||
--- dhcp-4.1.0/common/lpf.c.xen 2009-01-06 10:41:31.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/lpf.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -29,18 +29,33 @@
|
||||
#include "dhcpd.h"
|
||||
#if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
|
||||
@ -127,7 +115,7 @@ diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
#if defined (HAVE_TR_SUPPORT)
|
||||
if (info -> hw_address.hbuf [0] == HTYPE_IEEE802)
|
||||
lpf_tr_filter_setup (info);
|
||||
@@ -291,7 +324,6 @@ ssize_t send_packet (interface, packet,
|
||||
@@ -293,7 +326,6 @@ ssize_t send_packet (interface, packet,
|
||||
double hh [16];
|
||||
double ih [1536 / sizeof (double)];
|
||||
unsigned char *buf = (unsigned char *)ih;
|
||||
@ -135,7 +123,7 @@ diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
int result;
|
||||
int fudge;
|
||||
|
||||
@@ -309,15 +341,7 @@ ssize_t send_packet (interface, packet,
|
||||
@@ -311,15 +343,7 @@ ssize_t send_packet (interface, packet,
|
||||
(unsigned char *)raw, len);
|
||||
memcpy (buf + ibufp, raw, len);
|
||||
|
||||
@ -152,7 +140,7 @@ diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
if (result < 0)
|
||||
log_error ("send_packet: %m");
|
||||
return result;
|
||||
@@ -334,14 +358,35 @@ ssize_t receive_packet (interface, buf,
|
||||
@@ -336,14 +360,35 @@ ssize_t receive_packet (interface, buf,
|
||||
{
|
||||
int length = 0;
|
||||
int offset = 0;
|
||||
@ -189,7 +177,7 @@ diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
bufix = 0;
|
||||
/* Decode the physical header... */
|
||||
offset = decode_hw_header (interface, ibuf, bufix, hfrom);
|
||||
@@ -358,7 +403,7 @@ ssize_t receive_packet (interface, buf,
|
||||
@@ -360,7 +405,7 @@ ssize_t receive_packet (interface, buf,
|
||||
|
||||
/* Decode the IP and UDP headers... */
|
||||
offset = decode_udp_ip_header (interface, ibuf, bufix, from,
|
||||
@ -198,21 +186,21 @@ diff -up dhcp-4.0.0/common/lpf.c.xen dhcp-4.0.0/common/lpf.c
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0)
|
||||
diff -up dhcp-4.0.0/common/bpf.c.xen dhcp-4.0.0/common/bpf.c
|
||||
--- dhcp-4.0.0/common/bpf.c.xen 2007-08-22 23:49:51.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/bpf.c 2007-12-29 06:39:09.000000000 -1000
|
||||
@@ -482,7 +482,7 @@ ssize_t receive_packet (interface, buf,
|
||||
offset = decode_udp_ip_header (interface,
|
||||
interface -> rbuf,
|
||||
interface -> rbuf_offset,
|
||||
- from, hdr.bh_caplen, &paylen);
|
||||
+ from, hdr.bh_caplen, &paylen, 0);
|
||||
diff -up dhcp-4.1.0/common/nit.c.xen dhcp-4.1.0/common/nit.c
|
||||
--- dhcp-4.1.0/common/nit.c.xen 2007-09-05 07:32:10.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/nit.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -366,7 +366,7 @@ ssize_t receive_packet (interface, buf,
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0) {
|
||||
diff -up dhcp-4.0.0/common/packet.c.xen dhcp-4.0.0/common/packet.c
|
||||
--- dhcp-4.0.0/common/packet.c.xen 2007-12-29 06:37:53.000000000 -1000
|
||||
+++ dhcp-4.0.0/common/packet.c 2007-12-29 06:39:20.000000000 -1000
|
||||
/* Decode the IP and UDP headers... */
|
||||
offset = decode_udp_ip_header (interface, ibuf, bufix,
|
||||
- from, length, &paylen);
|
||||
+ from, length, &paylen, 0);
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0)
|
||||
diff -up dhcp-4.1.0/common/packet.c.xen dhcp-4.1.0/common/packet.c
|
||||
--- dhcp-4.1.0/common/packet.c.xen 2009-01-06 10:41:31.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/packet.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -210,7 +210,7 @@ ssize_t
|
||||
decode_udp_ip_header(struct interface_info *interface,
|
||||
unsigned char *buf, unsigned bufix,
|
||||
@ -231,10 +219,22 @@ diff -up dhcp-4.0.0/common/packet.c.xen dhcp-4.0.0/common/packet.c
|
||||
udp_packets_bad_checksum++;
|
||||
if (udp_packets_seen > 4 &&
|
||||
(udp_packets_seen / udp_packets_bad_checksum) < 2) {
|
||||
diff -up dhcp-4.0.0/includes/dhcpd.h.xen dhcp-4.0.0/includes/dhcpd.h
|
||||
--- dhcp-4.0.0/includes/dhcpd.h.xen 2007-12-29 06:37:53.000000000 -1000
|
||||
+++ dhcp-4.0.0/includes/dhcpd.h 2007-12-29 06:39:27.000000000 -1000
|
||||
@@ -2561,7 +2561,7 @@ ssize_t decode_hw_header PROTO ((struct
|
||||
diff -up dhcp-4.1.0/common/upf.c.xen dhcp-4.1.0/common/upf.c
|
||||
--- dhcp-4.1.0/common/upf.c.xen 2007-07-12 20:43:42.000000000 -1000
|
||||
+++ dhcp-4.1.0/common/upf.c 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -317,7 +317,7 @@ ssize_t receive_packet (interface, buf,
|
||||
|
||||
/* Decode the IP and UDP headers... */
|
||||
offset = decode_udp_ip_header (interface, ibuf, bufix,
|
||||
- from, length, &paylen);
|
||||
+ from, length, &paylen, 0);
|
||||
|
||||
/* If the IP or UDP checksum was bad, skip the packet... */
|
||||
if (offset < 0)
|
||||
diff -up dhcp-4.1.0/includes/dhcpd.h.xen dhcp-4.1.0/includes/dhcpd.h
|
||||
--- dhcp-4.1.0/includes/dhcpd.h.xen 2009-01-06 10:41:32.000000000 -1000
|
||||
+++ dhcp-4.1.0/includes/dhcpd.h 2009-01-06 10:41:32.000000000 -1000
|
||||
@@ -2640,7 +2640,7 @@ ssize_t decode_hw_header PROTO ((struct
|
||||
unsigned, struct hardware *));
|
||||
ssize_t decode_udp_ip_header PROTO ((struct interface_info *, unsigned char *,
|
||||
unsigned, struct sockaddr_in *,
|
139
dhcp.spec
139
dhcp.spec
@ -1,23 +1,18 @@
|
||||
# vendor string (e.g., Fedora, EL)
|
||||
%define vvendor Fedora
|
||||
|
||||
# Make it easy for package rebuilders to select LPF or sockets
|
||||
%define netmethod USE_LPF
|
||||
# Make it easy for package rebuilders to enable DHCPv6 support
|
||||
%define dhcpv6opt --disable-dhcpv6
|
||||
|
||||
%define with_USE_SOCKETS %{?_with_USE_SOCKETS: 1} %{?!_with_USE_SOCKETS: 0}
|
||||
%if %{with_USE_SOCKETS}
|
||||
%define netmethod USE_SOCKETS
|
||||
%endif
|
||||
|
||||
%define with_USE_LPF %{?_with_USE_LPF: 1} %{?!_with_USE_LPF: 0}
|
||||
%if %{with_USE_LPF}
|
||||
%define netmethod USE_LPF
|
||||
%define with_DHCPv6 %{?_with_DHCPv6: 1} %{?!_with_DHCPv6: 0}
|
||||
%if %{with_DHCPv6}
|
||||
%define dhcpv6opt --enable-dhcpv6
|
||||
%endif
|
||||
|
||||
Summary: Dynamic host configuration protocol software
|
||||
Name: dhcp
|
||||
Version: 4.0.0
|
||||
Release: 34%{?dist}
|
||||
Version: 4.1.0
|
||||
Release: 1%{?dist}
|
||||
# NEVER CHANGE THE EPOCH on this package. The previous maintainer (prior to
|
||||
# dcantrell maintaining the package) made incorrect use of the epoch and
|
||||
# that's why it is at 12 now. It should have never been used, but it was.
|
||||
@ -36,28 +31,25 @@ Source8: dhclient-script
|
||||
Source9: dhcp.schema
|
||||
Source10: get-ldap-patch.sh
|
||||
|
||||
Patch0: %{name}-4.0.0-errwarn-message.patch
|
||||
Patch1: %{name}-4.0.0-ldap-configuration.patch
|
||||
Patch2: %{name}-4.0.0-memory.patch
|
||||
Patch3: %{name}-4.0.0-options.patch
|
||||
Patch4: %{name}-4.0.0-release-by-ifup.patch
|
||||
Patch5: %{name}-4.0.0-dhclient-decline-backoff.patch
|
||||
Patch6: %{name}-4.0.0-enable-timeout-functions.patch
|
||||
Patch7: %{name}-4.0.0-unicast-bootp.patch
|
||||
Patch8: %{name}-4.0.0-fast-timeout.patch
|
||||
Patch9: %{name}-4.0.0-failover-ports.patch
|
||||
Patch10: %{name}-4.0.0-dhclient-usage.patch
|
||||
Patch11: %{name}-4.0.0-default-requested-options.patch
|
||||
Patch12: %{name}-4.0.0-xen-checksum.patch
|
||||
Patch13: %{name}-4.0.0-dhclient-anycast.patch
|
||||
Patch14: %{name}-4.0.0-manpages.patch
|
||||
Patch15: %{name}-4.0.0-paths.patch
|
||||
Patch16: %{name}-4.0.0-NetworkManager-crash.patch
|
||||
Patch17: %{name}-4.0.0-CLOEXEC.patch
|
||||
Patch18: %{name}-4.0.0-inherit-leases.patch
|
||||
Patch19: %{name}-4.0.0-garbage-chars.patch
|
||||
Patch20: %{name}-4.0.0-port-validation.patch
|
||||
Patch21: %{name}-4.0.0-invalid-dhclient-conf.patch
|
||||
Patch0: %{name}-4.1.0-errwarn-message.patch
|
||||
Patch1: %{name}-4.1.0-ldap-configuration.patch
|
||||
Patch2: %{name}-4.1.0-memory.patch
|
||||
Patch3: %{name}-4.1.0-options.patch
|
||||
Patch4: %{name}-4.1.0-release-by-ifup.patch
|
||||
Patch5: %{name}-4.1.0-dhclient-decline-backoff.patch
|
||||
Patch6: %{name}-4.1.0-unicast-bootp.patch
|
||||
Patch7: %{name}-4.1.0-failover-ports.patch
|
||||
Patch8: %{name}-4.1.0-dhclient-usage.patch
|
||||
Patch9: %{name}-4.1.0-default-requested-options.patch
|
||||
Patch10: %{name}-4.1.0-xen-checksum.patch
|
||||
Patch11: %{name}-4.1.0-dhclient-anycast.patch
|
||||
Patch12: %{name}-4.1.0-manpages.patch
|
||||
Patch13: %{name}-4.1.0-paths.patch
|
||||
Patch14: %{name}-4.1.0-CLOEXEC.patch
|
||||
Patch15: %{name}-4.1.0-inherit-leases.patch
|
||||
Patch16: %{name}-4.1.0-garbage-chars.patch
|
||||
Patch17: %{name}-4.1.0-port-validation.patch
|
||||
Patch18: %{name}-4.1.0-invalid-dhclient-conf.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: autoconf
|
||||
@ -111,16 +103,6 @@ Header files and API documentation for using the ISC DHCP libraries. The
|
||||
libdhcpctl and libomapi static libraries are also included in this package.
|
||||
|
||||
%prep
|
||||
case "%{netmethod}" in
|
||||
USE_LPF|USE_SOCKETS)
|
||||
continue ;;
|
||||
*)
|
||||
echo >&2
|
||||
echo "ERROR: Only --with options supported: USE_LPF, USE_SOCKETS" >&2
|
||||
echo >&2
|
||||
exit 1 ;;
|
||||
esac
|
||||
|
||||
%setup -q
|
||||
|
||||
# Replace the standard ISC warning message about requesting help with an
|
||||
@ -138,7 +120,7 @@ esac
|
||||
# Init struct sock_prog in common/lpf.c to NULL
|
||||
%patch2 -p1
|
||||
|
||||
# Add more dhclient options (-I, -B, -H, -F, -T, -V, and -R)
|
||||
# Add more dhclient options (-I, -B, -H, -F, -timeout, -V, and -R)
|
||||
%patch3 -p1
|
||||
|
||||
# Handle releasing interfaces requested by /sbin/ifup
|
||||
@ -149,62 +131,52 @@ esac
|
||||
# backoff for an amount of time before trying again
|
||||
%patch5 -p1
|
||||
|
||||
# Enable cancel_all_timeouts() and relinquish_timeouts() regardless of
|
||||
# the DEBUG_MEMORY_LEAKAGE_ON_EXIT macro
|
||||
%patch6 -p1
|
||||
|
||||
# Support unicast BOOTP for IBM pSeries systems (and maybe others)
|
||||
%patch7 -p1
|
||||
|
||||
# Fast timeout for dhclient
|
||||
%patch8 -p1
|
||||
%patch6 -p1
|
||||
|
||||
# Use the following IANA-registered failover ports:
|
||||
# dhcp-failover 647/tcp
|
||||
# dhcp-failover 647/udp
|
||||
# dhcp-failover 847/tcp
|
||||
# dhcp-failover 847/udp
|
||||
%patch9 -p1
|
||||
%patch7 -p1
|
||||
|
||||
# Update the usage screen for dhclient(8) indicating new options
|
||||
# Use printf() rather than log_info() to display the information
|
||||
# Also, return EXIT_FAILURE when the usage() screen is displayed (stop parsing)
|
||||
%patch10 -p1
|
||||
%patch8 -p1
|
||||
|
||||
# Add NIS domain, NIS servers, and NTP servers to the list of default
|
||||
# requested DHCP options
|
||||
%patch11 -p1
|
||||
%patch9 -p1
|
||||
|
||||
# Handle Xen partial UDP checksums
|
||||
%patch12 -p1
|
||||
%patch10 -p1
|
||||
|
||||
# Add anycast support to dhclient (for OLPC)
|
||||
%patch13 -p1
|
||||
%patch11 -p1
|
||||
|
||||
# Patch man page contents
|
||||
%patch14 -p1
|
||||
%patch12 -p1
|
||||
|
||||
# Change paths to conform to our standards
|
||||
%patch15 -p1
|
||||
|
||||
# Avoid crash when dhclient is run with NetworkManager
|
||||
%patch16 -p1
|
||||
%patch13 -p1
|
||||
|
||||
# Make sure all open file descriptors are closed-on-exec for SELinux (#446632)
|
||||
%patch17 -p1
|
||||
%patch14 -p1
|
||||
|
||||
# If we have an active lease, do not down the interface (#453982)
|
||||
%patch18 -p1
|
||||
%patch15 -p1
|
||||
|
||||
# Fix 'garbage in format string' error (#450052)
|
||||
%patch19 -p1
|
||||
%patch16 -p1
|
||||
|
||||
# Validate port numbers specified for dhclient, dhcpd, and dhcrelay
|
||||
# to make sure they are within 1-65535, inclusive. (#438149)
|
||||
%patch20 -p1
|
||||
%patch17 -p1
|
||||
|
||||
# The sample dhclient.conf should say 'supersede domain-search' (#467955)
|
||||
%patch21 -p1
|
||||
%patch18 -p1
|
||||
|
||||
# Copy in documentation and example scripts for LDAP patch to dhcpd
|
||||
%{__install} -p -m 0644 %{SOURCE3} .
|
||||
@ -249,14 +221,14 @@ for page in client/dhclient.conf.5 client/dhclient.leases.5 \
|
||||
%{__sed} -i -e 's|CLIENTBINDIR|/sbin|g' \
|
||||
-e 's|RUNDIR|%{_localstatedir}/run|g' \
|
||||
-e 's|DBDIR|%{_localstatedir}/db/dhclient|g' \
|
||||
-e 's|ETCDIR|%{_sysconfdir}|g' $page
|
||||
-e 's|ETCDIR|%{_sysconfdir}/dhcp|g' $page
|
||||
done
|
||||
|
||||
for page in server/dhcpd.conf.5 server/dhcpd.leases.5 server/dhcpd.8 ; do
|
||||
%{__sed} -i -e 's|CLIENTBINDIR|/sbin|g' \
|
||||
-e 's|RUNDIR|%{_localstatedir}/run|g' \
|
||||
-e 's|DBDIR|%{_localstatedir}/db/dhcpd|g' \
|
||||
-e 's|ETCDIR|%{_sysconfdir}|g' $page
|
||||
-e 's|ETCDIR|%{_sysconfdir}/dhcp|g' $page
|
||||
done
|
||||
|
||||
aclocal
|
||||
@ -266,9 +238,9 @@ autoheader
|
||||
automake --foreign --add-missing --copy
|
||||
|
||||
%build
|
||||
CFLAGS="%{optflags} -fPIC -D_GNU_SOURCE -DUSE_SSL=1 -D%{netmethod}=1" \
|
||||
CFLAGS="%{optflags} -fPIC -D_GNU_SOURCE -DLDAP_CONFIGURATION -DUSE_SSL" \
|
||||
%configure \
|
||||
--disable-dhcpv6 \
|
||||
%{dhcpv6opt} \
|
||||
--with-srv-lease-file=%{_localstatedir}/lib/dhcpd/dhcpd.leases \
|
||||
--with-cli-lease-file=%{_localstatedir}/lib/dhclient/dhclient.leases \
|
||||
--with-srv-pid-file=%{_localstatedir}/run/dhcpd.pid \
|
||||
@ -336,9 +308,23 @@ EOF
|
||||
%{__rm} -rf %{buildroot}
|
||||
|
||||
%post
|
||||
if [ -f /etc/dhcpd.conf ]; then
|
||||
/bin/cp -a /etc/dhcpd.conf /etc/dhcp/dhcpd.conf >/dev/null 2>&1
|
||||
/bin/rm -f /etc/dhcpd.conf >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
/sbin/chkconfig --add dhcpd
|
||||
/sbin/chkconfig --add dhcrelay || :
|
||||
|
||||
%post -n dhclient
|
||||
/bin/ls -1 /etc/dhclient* >/dev/null 2>&1
|
||||
if [ $? = 0 ]; then
|
||||
/bin/ls -1 /etc/dhclient* 2>/dev/null | while read etcfile ; do
|
||||
/bin/cp -a "${etcfile}" /etc/dhcp
|
||||
/bin/rm -f "${etcfile}"
|
||||
done || :
|
||||
fi || :
|
||||
|
||||
%preun
|
||||
if [ $1 = 0 ]; then
|
||||
/sbin/service dhcpd status >/dev/null 2>&1
|
||||
@ -410,6 +396,15 @@ fi
|
||||
%attr(0644,root,root) %{_mandir}/man3/omapi.3.gz
|
||||
|
||||
%changelog
|
||||
* Tue Jan 06 2009 David Cantrell <dcantrell@redhat.com> - 12:4.1.0-1
|
||||
- Upgraded to ISC dhcp-4.1.0
|
||||
- Had to rename the -T option to -timeout as ISC is now using -T
|
||||
- Allow package rebuilders to easily enable DHCPv6 support with:
|
||||
rpmbuild --with DHCPv6 dhcp.spec
|
||||
Note that Fedora is still using the 'dhcpv6' package, but some
|
||||
users may want to experiment with the ISC DHCPv6 implementation
|
||||
locally.
|
||||
|
||||
* Thu Dec 18 2008 David Cantrell <dcantrell@redhat.com> - 12:4.0.0-34
|
||||
- Move /etc/dhclient.conf to /etc/dhcp/dhclient.conf
|
||||
- Move /etc/dhcpd.conf to /etc/dhcp/dhcpd.conf
|
||||
|
@ -46,7 +46,7 @@ findConfig() {
|
||||
continue
|
||||
fi
|
||||
done
|
||||
echo "/etc/dhcpd.conf"
|
||||
echo "/etc/dhcp/dhcpd.conf"
|
||||
}
|
||||
|
||||
conf="$(findConfig "$DHCPDARGS")"
|
||||
|
Loading…
Reference in New Issue
Block a user