diff options
Diffstat (limited to 'web/attachments/148408-check_dhcp.c.diff')
-rw-r--r-- | web/attachments/148408-check_dhcp.c.diff | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/web/attachments/148408-check_dhcp.c.diff b/web/attachments/148408-check_dhcp.c.diff new file mode 100644 index 0000000..bd24891 --- /dev/null +++ b/web/attachments/148408-check_dhcp.c.diff | |||
@@ -0,0 +1,74 @@ | |||
1 | --- check_dhcp.c.orig 2005-09-07 12:33:44.000000000 -0700 | ||
2 | +++ check_dhcp.c 2005-09-07 15:35:26.000000000 -0700 | ||
3 | @@ -157,6 +157,7 @@ | ||
4 | |||
5 | typedef struct requested_server_struct{ | ||
6 | struct in_addr server_address; | ||
7 | + int answered; | ||
8 | struct requested_server_struct *next; | ||
9 | }requested_server; | ||
10 | |||
11 | @@ -479,6 +480,7 @@ | ||
12 | int get_dhcp_offer(int sock){ | ||
13 | dhcp_packet offer_packet; | ||
14 | struct sockaddr_in source; | ||
15 | + struct sockaddr_in via; | ||
16 | int result=OK; | ||
17 | int timeout=1; | ||
18 | int responses=0; | ||
19 | @@ -499,6 +501,7 @@ | ||
20 | printf("\n\n"); | ||
21 | |||
22 | bzero(&source,sizeof(source)); | ||
23 | + bzero(&via,sizeof(via)); | ||
24 | bzero(&offer_packet,sizeof(offer_packet)); | ||
25 | |||
26 | result=OK; | ||
27 | @@ -516,9 +519,18 @@ | ||
28 | |||
29 | responses++; | ||
30 | } | ||
31 | + /* The "source" is either a server or a relay. */ | ||
32 | + /* Save a copy of "source" into "via" even if it's via itself */ | ||
33 | + memcpy(&via,&source,sizeof(source)) ; | ||
34 | + | ||
35 | + /* If siaddr is non-zero, set "source" to siaddr */ | ||
36 | + if (offer_packet.siaddr.s_addr != 0L) { | ||
37 | + source.sin_addr.s_addr = offer_packet.siaddr.s_addr ; | ||
38 | + } | ||
39 | |||
40 | if (verbose) { | ||
41 | - printf(_("DHCPOFFER from IP address %s\n"),inet_ntoa(source.sin_addr)); | ||
42 | + printf(_("DHCPOFFER from IP address %s"),inet_ntoa(source.sin_addr)); | ||
43 | + printf(_(" via %s\n"),inet_ntoa(via.sin_addr)); | ||
44 | printf("DHCPOFFER XID: %lu (0x%X)\n",ntohl(offer_packet.xid),ntohl(offer_packet.xid)); | ||
45 | } | ||
46 | |||
47 | @@ -727,6 +739,7 @@ | ||
48 | return ERROR; | ||
49 | |||
50 | new_server->server_address=server_address; | ||
51 | + new_server->answered=FALSE; | ||
52 | |||
53 | new_server->next=requested_server_list; | ||
54 | requested_server_list=new_server; | ||
55 | @@ -887,9 +900,17 @@ | ||
56 | if(!memcmp(&temp_offer->server_address,&temp_server->server_address,sizeof(temp_server->server_address))){ | ||
57 | if (verbose) { | ||
58 | printf(_("DHCP Server Match: Offerer=%s"),inet_ntoa(temp_offer->server_address)); | ||
59 | - printf(_(" Requested=%s\n"),inet_ntoa(temp_server->server_address)); | ||
60 | + printf(_(" Requested=%s"),inet_ntoa(temp_server->server_address)); | ||
61 | + if (temp_server->answered) | ||
62 | + printf(_(" (duplicate)")); | ||
63 | + | ||
64 | + printf(_("\n")); | ||
65 | } | ||
66 | - requested_responses++; | ||
67 | + if (temp_server->answered == FALSE){ | ||
68 | + requested_responses++; | ||
69 | + temp_server->answered=TRUE; | ||
70 | + } | ||
71 | + | ||
72 | } | ||
73 | } | ||
74 | } | ||