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.
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.
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. */
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.
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;