X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fappliance.c;h=ef724be5b4aeb8d0aef1aeeb634fca925be6d835;hb=2b26c7f721fc8ed2e6f64963289981ac286c02aa;hp=1740dfcf2e7d65a79c65110d3049d7328be98279;hpb=4beb2844091310012b5e28971707397d1d51d833;p=libguestfs.git diff --git a/src/appliance.c b/src/appliance.c index 1740dfc..ef724be 100644 --- a/src/appliance.c +++ b/src/appliance.c @@ -308,7 +308,7 @@ check_for_cached_appliance (guestfs_h *g, uid_t uid, char **kernel, char **initrd, char **appliance) { - const char *tmpdir = guestfs_tmpdir (); + const char *tmpdir = guestfs___persistent_tmpdir (); /* len must be longer than the length of any pathname we can * generate in this function. @@ -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. */ @@ -418,7 +419,7 @@ build_supermin_appliance (guestfs_h *g, if (g->verbose) guestfs___print_timestamped_message (g, "begin building supermin appliance"); - const char *tmpdir = guestfs_tmpdir (); + const char *tmpdir = guestfs___persistent_tmpdir (); /* len must be longer than the length of any pathname we can * generate in this function. @@ -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;