summaryrefslogtreecommitdiff
path: root/libre/pacman/pacman-5.0.1-roundup.patch
blob: ddb8ddb316193d1a8f684795a7c3d5353597ec04 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
diff --git a/NEWS b/NEWS
index 07aa028..b7298bf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,22 @@
 VERSION         DESCRIPTION
 -----------------------------------------------------------------------------
+5.0.1         - fix alignment issues with wide character locales (FS#47980)
+              - fix removal of .pacnew files (FS#47993)
+              - fix triggering of Install hooks (FS#47996)
+              - fix handling of stdin scripts called by pacman
+              - hook activity is logged
+              - documentataion updates for alpm-hooks (FS#48080)
+              - makepkg:
+                - increase robustness of variable array checks
+                - makepkg -g does not perform current architecture checks
+                - do not run prepare() with --noextract
+                - all directories in the packaging directory are cleared
+                  before each build
+                - fix translations issues (FS#48057, FS#48298)
+              - repo-add:
+                - fix checking for non-existent database
+              - contrib:
+                - zsh_completion: updated makepkg options
 5.0.0         - pacman can run hooks pre- and post-transaction. See the
                 alpm-hooks(5) man page for details and an example hook (FS#2985)
               - pacman can now sync and read .files databases (-Fy) and do basic
diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index e410481..4b4a22c 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -52,10 +52,10 @@ similar to `$_basekernver`.
 +
 The `pkgver` variable can be automatically updated by providing a `pkgver()`
 function in the PKGBUILD that outputs the new package version.
-This is run after downloading and extracting the sources so it can use those
-files in determining the new `pkgver`.
-This is most useful when used with sources from version control systems (see
-below).
+This is run after downloading and extracting the sources and running the
+`prepare()` function (if present), so it can use those files in determining the
+new `pkgver`.  This is most useful when used with sources from version control
+systems (see below).
 
 *pkgrel*::
 	This is the release number specific to the Arch Linux release. This
diff --git a/scripts/libmakepkg/tidy/emptydirs.sh.in b/scripts/libmakepkg/tidy/emptydirs.sh.in
index 32b8d8c..85ab39d 100644
--- a/scripts/libmakepkg/tidy/emptydirs.sh.in
+++ b/scripts/libmakepkg/tidy/emptydirs.sh.in
@@ -33,6 +33,7 @@ tidy_remove+=('tidy_emptydirs')
 tidy_emptydirs() {
 	if check_option "emptydirs" "n"; then
 		msg2 "$(gettext "Removing empty directories...")"
-		find . -depth -type d -exec rmdir '{}' + 2>/dev/null
+		# we are unable to use '-empty' as it is non-POSIX and not support by all find variants
+		find . -depth -type d -exec rmdir '{}' \; 2>/dev/null
 	fi
 }
diff --git a/scripts/libmakepkg/util/util.sh b/scripts/libmakepkg/util/util.sh
index 675e75d..f9f1c20 100644
--- a/scripts/libmakepkg/util/util.sh
+++ b/scripts/libmakepkg/util/util.sh
@@ -46,7 +46,7 @@ is_array() {
 	local shellopts=$(shopt -p)
 	shopt -s extglob
 
-	if [[ $(declare -p "$i") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
+	if [[ $(declare -p "$v") == declare\ -*([[:alnum:]])a*([[:alnum:]])\ * ]]; then
 		ret=0
 	fi
 
diff --git a/scripts/pacman-key.sh.in b/scripts/pacman-key.sh.in
index 30d2704..0db0952 100644
--- a/scripts/pacman-key.sh.in
+++ b/scripts/pacman-key.sh.in
@@ -483,7 +483,7 @@ verify_sig() {
 	local ret=0
 	for sig; do
 		msg "Checking %s..." "$sig"
-		if ! "${GPG_PACMAN[@]}" --status-fd 1 --verify "$sig" | grep -qE '^\[GNUPG:\] TRUST_(FULLY|ULTIMATE)$'; then
+		if ! "${GPG_PACMAN[@]}" --status-fd 1 --verify "$sig" | grep -qE '^\[GNUPG:\] TRUST_(FULLY|ULTIMATE).*$'; then
 			error "$(gettext "The signature identified by %s could not be verified.")" "$sig"
 			ret=1
 		fi
diff --git a/src/pacman/check.c b/src/pacman/check.c
index 0fe74e8..d282cc2 100644
--- a/src/pacman/check.c
+++ b/src/pacman/check.c
@@ -254,7 +254,6 @@ int check_pkg_full(alpm_pkg_t *pkg)
 	const char *root, *pkgname;
 	size_t errors = 0;
 	size_t rootlen;
-	char filepath[PATH_MAX];
 	struct archive *mtree;
 	struct archive_entry *entry = NULL;
 	size_t file_count = 0;
@@ -267,7 +266,6 @@ int check_pkg_full(alpm_pkg_t *pkg)
 		pm_printf(ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, "");
 		return 1;
 	}
-	strcpy(filepath, root);
 
 	pkgname = alpm_pkg_get_name(pkg);
 	mtree = alpm_pkg_mtree_open(pkg);
@@ -282,6 +280,8 @@ int check_pkg_full(alpm_pkg_t *pkg)
 	while(alpm_pkg_mtree_next(pkg, mtree, &entry) == ARCHIVE_OK) {
 		struct stat st;
 		const char *path = archive_entry_pathname(entry);
+		char filepath[PATH_MAX];
+		int filepath_len;
 		mode_t type;
 		size_t file_errors = 0;
 		int backup = 0;
@@ -292,31 +292,37 @@ int check_pkg_full(alpm_pkg_t *pkg)
 			path += 2;
 		}
 
-		if(strcmp(path, ".INSTALL") == 0) {
-			char filename[PATH_MAX];
-			snprintf(filename, PATH_MAX, "%slocal/%s-%s/install",
-					alpm_option_get_dbpath(config->handle) + 1,
-					pkgname, alpm_pkg_get_version(pkg));
-			archive_entry_set_pathname(entry, filename);
-			path = archive_entry_pathname(entry);
-		} else if(strcmp(path, ".CHANGELOG") == 0) {
-			char filename[PATH_MAX];
-			snprintf(filename, PATH_MAX, "%slocal/%s-%s/changelog",
-					alpm_option_get_dbpath(config->handle) + 1,
-					pkgname, alpm_pkg_get_version(pkg));
-			archive_entry_set_pathname(entry, filename);
-			path = archive_entry_pathname(entry);
-		} else if(*path == '.') {
-			continue;
-		}
+		if(*path == '.') {
+			const char *dbfile = NULL;
 
-		file_count++;
+			if(strcmp(path, ".INSTALL") == 0) {
+				dbfile = "install";
+			} else if(strcmp(path, ".CHANGELOG") == 0) {
+				dbfile = "changelog";
+			} else {
+				continue;
+			}
 
-		if(rootlen + 1 + strlen(path) > PATH_MAX) {
-			pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
-			continue;
+			/* Do not append root directory as alpm_option_get_dbpath is already
+			 * an absoute path */
+			filepath_len = snprintf(filepath, PATH_MAX, "%slocal/%s-%s/%s",
+					alpm_option_get_dbpath(config->handle),
+					pkgname, alpm_pkg_get_version(pkg), dbfile);
+			if(filepath_len >= PATH_MAX) {
+				pm_printf(ALPM_LOG_WARNING, _("path too long: %slocal/%s-%s/%s\n"),
+						alpm_option_get_dbpath(config->handle),
+						pkgname, alpm_pkg_get_version(pkg), dbfile);
+				continue;
+			}
+		} else {
+			filepath_len = snprintf(filepath, PATH_MAX, "%s%s", root, path);
+			if(filepath_len >= PATH_MAX) {
+				pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path);
+				continue;
+			}
 		}
-		strcpy(filepath + rootlen, path);
+
+		file_count++;
 
 		exists = check_file_exists(pkgname, filepath, rootlen, &st);
 		if(exists == 1) {