瀏覽代碼

Tracker:1109261 This was an alignment problem on Solaris. Linux kernel fixes alignment so this was not seen there. Memcpy takes care of proper alignment. Tested on RHEL V3 U3, RHEL V4, FreeBSD 4.10 (Thanks Stanley!) and Solaris 9 with the GNU env.

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1105 f882894a-f735-0410-b71e-b25c423dba1c
Harper Mann 21 年之前
父節點
當前提交
60780d270f
共有 1 個文件被更改,包括 15 次插入 和 6 次删除
  1. 15 6
      plugins/check_dhcp.c

+ 15 - 6
plugins/check_dhcp.c

@@ -770,12 +770,21 @@ int add_dhcp_offer(struct in_addr source,dhcp_packet *offer_packet){
 			printf("Option: %d (0x%02X)\n",option_type,option_length);
 
 		/* get option data */
-		if(option_type==DHCP_OPTION_LEASE_TIME)
-			dhcp_lease_time=ntohl(*((u_int32_t *)&offer_packet->options[x]));
-		if(option_type==DHCP_OPTION_RENEWAL_TIME)
-			dhcp_renewal_time=ntohl(*((u_int32_t *)&offer_packet->options[x]));
-		if(option_type==DHCP_OPTION_REBINDING_TIME)
-			dhcp_rebinding_time=ntohl(*((u_int32_t *)&offer_packet->options[x]));
+        if(option_type==DHCP_OPTION_LEASE_TIME) {
+            memcpy(&dhcp_lease_time, &offer_packet->options[x],
+                sizeof(dhcp_lease_time));
+            dhcp_lease_time = ntohl(dhcp_lease_time);
+        }
+        if(option_type==DHCP_OPTION_RENEWAL_TIME) {
+            memcpy(&dhcp_renewal_time, &offer_packet->options[x],
+                sizeof(dhcp_renewal_time));
+            dhcp_renewal_time = ntohl(dhcp_renewal_time);
+        }
+        if(option_type==DHCP_OPTION_REBINDING_TIME) {
+            memcpy(&dhcp_rebinding_time, &offer_packet->options[x],
+                sizeof(dhcp_rebinding_time));
+            dhcp_rebinding_time = ntohl(dhcp_rebinding_time);
+        }
 
 		/* skip option data we're ignoring */
 		else