redis: Update from 4.0.8 to 4.0.9
[termux-packages] / disabled-packages / pacman / ensure-matching-database-and-package-version.patch
CommitLineData
3888e4cd
FD
1From deac9731884a83ad91eab9f27b288f406f56c87b Mon Sep 17 00:00:00 2001
2From: Levente Polyak <anthraxx@archlinux.org>
3Date: Sat, 18 Jul 2015 17:58:23 +0200
4Subject: [PATCH] ensure matching database and package version
5
6While loading each package ensure that the internal version matches the
7expected database version to avoid the possibility to circumvent the
8version check.
9This issue can be used by an attacker to trick the software into
10installing an older version. The behavior can be exploited by a
11man-in-the-middle attack through specially crafted database tarball
12containing a higher version, yet actually delivering an older and
13vulnerable version, which was previously shipped.
14
15Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
16Signed-off-by: Remi Gacogne <rgacogne@archlinux.org>
17Signed-off-by: Allan McRae <allan@archlinux.org>
18---
19 lib/libalpm/sync.c | 18 ++++++++++++++++++
20 1 file changed, 18 insertions(+)
21
22diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
23index 888ae15..e843b07 100644
24--- a/lib/libalpm/sync.c
25+++ b/lib/libalpm/sync.c
26@@ -1212,6 +1212,7 @@ static int load_packages(alpm_handle_t *handle, alpm_list_t **data,
27 EVENT(handle, &event);
28
29 for(i = handle->trans->add; i; i = i->next, current++) {
30+ int error = 0;
31 alpm_pkg_t *spkg = i->data;
32 char *filepath;
33 int percent = (int)(((double)current_bytes / total_bytes) * 100);
34@@ -1232,6 +1233,23 @@ static int load_packages(alpm_handle_t *handle, alpm_list_t **data,
35 spkg->name);
36 alpm_pkg_t *pkgfile =_alpm_pkg_load_internal(handle, filepath, 1);
37 if(!pkgfile) {
38+ _alpm_log(handle, ALPM_LOG_DEBUG, "failed to load pkgfile internal\n");
39+ error = 1;
40+ } else {
41+ if(strcmp(spkg->name, pkgfile->name) != 0) {
42+ _alpm_log(handle, ALPM_LOG_DEBUG,
43+ "internal package name mismatch, expected: '%s', actual: '%s'\n",
44+ spkg->name, pkgfile->name);
45+ error = 1;
46+ }
47+ if(strcmp(spkg->version, pkgfile->version) != 0) {
48+ _alpm_log(handle, ALPM_LOG_DEBUG,
49+ "internal package version mismatch, expected: '%s', actual: '%s'\n",
50+ spkg->version, pkgfile->version);
51+ error = 1;
52+ }
53+ }
54+ if(error != 0) {
55 errors++;
56 *data = alpm_list_add(*data, strdup(spkg->filename));
57 free(filepath);
58--
592.4.6
60