Преглед изворни кода

check_dhcp now adds mandatory end option (Thanks to Enrico Scholz - #1675306)

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1712 f882894a-f735-0410-b71e-b25c423dba1c
Matthias Eble пре 19 година
родитељ
комит
09f87e314b
2 измењених фајлова са 12 додато и 6 уклоњено
  1. 1 0
      THANKS.in
  2. 11 6
      plugins-root/check_dhcp.c

+ 1 - 0
THANKS.in

@@ -219,3 +219,4 @@ Denis Knauf
 Matthias Flacke
 Matthias Flacke
 Emil Michles
 Emil Michles
 Ask Bjoern Hansen
 Ask Bjoern Hansen
+Enrico Scholz

+ 11 - 6
plugins-root/check_dhcp.c

@@ -185,6 +185,7 @@ typedef struct requested_server_struct{
 #define DHCP_OPTION_SERVER_IDENTIFIER   54
 #define DHCP_OPTION_SERVER_IDENTIFIER   54
 #define DHCP_OPTION_RENEWAL_TIME        58
 #define DHCP_OPTION_RENEWAL_TIME        58
 #define DHCP_OPTION_REBINDING_TIME      59
 #define DHCP_OPTION_REBINDING_TIME      59
+#define DHCP_OPTION_END                 255
 
 
 #define DHCP_INFINITE_TIME              0xFFFFFFFF
 #define DHCP_INFINITE_TIME              0xFFFFFFFF
 
 
@@ -401,6 +402,7 @@ int get_hardware_address(int sock,char *interface_name){
 int send_dhcp_discover(int sock){
 int send_dhcp_discover(int sock){
 	dhcp_packet discover_packet;
 	dhcp_packet discover_packet;
 	struct sockaddr_in sockaddr_broadcast;
 	struct sockaddr_in sockaddr_broadcast;
+    unsigned short opts;
 
 
 
 
 	/* clear the packet data structure */
 	/* clear the packet data structure */
@@ -442,17 +444,20 @@ int send_dhcp_discover(int sock){
 	discover_packet.options[2]='\x53';
 	discover_packet.options[2]='\x53';
 	discover_packet.options[3]='\x63';
 	discover_packet.options[3]='\x63';
 
 
+    opts = 4;
 	/* DHCP message type is embedded in options field */
 	/* 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 */
 	/* the IP address we're requesting */
 	if(request_specific_address==TRUE){
 	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 */
 	/* send the DHCPDISCOVER packet to broadcast address */
         sockaddr_broadcast.sin_family=AF_INET;
         sockaddr_broadcast.sin_family=AF_INET;