diff options
Diffstat (limited to 'web/attachments/217472-check_dhcp.c.patch')
| -rw-r--r-- | web/attachments/217472-check_dhcp.c.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/web/attachments/217472-check_dhcp.c.patch b/web/attachments/217472-check_dhcp.c.patch new file mode 100644 index 0000000..d9b69e0 --- /dev/null +++ b/web/attachments/217472-check_dhcp.c.patch | |||
| @@ -0,0 +1,93 @@ | |||
| 1 | --- nagios-plugins-HEAD-200702121300/plugins-root/check_dhcp.c 2007-01-28 22:46:41.000000000 +0100 | ||
| 2 | +++ nagios-plugins-HEAD-200702121300/plugins-root/check_dhcp.c 2007-02-23 22:36:30.200102288 +0100 | ||
| 3 | @@ -182,6 +182,7 @@ typedef struct requested_server_struct{ | ||
| 4 | #define DHCP_OPTION_BROADCAST_ADDRESS 28 | ||
| 5 | #define DHCP_OPTION_REQUESTED_ADDRESS 50 | ||
| 6 | #define DHCP_OPTION_LEASE_TIME 51 | ||
| 7 | +#define DHCP_OPTION_SERVER_IDENTIFIER 54 | ||
| 8 | #define DHCP_OPTION_RENEWAL_TIME 58 | ||
| 9 | #define DHCP_OPTION_REBINDING_TIME 59 | ||
| 10 | |||
| 11 | @@ -768,6 +769,7 @@ int add_dhcp_offer(struct in_addr source | ||
| 12 | int y; | ||
| 13 | unsigned option_type; | ||
| 14 | unsigned option_length; | ||
| 15 | + struct in_addr serv_ident = {0}; | ||
| 16 | |||
| 17 | if(offer_packet==NULL) | ||
| 18 | return ERROR; | ||
| 19 | @@ -789,23 +791,27 @@ int add_dhcp_offer(struct in_addr source | ||
| 20 | printf("Option: %d (0x%02X)\n",option_type,option_length); | ||
| 21 | |||
| 22 | /* get option data */ | ||
| 23 | - if(option_type==DHCP_OPTION_LEASE_TIME){ | ||
| 24 | - memcpy(&dhcp_lease_time, &offer_packet->options[x],sizeof(dhcp_lease_time)); | ||
| 25 | + switch(option_type) { | ||
| 26 | + case DHCP_OPTION_LEASE_TIME: | ||
| 27 | + memcpy(&dhcp_lease_time,offer_packet->options+x,sizeof dhcp_lease_time); | ||
| 28 | dhcp_lease_time = ntohl(dhcp_lease_time); | ||
| 29 | - } | ||
| 30 | - if(option_type==DHCP_OPTION_RENEWAL_TIME){ | ||
| 31 | - memcpy(&dhcp_renewal_time, &offer_packet->options[x],sizeof(dhcp_renewal_time)); | ||
| 32 | + break; | ||
| 33 | + case DHCP_OPTION_RENEWAL_TIME: | ||
| 34 | + memcpy(&dhcp_renewal_time,offer_packet->options+x,sizeof dhcp_renewal_time); | ||
| 35 | dhcp_renewal_time = ntohl(dhcp_renewal_time); | ||
| 36 | - } | ||
| 37 | - if(option_type==DHCP_OPTION_REBINDING_TIME){ | ||
| 38 | - memcpy(&dhcp_rebinding_time, &offer_packet->options[x],sizeof(dhcp_rebinding_time)); | ||
| 39 | + break; | ||
| 40 | + case DHCP_OPTION_REBINDING_TIME: | ||
| 41 | + memcpy(&dhcp_rebinding_time,offer_packet->options+x,sizeof dhcp_rebinding_time); | ||
| 42 | dhcp_rebinding_time = ntohl(dhcp_rebinding_time); | ||
| 43 | - } | ||
| 44 | - | ||
| 45 | + break; | ||
| 46 | + case DHCP_OPTION_SERVER_IDENTIFIER: | ||
| 47 | + memcpy(&serv_ident.s_addr,offer_packet->options+x,sizeof serv_ident.s_addr); | ||
| 48 | + break; | ||
| 49 | + } | ||
| 50 | /* skip option data we're ignoring */ | ||
| 51 | - else | ||
| 52 | - for(y=0;y<option_length;y++,x++); | ||
| 53 | - } | ||
| 54 | + if(option_type!=DHCP_OPTION_REBINDING_TIME) | ||
| 55 | + x+=option_length; | ||
| 56 | + } | ||
| 57 | |||
| 58 | if(verbose){ | ||
| 59 | if(dhcp_lease_time==DHCP_INFINITE_TIME) | ||
| 60 | @@ -819,14 +825,14 @@ int add_dhcp_offer(struct in_addr source | ||
| 61 | if(dhcp_rebinding_time==DHCP_INFINITE_TIME) | ||
| 62 | printf(_("Rebinding Time: Infinite\n")); | ||
| 63 | printf(_("Rebinding Time: %lu seconds\n"),(unsigned long)dhcp_rebinding_time); | ||
| 64 | - } | ||
| 65 | + } | ||
| 66 | |||
| 67 | new_offer=(dhcp_offer *)malloc(sizeof(dhcp_offer)); | ||
| 68 | |||
| 69 | if(new_offer==NULL) | ||
| 70 | return ERROR; | ||
| 71 | |||
| 72 | - new_offer->server_address=source; | ||
| 73 | + new_offer->server_address=serv_ident.s_addr?serv_ident:source; | ||
| 74 | new_offer->offered_address=offer_packet->yiaddr; | ||
| 75 | new_offer->lease_time=dhcp_lease_time; | ||
| 76 | new_offer->renewal_time=dhcp_renewal_time; | ||
| 77 | @@ -836,14 +842,14 @@ int add_dhcp_offer(struct in_addr source | ||
| 78 | if(verbose){ | ||
| 79 | printf(_("Added offer from server @ %s"),inet_ntoa(new_offer->server_address)); | ||
| 80 | printf(_(" of IP address %s\n"),inet_ntoa(new_offer->offered_address)); | ||
| 81 | - } | ||
| 82 | + } | ||
| 83 | |||
| 84 | /* add new offer to head of list */ | ||
| 85 | new_offer->next=dhcp_offer_list; | ||
| 86 | dhcp_offer_list=new_offer; | ||
| 87 | |||
| 88 | return OK; | ||
| 89 | - } | ||
| 90 | +} | ||
| 91 | |||
| 92 | |||
| 93 | /* frees memory allocated to DHCP OFFER list */ | ||
