7126312 Problem with utility/ipmitool
authorLucy Wang <xiu-yan.wang@oracle.com>
Fri, 18 May 2012 10:00:01 -0700
changeset 822 185c3643cbc7
parent 821 5450c885c205
child 823 dc5bf8bfadaa
7126312 Problem with utility/ipmitool
components/ipmitool/patches/7126312.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/ipmitool/patches/7126312.patch	Fri May 18 10:00:01 2012 -0700
@@ -0,0 +1,79 @@
+--- ipmitool-1.8.11.old/lib/helper.c	Wed Feb 25 12:38:52 2009
++++ ipmitool-1.8.11/lib/helper.c	Wed May 16 18:23:19 2012
[email protected]@ -289,19 +289,33 @@
+ {
+ 	struct stat st1, st2;
+ 	FILE * fp;
++	int fd = -1;
+ 
+ 	/* verify existance */
++	errno = 0;
+ 	if (lstat(file, &st1) < 0) {
+-		if (rw) {
++		if (rw && (errno == ENOENT)) {
+ 			/* does not exist, ok to create */
+-			fp = fopen(file, "w");
+-			if (fp == NULL) {
++			fd = open(file,
++			    O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR
++			    | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
++
++			if ( fd == -1 ) {
+ 				lperror(LOG_ERR, "Unable to open file %s "
+ 					"for write", file);
+ 				return NULL;
+ 			}
+-			/* created ok, now return the descriptor */
+-			return fp;
++
++			fp = fdopen(fd, "w");
++			if (fp == NULL) {
++				close(fd);
++				lperror(LOG_ERR, "Unable to open file %s "
++				    "for write", file);
++				return NULL;
++			} else
++				/* created ok, now return the descriptor */
++				return fp;
++
+ 		} else {
+ 			lprintf(LOG_ERR, "File %s does not exist", file);
+ 			return NULL;
[email protected]@ -322,7 +336,7 @@
+ 
+ 	/* it exists - only regular files, not links */
+ 	if (S_ISREG(st1.st_mode) == 0) {
+-		lprintf(LOG_ERR, "File %s has invalid mode: %d",
++		lprintf(LOG_ERR, "File %s has invalid mode: %#o",
+ 			file, st1.st_mode);
+ 		return NULL;
+ 	}
[email protected]@ -347,10 +361,18 @@
+ 		return NULL;
+ 	}
+ 
++	/* verify dev */
++	if (st1.st_dev != st2.st_dev) {
++		lprintf(LOG_ERR, "File %s has invalid dev: %lu != %lu",
++			file, (ulong_t)st1.st_dev, (ulong_t)st2.st_dev);
++		fclose(fp);
++		return NULL;
++	}
++
+ 	/* verify inode */
+ 	if (st1.st_ino != st2.st_ino) {
+-		lprintf(LOG_ERR, "File %s has invalid inode: %d != %d",
+-			file, st1.st_ino, st2.st_ino);
++		lprintf(LOG_ERR, "File %s has invalid inode: %lu != %lu",
++			file, (ulong_t)st1.st_ino, (ulong_t)st2.st_ino);
+ 		fclose(fp);
+ 		return NULL;
+ 	}
[email protected]@ -427,7 +449,6 @@
+ #endif
+ 
+ 	chdir("/");
+-	umask(0);
+ 
+ 	for (fd=0; fd<64; fd++) {
+ 		if (fd != intf->fd)