.gitignore: Use full paths for some ignored files.
[libguestfs.git] / src / appliance.c
index 1740dfc..1b6b505 100644 (file)
@@ -320,7 +320,6 @@ check_for_cached_appliance (guestfs_h *g,
   snprintf (filename, len, "%s/checksum", cachedir);
 
   (void) mkdir (cachedir, 0755);
-  (void) utime (cachedir, NULL);
 
   /* See if the cache directory exists and passes some simple checks
    * to make sure it has not been tampered with.
@@ -329,21 +328,23 @@ check_for_cached_appliance (guestfs_h *g,
   if (lstat (cachedir, &statbuf) == -1)
     return 0;
   if (statbuf.st_uid != uid) {
-    error (g, _("security: cached appliance %s is not owned by UID %d\n"),
+    error (g, _("security: cached appliance %s is not owned by UID %d"),
            filename, uid);
     return -1;
   }
   if (!S_ISDIR (statbuf.st_mode)) {
-    error (g, _("security: cached appliance %s is not a directory (mode %o)\n"),
+    error (g, _("security: cached appliance %s is not a directory (mode %o)"),
            filename, statbuf.st_mode);
     return -1;
   }
   if ((statbuf.st_mode & 0022) != 0) {
-    error (g, _("security: cached appliance %s is writable by group or other (mode %o)\n"),
+    error (g, _("security: cached appliance %s is writable by group or other (mode %o)"),
            cachedir, statbuf.st_mode);
     return -1;
   }
 
+  (void) utime (cachedir, NULL);
+
   garbage_collect_appliances (cachedir);
 
   /* Try to open and acquire a lock on the checksum file. */
@@ -563,18 +564,23 @@ hard_link_to_cached_appliance (guestfs_h *g,
     perrorf (g, "link: %s %s", filename, *kernel);
     goto error;
   }
+  (void) lutimes (filename, NULL); /* lutimes because it's a symlink */
+
   snprintf (filename, len, "%s/initrd", cachedir);
   (void) unlink (*initrd);
   if (link (filename, *initrd) == -1) {
     perrorf (g, "link: %s %s", filename, *initrd);
     goto error;
   }
+  (void) utime (filename, NULL);
+
   snprintf (filename, len, "%s/root", cachedir);
   (void) unlink (*appliance);
   if (link (filename, *appliance) == -1) {
     perrorf (g, "link: %s %s", filename, *appliance);
     goto error;
   }
+  (void) utime (filename, NULL);
 
   return 0;