pkgid = zpm_findpkg(&zpm, pkgstr);
if (pkgid) {
if (zpm_script_hash(&zpm, pkgid, phase, hash)) {
- rv = zpm_extract(&zpm, hash, script, 0700);
+ /* since the script file name doesn't really
+ * mean anything, pass in the phase as arg 0
+ */
- /* perhaps also pass in the phase name? or ENV? */
/* TODO sanitize environment ? */
- args[0] = script;
+ args[0] = phase;
args[1] = pkgid;
args[2] = 0;
args[3] = 0;
if (argn + 1 <= ac) {
args[2] = av[argn+1];
}
+
if (rootdir) {
if (chdir(rootdir) == -1) {
perror("can not chdir to rootdir");
*/
fprintf(stderr, "support for chroot equivalent not supported on this OS\n");
} else {
- fprintf(stderr, "unable to chroot as non root use\n");
+ fprintf(stderr, "unable to chroot as non root user\n");
}
} else {
if (chdir("/") == -1) {
exit(EXIT_FAILURE);
}
}
+
+ if (!zpm_extract(&zpm, hash, script, 0700)) {
+ fprintf(stderr, "unable to extract script");
+ exit(EXIT_FAILURE);
+ }
+
rv = run(script, args, output, &status);
if (rv) {
// cat(output);
pkgid, rv);
}
/* TODO log output */
- unlink(script);
- unlink(output);
+ if (script) {
+ unlink(script);
+ }
+ if (output) {
+ unlink(output);
+ }
if (rv) {
failures++;
}