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 | } | ||
