# HG changeset patch # User Lucy Wang # Date 1337360401 25200 # Node ID 185c3643cbc794e00350988298b2dc5de904e1b8 # Parent 5450c885c20501ab761267a90f1eedf612b85c71 7126312 Problem with utility/ipmitool diff -r 5450c885c205 -r 185c3643cbc7 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 +@@ -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)