summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2009-08-04 11:08:19 +0300
committerTimo Teras <timo.teras@iki.fi>2009-08-04 11:08:19 +0300
commit8c19869c2910332913b5a4f341dbe612c691782e (patch)
treeae16c6a95b75ace756eaf4c38abc2fadb4aac3d1
parent6f8526da3e7fb055dc3ee640b943906e517f63f1 (diff)
downloadapk-tools-8c19869c2910332913b5a4f341dbe612c691782e.tar.bz2
apk-tools-8c19869c2910332913b5a4f341dbe612c691782e.tar.xz
db: return hard error if repository opening fails
otherwise we can accept unsigned repositories, and install bad packages.
-rw-r--r--src/database.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/database.c b/src/database.c
index 8676466..9a09ecd 100644
--- a/src/database.c
+++ b/src/database.c
@@ -883,7 +883,7 @@ int apk_db_open(struct apk_database *db, const char *root, unsigned int flags)
struct apk_repository_url *repo = NULL;
struct stat64 st;
apk_blob_t blob;
- int r;
+ int r, rr = 0;
memset(db, 0, sizeof(*db));
apk_hash_init(&db->available.names, &pkg_name_hash_ops, 1000);
@@ -978,22 +978,26 @@ int apk_db_open(struct apk_database *db, const char *root, unsigned int flags)
apk_repos = "etc/apk/repositories";
blob = apk_blob_from_file(db->root_fd, apk_repos);
if (!APK_BLOB_IS_NULL(blob)) {
- apk_blob_for_each_segment(blob, "\n",
- apk_db_add_repository, db);
+ r = apk_blob_for_each_segment(
+ blob, "\n",
+ apk_db_add_repository, db);
+ rr = r ?: rr;
free(blob.ptr);
}
}
}
if (!(flags & APK_OPENF_NO_REPOS)) {
- list_for_each_entry(repo, &apk_repository_list.list, list)
- apk_db_add_repository(db, APK_BLOB_STR(repo->url));
+ list_for_each_entry(repo, &apk_repository_list.list, list) {
+ r = apk_db_add_repository(db, APK_BLOB_STR(repo->url));
+ rr = r ?: rr;
+ }
if (apk_flags & APK_UPDATE_CACHE)
apk_db_index_write_nr_cache(db);
}
- return 0;
+ return rr;
ret_errno:
r = -errno;