components/ipmitool/patches/7126312.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Mon, 10 Dec 2012 13:30:55 -0800
changeset 1077 17d2fc72ab7f
parent 822 185c3643cbc7
permissions -rw-r--r--
Close of build 11.

--- 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
@@ -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;
@@ -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;
 	}
@@ -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;
 	}
@@ -427,7 +449,6 @@
 #endif
 
 	chdir("/");
-	umask(0);
 
 	for (fd=0; fd<64; fd++) {
 		if (fd != intf->fd)