summaryrefslogtreecommitdiffstats
path: root/plugins-root
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2012-06-13 12:36:42 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2012-06-13 12:36:42 +0200
commitf091d59e0f9abec9304d9d230fafc2dec001baba (patch)
tree8485cbc75a5ec6cc90f97a21119d44797805607b /plugins-root
parenta80eafbf9cab9d80c526c504edf2ee4446a072d9 (diff)
downloadmonitoring-plugins-f091d59e0f9abec9304d9d230fafc2dec001baba.tar.gz
check_dhcp: Fix handling of "pad" options
Don't let "pad" options[*] terminate the parsing of DHCP options. This bug was triggered by using check_dhcp against Windows 2003 DHCP servers (see #3503921). [*] Cf. RFC 2132, 3.1.
Diffstat (limited to 'plugins-root')
-rw-r--r--plugins-root/check_dhcp.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/plugins-root/check_dhcp.c b/plugins-root/check_dhcp.c
index 2a1875c4..ac892747 100644
--- a/plugins-root/check_dhcp.c
+++ b/plugins-root/check_dhcp.c
@@ -839,8 +839,7 @@ int add_dhcp_offer(struct in_addr source,dhcp_packet *offer_packet){
839 /* process all DHCP options present in the packet */ 839 /* process all DHCP options present in the packet */
840 for(x=4;x<MAX_DHCP_OPTIONS_LENGTH;){ 840 for(x=4;x<MAX_DHCP_OPTIONS_LENGTH;){
841 841
842 /* end of options (0 is really just a pad, but bail out anyway) */ 842 if((int)offer_packet->options[x]==-1)
843 if((int)offer_packet->options[x]==-1 || (int)offer_packet->options[x]==0)
844 break; 843 break;
845 844
846 /* get option type */ 845 /* get option type */
@@ -872,7 +871,9 @@ int add_dhcp_offer(struct in_addr source,dhcp_packet *offer_packet){
872 } 871 }
873 872
874 /* skip option data we're ignoring */ 873 /* skip option data we're ignoring */
875 if(option_type!=DHCP_OPTION_REBINDING_TIME) 874 if(option_type==0) /* "pad" option, see RFC 2132 (3.1) */
875 x+=1;
876 else
876 x+=option_length; 877 x+=option_length;
877 } 878 }
878 879