Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge pull request #46 from dnaeon/master
Julien Laffaye committed 14 years ago
commit 519f6000aeb44e269853a1b998065e854ec60a28
parent 54d9a45
15 files changed +92 -66
modified libpkg/fetch.c
@@ -28,10 +28,9 @@ pkg_fetch_file(const char *url, const char *dest)
	char buf[10240];
	int retcode = EPKG_OK;

-
	if ((fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC, 0644)) == -1) {
+
	if ((fd = open(dest, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, 0600)) == -1) {
		EMIT_ERRNO("open", dest);
-
		retcode = EPKG_FATAL;
-
		goto cleanup;
+
		return(EPKG_FATAL);
	}

	while (remote == NULL) {
modified pkg/add.c
@@ -43,7 +43,7 @@ exec_add(int argc, char **argv)

	if (argc < 2) {
		usage_add();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
@@ -52,8 +52,8 @@ exec_add(int argc, char **argv)
	}

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
-
		retcode = EPKG_FATAL;
-
		goto cleanup;
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	for (i = 1; i < argc; i++) {
@@ -71,9 +71,8 @@ exec_add(int argc, char **argv)
		}
	}

-
	cleanup:
	pkgdb_close(db);

-
	return (retcode == EPKG_OK ? 0 : 1);
+
	return (retcode == EPKG_OK ? EX_OK : 1);
}

modified pkg/autoremove.c
@@ -46,14 +46,14 @@ exec_autoremove(int argc, char **argv)
	struct pkgdb *db = NULL;
	struct pkgdb_it *it;
	struct pkg *pkg = NULL;
-
	int retcode = 0;
+
	int retcode = EPKG_OK;
	int64_t oldsize = 0, newsize = 0;
	char size[7];

	(void) argv;
	if (argc != 1) {
		usage_autoremove();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
@@ -62,11 +62,13 @@ exec_autoremove(int argc, char **argv)
	}

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
-
		return (1);
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	if ((it = pkgdb_query_autoremove(db)) == NULL) {
-
		retcode = 1;
+
		pkg_error_warn("can not query database");
+
		retcode = EPKG_FATAL;
		goto cleanup;
	}

@@ -100,7 +102,10 @@ exec_autoremove(int argc, char **argv)
		printf("Aborted\n");
	}

-
	pkgdb_compact(db);
+
	if (pkgdb_compact(db) != EPKG_OK) { 
+
		pkg_error_warn("can not compact database");
+
		retcode = EPKG_FATAL;
+
	}

	cleanup:
	pkg_free(pkg);
modified pkg/backup.c
@@ -1,4 +1,5 @@
#include <pkg.h>
+
#include <sysexits.h>

#include "backup.h"

@@ -17,21 +18,23 @@ exec_backup(int argc, char **argv)

	if (argc < 1 || argc > 2 || argv[1][0] != '-') {
		usage_backup();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (argc == 2)
		dest = argv[2];

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
-
		pkgdb_close(db);
-
		return (EPKG_FATAL);
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	if (argv[1][1] == 'd') {
		printf("Dumping database...");
		fflush(stdout);
-
		pkgdb_dump(db, dest);
+
		if (pkgdb_dump(db, dest) == EPKG_FATAL)
+
			return (EPKG_FATAL);
+

		printf("Done\n");
	}

@@ -39,5 +42,5 @@ exec_backup(int argc, char **argv)
		fprintf(stderr, "not yet implemented\n");
	}

-
	return (0);
