Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Allow pkg action -n (dry-run mode) to succeed without root privs
Matthew Seaman committed 13 years ago
commit b7e693762a97e5ee2049c5a69a89fff3bf17f800
parent df2f853
6 files changed +45 -11
modified libpkg/pkg_jobs.c
@@ -274,7 +274,7 @@ pkg_jobs_solve(struct pkg_jobs *j)
{
	bool dry_run = false;

-
	if ((j->flags & PKG_FLAG_DRY_RUN) != PKG_FLAG_DRY_RUN)
+
	if ((j->flags & PKG_FLAG_DRY_RUN) == PKG_FLAG_DRY_RUN)
		dry_run = true;

	if (!dry_run && pkgdb_obtain_lock(j->db) != EPKG_OK)
modified pkg/autoremove.c
@@ -1,6 +1,7 @@
/*-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -80,8 +81,12 @@ exec_autoremove(int argc, char **argv)
		return (EX_USAGE);
	}

-
	retcode = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE,
-
			       PKGDB_DB_LOCAL);
+
	if (dry_run) 
+
		retcode = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_LOCAL);
+
	else
+
		retcode = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE,
+
				       PKGDB_DB_LOCAL);
+

	if (retcode == EPKG_ENOACCESS) {
		warnx("Insufficient privilege to autoremove packages");
		return (EX_NOPERM);
modified pkg/clean.c
@@ -1,5 +1,6 @@
/*-
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -218,7 +219,7 @@ exec_clean(int argc, char **argv)
	char		*repopath;
	bool		 dry_run = false;
	bool		 yes;
-
	int		 retcode = EX_SOFTWARE;
+
	int		 retcode;
	int		 ret;
	int		 ch;

@@ -251,6 +252,21 @@ exec_clean(int argc, char **argv)
	paths[0] = __DECONST(char*, cachedir);
	paths[1] = NULL;

+
	retcode = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_REPO);
+

+
	if (retcode == EPKG_ENOACCESS) {
+
		warnx("Insufficient privilege to clean old packages");
+
		return (EX_NOPERM);
+
	} else if (retcode == EPKG_ENODB) {
+
		warnx("No package database installed.  Nothing to do!");
+
		return (EX_OK);
+
	} else if (retcode != EPKG_OK) {
+
		warnx("Error accessing package database");
+
		return (EX_SOFTWARE);
+
	}
+

+
	retcode = EX_SOFTWARE;
+

	if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) {
		goto cleanup;
	}
modified pkg/delete.c
@@ -2,6 +2,7 @@
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -110,8 +111,12 @@ exec_delete(int argc, char **argv)
		return (EX_USAGE);
	}

-
	retcode = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE,
-
			       PKGDB_DB_LOCAL);
+
	if (dry_run)
+
		retcode = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_LOCAL);
+
	else
+
		retcode = pkgdb_access(PKGDB_MODE_READ|PKGDB_MODE_WRITE,
+
				       PKGDB_DB_LOCAL);
+

	if (retcode == EPKG_ENODB) {
		warnx("No packages installed.  Nothing to do!");
		return (EX_OK);
modified pkg/install.c
@@ -2,6 +2,7 @@
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -120,11 +121,17 @@ exec_install(int argc, char **argv)
		return (EX_USAGE);
	}

-
	retcode = pkgdb_access(PKGDB_MODE_READ  |
-
			       PKGDB_MODE_WRITE |
-
			       PKGDB_MODE_CREATE,
-
			       PKGDB_DB_LOCAL   |
-
			       PKGDB_DB_REPO);
+
	if (dry_run)
+
		retcode = pkgdb_access(PKGDB_MODE_READ,
+
				       PKGDB_DB_LOCAL   |
+
				       PKGDB_DB_REPO);
+
	else
+
		retcode = pkgdb_access(PKGDB_MODE_READ  |
+
				       PKGDB_MODE_WRITE |
+
				       PKGDB_MODE_CREATE,
+
				       PKGDB_DB_LOCAL   |
+
				       PKGDB_DB_REPO);
+
	
	if (retcode == EPKG_ENOACCESS) {
		warnx("Insufficient privilege to install packages");
		return (EX_NOPERM);
modified pkg/upgrade.c
@@ -1,5 +1,6 @@
/*-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
+
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without