Code

check_dhcp now adds mandatory end option (Thanks to Enrico Scholz - #1675306)
authorMatthias Eble <psychotrahe@users.sourceforge.net>
Sun, 13 May 2007 12:28:30 +0000 (12:28 +0000)
committerMatthias Eble <psychotrahe@users.sourceforge.net>
Sun, 13 May 2007 12:28:30 +0000 (12:28 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1712 f882894a-f735-0410-b71e-b25c423dba1c

THANKS.in
plugins-root/check_dhcp.c

index baed6965ab21e4379231e2e2c4673dcb5c6723b0..b35c43817d0660575c753c9ae6b5aff5fb26679a 100644 (file)
--- a/THANKS.in
+++ b/THANKS.in
@@ -219,3 +219,4 @@ Denis Knauf
 Matthias Flacke
 Emil Michles
 Ask Bjoern Hansen
+Enrico Scholz
index 72405feac1a3a80c4a7676d3f51c9d9a488265c4..8559d634e62545fce4fde4663f5c1b0a3603b2c4 100644 (file)
@@ -185,6 +185,7 @@ typedef struct requested_server_struct{
 #define DHCP_OPTION_SERVER_IDENTIFIER   54
 #define DHCP_OPTION_RENEWAL_TIME        58
 #define DHCP_OPTION_REBINDING_TIME      59
+#define DHCP_OPTION_END                 255
 
 #define DHCP_INFINITE_TIME              0xFFFFFFFF
 
@@ -401,6 +402,7 @@ int get_hardware_address(int sock,char *interface_name){
 int send_dhcp_discover(int sock){
        dhcp_packet discover_packet;
        struct sockaddr_in sockaddr_broadcast;
+    unsigned short opts;
 
 
        /* clear the packet data structure */
@@ -442,17 +444,20 @@ int send_dhcp_discover(int sock){
        discover_packet.options[2]='\x53';
        discover_packet.options[3]='\x63';
 
+    opts = 4;
        /* DHCP message type is embedded in options field */
-       discover_packet.options[4]=DHCP_OPTION_MESSAGE_TYPE;    /* DHCP message type option identifier */
-       discover_packet.options[5]='\x01';               /* DHCP message option length in bytes */
-       discover_packet.options[6]=DHCPDISCOVER;
+       discover_packet.options[opts++]=DHCP_OPTION_MESSAGE_TYPE;    /* DHCP message type option identifier */
+       discover_packet.options[opts++]='\x01';               /* DHCP message option length in bytes */
+       discover_packet.options[opts++]=DHCPDISCOVER;
 
        /* the IP address we're requesting */
        if(request_specific_address==TRUE){
-               discover_packet.options[7]=DHCP_OPTION_REQUESTED_ADDRESS;
-               discover_packet.options[8]='\x04';
-               memcpy(&discover_packet.options[9],&requested_address,sizeof(requested_address));
+               discover_packet.options[opts++]=DHCP_OPTION_REQUESTED_ADDRESS;
+               discover_packet.options[opts++]='\x04';
+               memcpy(&discover_packet.options[opts],&requested_address,sizeof(requested_address));
+               opts += sizeof(requested_address);
                }
+       discover_packet.options[opts++]=DHCP_OPTION_END;
        
        /* send the DHCPDISCOVER packet to broadcast address */
         sockaddr_broadcast.sin_family=AF_INET;