+
	return (EPKG_OK);
}
modified pkg/create.c
@@ -22,7 +22,7 @@ usage_create(void)
static int
pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const char *outdir, const char *rootdir)
{
-
	int i, ret = 0, retcode = 0;
+
	int i, ret = EPKG_OK, retcode = EPKG_OK;
	struct pkgdb *db = NULL;
	struct pkgdb_it *it = NULL;
	struct pkg *pkg = NULL;
@@ -32,7 +32,7 @@ pkg_create_matches(int argc, char **argv, match_t match, pkg_formats fmt, const

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkgdb_close(db);
-
		return (-1);
+
		return (EX_IOERR);
	}

	if (match != MATCH_ALL) {
@@ -70,7 +70,7 @@ cleanup:
	pkgdb_it_free(it);
	pkgdb_close(db);

-
	return retcode;
+
	return (retcode);
}

/*
modified pkg/delete.c
@@ -92,5 +92,6 @@ exec_delete(int argc, char **argv)
	pkgdb_it_free(it);
	pkgdb_close(db);
	pkg_jobs_free(jobs);
-
	return (retcode == EPKG_OK ? 0 : 1);
+

+
	return (retcode == EPKG_OK ? EX_OK : 1);
}
modified pkg/info.c
@@ -104,8 +104,7 @@ exec_info(int argc, char **argv)
	match_t match = MATCH_EXACT;
	char *pkgname, *pkgversion;
	int ch;
-
	int ret;
-
	int retcode = 0;
+
	int ret = EPKG_OK, retcode = EPKG_OK;
	bool gotone = false;
	int i;
	int sign = 0;
@@ -168,13 +167,14 @@ exec_info(int argc, char **argv)
	if (argc == 0 && match != MATCH_ALL) {
		/* which -O bsd.*.mk always execpt clean output */
		if (opt & INFO_ORIGIN_SEARCH)
-
			return (0);
+
			return (EX_OK);
		usage_info();
		return (EX_USAGE);
	}

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
-
		return (-1);
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	i = 0;
@@ -183,7 +183,8 @@ exec_info(int argc, char **argv)
		/* if the argument is a file then query directly the file */
		if (argc > 0 && access(argv[i], F_OK) == 0) {
			if (pkg_open(&pkg, argv[i]) != EPKG_OK) {
-
				return (-1);
+
				warnx("can not read package %s", argv[i]);
+
				return (EX_IOERR);
			}
			print_info(pkg, opt);
			i++;
@@ -238,7 +239,8 @@ exec_info(int argc, char **argv)
		}

		if ((it = pkgdb_query(db, pkgname, match)) == NULL) {
-
			return (-1);
+
			pkg_error_warn("can not query database");
+
			return (EX_IOERR);
		}

		/* this is place for compatibility hacks */
@@ -275,7 +277,7 @@ exec_info(int argc, char **argv)
				}
			}
			if (opt & INFO_EXISTS)
-
				retcode = 0;
+
				retcode = EPKG_OK;
			else
				print_info(pkg, opt);
		}
@@ -283,7 +285,7 @@ exec_info(int argc, char **argv)
			retcode = -1;
		}

-
		if (retcode == 0 && !gotone && match != MATCH_ALL)
+
		if (retcode == EPKG_OK && !gotone && match != MATCH_ALL)
			retcode = EX_SOFTWARE;

		pkgdb_it_free(it);
modified pkg/install.c
@@ -30,7 +30,7 @@ exec_install(int argc, char **argv)

	if (argc < 2) {
		usage_install();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
@@ -39,8 +39,8 @@ exec_install(int argc, char **argv)
	}

	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
-
		retcode = EPKG_FATAL;
-
		goto cleanup;
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	if (pkg_jobs_new(&jobs, PKG_JOBS_INSTALL, db) != EPKG_OK) {
@@ -70,6 +70,6 @@ exec_install(int argc, char **argv)
	pkgdb_close(db);
	pkg_jobs_free(jobs);

-
	return (retcode == EPKG_OK ? 0 : 1);
+
	return (retcode == EPKG_OK ? EX_OK : 1);
}

modified pkg/register.c
@@ -71,8 +71,7 @@ exec_register(int argc, char **argv)
	bool legacy = false;

	int i;
-
	int retcode = 0;
-
	int ret = 0;
+
	int ret = EPKG_OK, retcode = EPKG_OK;

	if (geteuid() != 0) {
		warnx("registering packages can only be done as root");
@@ -106,10 +105,15 @@ exec_register(int argc, char **argv)
			default:
				printf("%c\n", ch);
				usage_register();
-
				return (-1);
+
				return (EX_USAGE);
		}
	}

