*/
void usage(void) {
- fprintf(stderr, "usage: db hash file\n");
+ fprintf(stderr, "usage: zpm script ...\n");
}
int setdir(char *rootdir) {
+ if (chdir(rootdir ? rootdir : "/") == -1) {
+ perror("can not chdir to rootdir");
+ return 0;
+ }
+#if 0
if (rootdir && strcmp(rootdir, "/")) {
- if (chdir(rootdir) == -1) {
- perror("can not chdir to rootdir");
- return 0;
- }
if (geteuid() == 0) {
/* chroot is deprecated, and not in posix. need to use
* OS/kernel specific code.
} else {
fprintf(stderr, "unable to chroot as non root user\n");
}
- } else {
- if (chdir("/") == -1) {
- perror("can not chdir to /");
- return 0;
- }
}
+#endif
return 1;
}
char *script = "/var/tmp/zpm-script";
char *output = "/var/tmp/zpm-script.out";
char *phase = 0;
+ char *envvar = 0;
int quiet = 0;
int scriptishash = 0;
int mode = RUN;
- int all = 0;
if (getenv("ZPMDB")) {
db = getenv("ZPMDB");
rootdir = getenv("ZPM_ROOT_DIR");
+ envvar = getenv("ZPM_SCRIPT_FILE");
+ if (envvar) {
+ script = envvar;
+ }
+
+ envvar = getenv("ZPM_SCRIPT_OUTPUT");
+ if (envvar) {
+ output = envvar;
+ }
+
/* run, set, show, hash */
/* set -S, if -H set the hash, output hash, unless quiet
* show: -o, or stdout,
case 'l': mode = LIST; break;
case 'R': rootdir = optarg; break;
case 'F': required = 1; break;
- case 'a': all = 1; break;
case 'h': scriptishash = 1; break;
case 'o': output = optarg; break;
case 'S': script = optarg; break;
- case 'q': quiet = 1;
+ case 'q': quiet = 1; break;
default:
usage();
if (!zpm_extract(&zpm, hash, script, 0700)) {
fprintf(stderr, "unable to extract script");
fail = HARD;
+ zpm_note_add(&zpm, pkgid, NULL, hash, "unable to extract %s script", phase);
goto cleanup;
}
if (rv) {
fprintf(stderr, "package %s script failed with code %d\n",
pkgid, rv);
+
+ zpm_import(&zpm, output, 0, hash);
+ zpm_note_add(&zpm, pkgid, NULL, hash, "package %s script failed with code %d", phase, rv);
+
fail = HARD;
}
zpm_close(&zpm);
return (fail == HARD || (required && fail)) ? EXIT_FAILURE : 0;
-
}