#ifndef lint
static char copyright[] =
-"$Id: dhclient.c,v 1.36 1997/05/09 07:54:14 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dhclient.c,v 1.37 1997/06/02 22:36:25 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
return;
}
- note ("DHCPACK from %s",
- print_hw_addr (packet -> raw -> htype,
- packet -> raw -> hlen,
- packet -> raw -> chaddr));
+ note ("DHCPACK from %s", piaddr (packet -> client_addr));
lease = packet_to_lease (packet);
if (!lease) {
void bootp (packet)
struct packet *packet;
{
- if (packet -> raw -> op == BOOTREPLY)
- dhcpoffer (packet);
+ struct iaddrlist *ap;
+
+ if (packet -> raw -> op != BOOTREPLY)
+ return;
+
+ /* If there's a reject list, make sure this packet's sender isn't
+ on it. */
+ for (ap = packet -> interface -> client -> config -> reject_list;
+ ap; ap = ap -> next) {
+ if (addr_eq (packet -> client_addr, ap -> addr)) {
+ note ("BOOTREPLY from %s rejected.",
+ piaddr (ap -> addr));
+ return;
+ }
+ }
+
+ dhcpoffer (packet);
}
void dhcp (packet)
struct packet *packet;
{
+ struct iaddrlist *ap;
+ void (*handler) (struct packet *);
+ char *type;
+
switch (packet -> packet_type) {
case DHCPOFFER:
- dhcpoffer (packet);
+ handler = dhcpoffer;
+ type = "DHCPOFFER";
break;
case DHCPNAK:
- dhcpnak (packet);
+ handler = dhcpnak;
+ type = "DHCPNACK";
break;
case DHCPACK:
- dhcpack (packet);
+ handler = dhcpack;
+ type = "DHCPACK";
break;
default:
- break;
+ return;
+ }
+
+ /* If there's a reject list, make sure this packet's sender isn't
+ on it. */
+ for (ap = packet -> interface -> client -> config -> reject_list;
+ ap; ap = ap -> next) {
+ if (addr_eq (packet -> client_addr, ap -> addr)) {
+ note ("%s from %s rejected.",
+ type, piaddr (ap -> addr));
+ return;
+ }
}
+ (*handler) (packet);
}
void dhcpoffer (packet)
int arp_timeout_needed, stop_selecting;
char *name = (packet -> options [DHO_DHCP_MESSAGE_TYPE].len
? "DHCPOFFER" : "BOOTREPLY");
+ struct iaddrlist *ap;
#ifdef DEBUG_PACKET
dump_packet (packet);
return;
}
- note ("%s from %s", name,
- print_hw_addr (packet -> raw -> htype,
- packet -> raw -> hlen,
- packet -> raw -> chaddr));
+ note ("%s from %s", name, piaddr (packet -> client_addr));
/* If this lease doesn't supply the minimum required parameters,
blow it off. */
return;
}
- note ("DHCPNAK from %s",
- print_hw_addr (packet -> raw -> htype,
- packet -> raw -> hlen,
- packet -> raw -> chaddr));
+ note ("DHCPNAK from %s", piaddr (packet -> client_addr));
if (!ip -> client -> active) {
note ("DHCPNAK with no active lease.\n");
dhcp_options [i].name,
pretty_print_option
(i, lease -> options [i].data,
- lease -> options [i].len, 1));
+ lease -> options [i].len, 1, 1));
}
}
t = gmtime (&lease -> renewal);
char *s = dhcp_option_ev_name (&dhcp_options [i]);
fprintf (scriptFile, "%s%s=\"%s\"\n", prefix, s,
- pretty_print_option (i, dp, len, 0));
+ pretty_print_option (i, dp, len, 0, 0));
fprintf (scriptFile, "export %s%s\n", prefix, s);
}
}