+
	if (ret != 0) {
+
		pkg_error_warn("can not parse arguments");
+
		return (EX_USAGE);
+
	}
+

	if (plist == NULL)
		errx(EX_USAGE, "missing -f flag");

@@ -126,7 +130,8 @@ exec_register(int argc, char **argv)

	snprintf(fpath, MAXPATHLEN, "%s/+MANIFEST", mdir);
	if ((ret = pkg_load_manifest_file(pkg, fpath)) != EPKG_OK) {
-
		return (EX_SOFTWARE);
+
		pkg_error_warn("can not parse manifest %s", fpath);
+
		return (EX_IOERR);
	}

	snprintf(fpath, MAXPATHLEN, "%s/+DESC", mdir);
@@ -175,15 +180,17 @@ exec_register(int argc, char **argv)

	ret += ports_parse_plist(pkg, plist);

-
	if (ret != 0) {
-
		return (-1);
+
	if (ret != EPKG_OK) {
+
		pkg_error_warn("can not parse plist file");
+
		return (EX_IOERR);
	}

	if (plist != NULL)
		free(plist);

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
-
		return (-1);
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	if (heuristic)
@@ -195,12 +202,14 @@ exec_register(int argc, char **argv)
	}

	if (pkgdb_register_pkg(db, pkg) != EPKG_OK) {
-
		retcode = 1;
+
		pkg_error_warn("can not register package");
+
		retcode = EPKG_FATAL;
	}

	pkgdb_register_finale(db, ret);
	if (ret != EPKG_OK) {
-
		retcode = 1;
+
		pkg_error_warn("can not register package");
+
		retcode = EPKG_FATAL;
	}

	if (pkg_get(pkg, PKG_MESSAGE) != NULL && !legacy)
modified pkg/repo.c
@@ -40,7 +40,7 @@ progress(struct pkg *pkg, void *data)
static int
password_cb(char *buf, int size, int rwflag, void *key)
{
-
	int len;
+
	int len = 0;
	char pass[BUFSIZ];
	(void)rwflag;
	(void)key;
@@ -57,13 +57,13 @@ password_cb(char *buf, int size, int rwflag, void *key)
	memcpy(buf, pass, len);
	memset(pass, 0, BUFSIZ);

-
	return len;
+
	return (len);
}

int
exec_repo(int argc, char **argv)
{
-
	int ret;
+
	int retcode = EPKG_OK;
	int pos = 0;
	char *rsa_key;

@@ -73,13 +73,15 @@ exec_repo(int argc, char **argv)
	}

	printf("Generating repo.sqlite in %s:  ", argv[1]);
-
	ret = pkg_create_repo(argv[1], progress, &pos);
+
	retcode = pkg_create_repo(argv[1], progress, &pos);

-
	if (ret == EPKG_OK)
+
	if (retcode != EPKG_OK)
+
		pkg_error_warn("can not create repository");
+
	else
		printf("\bDone!\n");

	rsa_key = (argc == 3) ? argv[2] : NULL;
	pkg_finish_repo(argv[1], password_cb, rsa_key);

-
	return (ret);
