]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
lib/file: Paranoid clear of old cached values
authorOliver Kurth <okurth@vmware.com>
Mon, 26 Feb 2018 20:29:07 +0000 (12:29 -0800)
committerOliver Kurth <okurth@vmware.com>
Mon, 26 Feb 2018 20:29:07 +0000 (12:29 -0800)
Rare, but an app might toggle addPid; cover this.  Also optimize the
cache update.

open-vm-tools/lib/file/fileTempPosix.c

index 22c627bd3fac4c91fd978977ae556d471814567f..a3cca3178c271b8c657379833fb6ef23260e9e4d 100644 (file)
@@ -566,22 +566,30 @@ FileGetSafeTmpDir(Bool useConf,  // IN: Use configuration variables?
    }
 
    if (tmpDir != NULL) {
-      /*
-       * We have successfully created a temporary directory, remember it for
-       * future calls.
-       */
-
-      testSafeDir = Util_SafeStrdup(tmpDir);
-
-      if (addPid) {
-         Posix_Free(cachedPidDir);
-         cachedPidDir = testSafeDir;
+      char *newDir = Util_SafeStrdup(tmpDir);
+
+      if (euid == cachedEuid) {
+         if (addPid) {
+            Posix_Free(cachedPidDir);
+            cachedPidDir = newDir;
+         } else {
+            Posix_Free(cachedDir);
+            cachedDir = newDir;
+         }
       } else {
+         Posix_Free(cachedPidDir);
          Posix_Free(cachedDir);
-         cachedDir = testSafeDir;
-      }
 
-      cachedEuid = euid;
+         if (addPid) {
+            cachedPidDir = newDir;
+            cachedDir = NULL;
+         } else {
+            cachedDir = newDir;
+            cachedPidDir = NULL;
+         }
+
+         cachedEuid = euid;
+      }
    }
 
 exit: