Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
db: only open the db readonly when write is not needed
Baptiste Daroussin committed 1 month ago
commit 6a93ea16ee09d5cb7236f7d9b0d4d1cd46f6f397
parent 44e68ad
10 files changed +14 -12
modified libpkg/pkg.h.in
@@ -174,7 +174,8 @@ typedef enum {
typedef enum {
	PKGDB_DEFAULT = 0,
	PKGDB_REMOTE,
-
	PKGDB_MAYBE_REMOTE
+
	PKGDB_MAYBE_REMOTE,
+
	PKGDB_DEFAULT_READONLY,
} pkgdb_t;

typedef enum {
modified libpkg/pkgdb.c
@@ -1107,8 +1107,9 @@ retry:
		 * Immutable mode bypasses WAL/SHM entirely and reads
		 * directly from the main database file.
		 */
-
		if (!create && faccessat(dbdirfd, "local.sqlite",
-
		    W_OK, AT_EACCESS) != 0) {
+
		if (!create && (type == PKGDB_DEFAULT_READONLY ||
+
		    faccessat(dbdirfd, "local.sqlite",
+
		    W_OK, AT_EACCESS) != 0)) {
			ret = sqlite3_open_v2(
			    "file:/local.sqlite?immutable=1",
			    &db->sqlite,
modified src/audit.c
@@ -346,7 +346,7 @@ exec_audit(int argc, char **argv)
			return (EXIT_FAILURE);
		}

-
		if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
+
		if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK) {
			pkg_audit_free(audit);
			pkghash_destroy(check);
			return (EXIT_FAILURE);
modified src/create.c
@@ -60,7 +60,7 @@ pkg_create_matches(int argc, char **argv, match_t match, struct pkg_create *pc)
	bool foundone;
	vec_t(struct pkg *) pkglist = vec_init();

-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK) {
		pkgdb_close(db);
		return (EXIT_FAILURE);
	}
modified src/info.c
@@ -352,7 +352,7 @@ exec_info(int argc, char **argv)
		return (EXIT_FAILURE);
	} else if (ret != EPKG_OK)
		return (EXIT_FAILURE);
-
	ret = pkgdb_open(&db, PKGDB_DEFAULT);
+
	ret = pkgdb_open(&db, PKGDB_DEFAULT_READONLY);
	if (ret != EPKG_OK)
		return (EXIT_FAILURE);

modified src/query.c
@@ -1137,7 +1137,7 @@ exec_query(int argc, char **argv)
		goto cleanup;
	}

-
	ret = pkgdb_open(&db, PKGDB_DEFAULT);
+
	ret = pkgdb_open(&db, PKGDB_DEFAULT_READONLY);
	if (ret != EPKG_OK) {
		retcode = EXIT_FAILURE;
		goto cleanup;
modified src/shlib.c
@@ -189,7 +189,7 @@ exec_shlib(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	retcode = pkgdb_open(&db, PKGDB_DEFAULT);
+
	retcode = pkgdb_open(&db, PKGDB_DEFAULT_READONLY);
	if (retcode != EPKG_OK)
		return (EXIT_FAILURE);

modified src/updating.c
@@ -248,7 +248,7 @@ exec_updating(int argc, char **argv)
		if (strlen(date) != 8 || strspn(date, "0123456789") != 8)
			err(EXIT_FAILURE, "Invalid date format");

-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
+
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK)
		return (EXIT_FAILURE);

	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
modified src/version.c
@@ -413,7 +413,7 @@ do_source_index(unsigned int opt, char limchar, char *pattern, match_t match,
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
+
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK)
		return (EXIT_FAILURE);

	index = hash_indexfile(indexfile);
@@ -742,7 +742,7 @@ do_source_ports(unsigned int opt, char limchar, char *pattern, match_t match,
	if (portsfd == -1)
		err(EXIT_FAILURE, "Cannot open '%s'", portsdir);

-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
+
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK)
		return (EXIT_FAILURE);

	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
modified src/which.c
@@ -103,7 +103,7 @@ exec_which(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) {
+
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK) {
		return (EXIT_FAILURE);
	}