+
	return (retcode);
}
modified pkg/search.c
@@ -20,7 +20,7 @@ exec_search(int argc, char **argv)
{
	char *pattern;
	match_t match = MATCH_EXACT;
-
	int  retcode = 0;
+
	int  retcode = EPKG_OK;
	unsigned int field = REPO_SEARCH_NAME;
	int ch;
	char size[7];
modified pkg/update.c
@@ -34,14 +34,14 @@ exec_update(int argc, char **argv)
	char url[MAXPATHLEN];
	const char *packagesite = NULL;
	char *tmp = NULL;
-
	int retcode = 0;
+
	int retcode = EPKG_OK;
	struct archive *a;
	struct archive_entry *ae;

	(void)argv;
	if (argc != 1) {
		usage_update();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
@@ -51,7 +51,7 @@ exec_update(int argc, char **argv)

	if ((packagesite = pkg_config("PACKAGESITE")) == NULL) {
		warnx("unable to determine PACKAGESITE");
-
		return (1);
+
		return (EPKG_FATAL);
	}

	if (packagesite[strlen(packagesite) - 1] == '/')
@@ -62,7 +62,8 @@ exec_update(int argc, char **argv)
	tmp = mktemp(strdup("/tmp/repo.txz.XXXXXX"));

	if (pkg_fetch_file(url, tmp) != EPKG_OK) {
-
		retcode = 1;
+
		pkg_error_warn("can not fetch %s", url);
+
		retcode = EPKG_FATAL;
		goto cleanup;
	}

modified pkg/upgrade.c
@@ -27,7 +27,7 @@ exec_upgrade(int argc, char **argv)
	struct pkgdb *db = NULL;
	struct pkgdb_it *it;
	struct pkg *pkg = NULL;
-
	int retcode = 0;
+
	int retcode = EPKG_OK;
	int64_t oldsize = 0, newsize = 0;
	int64_t dlsize = 0;
	char size[7];
@@ -35,7 +35,7 @@ exec_upgrade(int argc, char **argv)
	(void) argv;
	if (argc != 1) {
		usage_upgrade();
-
		return (-1);
+
		return (EX_USAGE);
	}

	if (geteuid() != 0) {
@@ -44,10 +44,13 @@ exec_upgrade(int argc, char **argv)
	}

	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
-
		return (1);
+
		pkg_error_warn("can not open database");
+
		return (EX_IOERR);
	}

	if ((it = pkgdb_query_upgrades(db)) == NULL) {
+
		pkg_error_warn("can not query database");
+
		retcode = EPKG_FATAL;
		goto cleanup;
	}

@@ -62,6 +65,8 @@ exec_upgrade(int argc, char **argv)
	pkgdb_it_free(it);

	if ((it = pkgdb_query_downgrades(db)) == NULL) {
+
		pkg_error_warn("can not query database");
+
		retcode = EPKG_FATAL;
		goto cleanup;
	}

@@ -75,7 +80,6 @@ exec_upgrade(int argc, char **argv)
	printf("\n");
	pkgdb_it_free(it);

-

	if (oldsize > newsize) {
		newsize *= -1;
		humanize_number(size, sizeof(size), oldsize - newsize, "B", HN_AUTOSCALE, 0);
modified pkg/version.c
@@ -84,5 +84,5 @@ int exec_version(int argc, char **argv)
		}
	}

-
	return 0;
+
	return (EPKG_OK);
}
modified pkg/which.c
@@ -26,8 +26,7 @@ exec_which(int argc, char **argv)
	struct pkg *pkg = NULL;
	char pathabs[MAXPATHLEN];
	char pathabsdir[MAXPATHLEN];
-
	int retcode = 1;
-
	int ret;
+
	int ret = EPKG_OK, retcode = EPKG_OK;

	if (argc != 2) {
		usage_which();
@@ -36,25 +35,27 @@ exec_which(int argc, char **argv)

	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
		pkgdb_close(db);
-
		return (-1);
+
		return (EX_IOERR);
	}

	realpath(dirname(argv[1]), pathabsdir);
	snprintf(pathabs, sizeof(pathabs), "%s/%s", pathabsdir, basename(argv[1]));

	if ((it = pkgdb_query_which(db, pathabs)) == NULL) {
-
		return (-1);
+
		pkg_error_warn("can not query database");
+
		return (EX_IOERR);
	}

	if (( ret = pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC)) == EPKG_OK) {
-
		retcode = 0;
+
		retcode = EPKG_OK;
		printf("%s was installed by package %s-%s\n", pathabs, pkg_get(pkg, PKG_NAME),
			   pkg_get(pkg, PKG_VERSION));
	} else if (ret != EPKG_END) {
-
		retcode = -1;
+
		pkg_error_warn("can not iterate over results");
+
		retcode = EPKG_WARN;
	} else {
		printf("%s was not found in the database\n", pathabs);
-
		retcode = -1;
+
		retcode = EPKG_WARN;
	}
		
	pkg_free(pkg);