Hello, all,

The attached patch fixes several compile and run-time bugs in the current ipmitool TOB:> o lib/ipmi_sel.c
      - zero data before making request to avoid reading of uninitialized data
    o lib/ipmi_mc.c
      - do not print AUX info, if IPMC return 12-byte Get Device ID response
    o lib/ipmi_picmg.c
      - add support for hexadecimal and octal formats for the command-line 
parameters
    o configure.in
       - fixed build for the newer autotool releases
       - do not override OS-default values for IMB, OPEN and LIPMI interfaces
         if the corresponding enable/disable arguments are not provided in the 
command-line

Please, review.

Regards,
Dmitry

diff -Nurp ipmitool.sav/configure.in ipmitool.cvs/configure.in
--- ipmitool.sav/configure.in	2013-04-15 15:12:09 +0600
+++ ipmitool.cvs/configure.in	2013-04-17 22:41:55 +0600
@@ -209,11 +209,18 @@ AC_ARG_WITH([kerneldir],
 
 AH_TEMPLATE([HAVE_LINUX_COMPILER_H], [])
 AC_MSG_CHECKING([for linux/compiler.h])
-AC_PREPROC_IFELSE([#include <linux/compiler.h>],
-	[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
+
+m4_version_prereq([2.68],
+	[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <linux/compiler.h>]])],
+		[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
+			[Define to 1 if you have the <linux/compiler.h> header file.])
+		AC_MSG_RESULT([yes])],
+		[AC_MSG_RESULT([no])])],
+	[AC_PREPROC_IFELSE([#include <linux/compiler.h>],
+		[AC_DEFINE(HAVE_LINUX_COMPILER_H, [1],
 		[Define to 1 if you have the <linux/compiler.h> header file.])
-	AC_MSG_RESULT([yes])],
-	[AC_MSG_RESULT([no])])
+		AC_MSG_RESULT([yes])],
+		[AC_MSG_RESULT([no])])])
 
 CPPFLAGS=$ORIG_CPPFLAGS
 AC_SUBST(CPPFLAGS)
@@ -379,7 +386,7 @@ AC_ARG_ENABLE([intf-open],
 	[AC_HELP_STRING([--enable-intf-open],
 			[enable Linux OpenIPMI interface [default=auto]])],
 	[xenable_intf_open=$enableval],
-	[xenable_intf_open=yes])
+	[])
 if test "x$xenable_intf_open" = "xstatic" || test "x$xenable_intf_open" = "xplugin"; then
 	xenable_intf_open=yes
 fi
@@ -422,7 +429,7 @@ AC_ARG_ENABLE([intf-imb],
 	[AC_HELP_STRING([--enable-intf-imb],
 			[enable Intel IMB driver interface [default=auto]])],
 	[xenable_intf_imb=$enableval],
-	[xenable_intf_imb=yes])
+	[])
 if test "x$xenable_intf_imb" = "xstatic" || test "x$xenable_intf_imb" = "xplugin"; then
 	xenable_intf_imb=yes
 fi
@@ -439,7 +446,7 @@ AC_ARG_ENABLE([intf-lipmi],
 	[AC_HELP_STRING([--enable-intf-lipmi],
 			[enable Solaris 9 x86 IPMI interface [default=no]])],
 	[xenable_intf_lipmi=$enableval],
-	[xenable_intf_lipmi=no])
+	[])
 if test "x$xenable_intf_lipmi" = "xstatic" || test "x$xenable_intf_lipmi" = "xplugin"; then
 	xenable_intf_lipmi=yes
 fi
diff -Nurp ipmitool.sav/lib/ipmi_mc.c ipmitool.cvs/lib/ipmi_mc.c
--- ipmitool.sav/lib/ipmi_mc.c	2013-01-15 18:32:54 +0600
+++ ipmitool.cvs/lib/ipmi_mc.c	2013-04-17 22:38:16 +0600
@@ -448,13 +448,15 @@ ipmi_mc_get_deviceid(struct ipmi_intf * 
 			printf("    %s\n", ipm_dev_adtl_dev_support[i]);
 		}
 	}
-	printf("Aux Firmware Rev Info     : \n");
-	/* These values could be looked-up by vendor if documented,
-	 * so we put them on individual lines for better treatment later
-	 */
-	printf("    0x%02x\n    0x%02x\n    0x%02x\n    0x%02x\n",
-		devid->aux_fw_rev[0], devid->aux_fw_rev[1],
-		devid->aux_fw_rev[2], devid->aux_fw_rev[3]);
+	if (rsp->data_len == sizeof(*devid)) {
+		printf("Aux Firmware Rev Info     : \n");
+		/* These values could be looked-up by vendor if documented,
+		 * so we put them on individual lines for better treatment later
+		 */
+		printf("    0x%02x\n    0x%02x\n    0x%02x\n    0x%02x\n",
+			devid->aux_fw_rev[0], devid->aux_fw_rev[1],
+			devid->aux_fw_rev[2], devid->aux_fw_rev[3]);
+	}
 	return 0;
 }
 
diff -Nurp ipmitool.sav/lib/ipmi_picmg.c ipmitool.cvs/lib/ipmi_picmg.c
--- ipmitool.sav/lib/ipmi_picmg.c	2013-04-15 15:12:11 +0600
+++ ipmitool.cvs/lib/ipmi_picmg.c	2013-04-17 22:38:16 +0600
@@ -1095,8 +1095,8 @@ ipmi_picmg_fru_control(struct ipmi_intf 
 	req.msg.data_len = 3;
 
 	msg_data[0] = 0x00;					/* PICMG identifier */
-	msg_data[1] = atoi(argv[0]);				/* FRU-ID	  */
-	msg_data[2] = atoi(argv[1]);				/* control option  */
+	msg_data[1] = strtol(argv[0], NULL, 0);			/* FRU-ID	  */
+	msg_data[2] = strtol(argv[1], NULL, 0);			/* control option  */
 
 	printf("FRU Device Id: %d FRU Control Option: %s\n", msg_data[1],  \
 				val2str( msg_data[2], picmg_frucontrol_vals));
diff -Nurp ipmitool.sav/lib/ipmi_sel.c ipmitool.cvs/lib/ipmi_sel.c
--- ipmitool.sav/lib/ipmi_sel.c	2013-04-15 15:12:11 +0600
+++ ipmitool.cvs/lib/ipmi_sel.c	2013-04-17 22:38:16 +0600
@@ -329,6 +329,7 @@ ipmi_sel_add_entry(struct ipmi_intf * in
 	struct ipmi_rs * rsp;
 	struct ipmi_rq req;
 
+	memset(&req, 0, sizeof(req));
 	req.msg.netfn = IPMI_NETFN_STORAGE;
 	req.msg.cmd = IPMI_CMD_ADD_SEL_ENTRY;
 	req.msg.data = (unsigned char *)rec;
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Ipmitool-devel mailing list
Ipmitool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipmitool-devel

Reply via email to