Tue, 29 Mar 2011 19:46:35 +0200
Correct and introduce slightly needed logic, leading to better reliability:
Update bash(1) patch logic, correct several buildconf make location
errors, correct failed bash(1) configure invocation, enable perl(1) to
build with unpathed make(1), patch rpm(1) to correctly link with
internal libdb(3), and lastly unsuscessfully try to reorganize rpm patch
hunks.
1 ##
2 ## rpm.patch.bugfix -- Annotated OpenPKG RPM Patch file
3 ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
4 ## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
5 ##
6 ## This file assembles changes to existing RPM source files between
7 ## the original RedHat RPM and the OpenPKG RPM variant. It can be
8 ## automatically applied to a vanilla RedHat RPM source tree with the
9 ## 'patch' tool to upgrade those files. Each patch snippet is annotated
10 ## with a short description.
11 ##
12 ## Created on: 13-Sep-2006
13 ##
14 ## ATTENTION: THIS PATCH FILE WAS AUTO-GENERATED FROM AN OPENPKG
15 ## RPM CVS REPOSITORY, HENCE DO NOT EDIT THIS FILE.
16 ##
18 +---------------------------------------------------------------------------
19 | %setup and %patch macros are treated very special internally, but
20 | make sure they at least optically can be used like any other macro
21 | and especially can have leading whitespaces.
22 +---------------------------------------------------------------------------
23 Index: build/parsePrep.c
24 --- build/parsePrep.c 7 Aug 2002 14:20:45 -0000 1.1.1.10
25 +++ build/parsePrep.c 6 Jun 2005 15:53:04 -0000 1.4
26 @@ -584,12 +584,15 @@
27 saveLines = splitString(getStringBuf(sb), strlen(getStringBuf(sb)), '\n');
28 /*@-usereleased@*/
29 for (lines = saveLines; *lines; lines++) {
30 + char *cp;
31 + for (cp = *lines; *cp == ' ' || *cp == '\t'; cp++)
32 + ;
33 res = 0;
34 /*@-boundsread@*/
35 - if (! strncmp(*lines, "%setup", sizeof("%setup")-1)) {
36 - res = doSetupMacro(spec, *lines);
37 - } else if (! strncmp(*lines, "%patch", sizeof("%patch")-1)) {
38 - res = doPatchMacro(spec, *lines);
39 + if (! strncmp(cp, "%setup", sizeof("%setup")-1)) {
40 + res = doSetupMacro(spec, cp);
41 + } else if (! strncmp(cp, "%patch", sizeof("%patch")-1)) {
42 + res = doPatchMacro(spec, cp);
43 } else {
44 appendLineStringBuf(spec->prep, *lines);
45 }
47 +---------------------------------------------------------------------------
48 | Do not pick of the vendor BeeCrypt package on RedHat Linux.
49 +---------------------------------------------------------------------------
50 Index: configure.ac
51 --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4
52 +++ configure.ac 13 Sep 2006 13:38:23 -0000
53 @@ -416,7 +416,7 @@
54 AC_CHECK_HEADER([beecrypt/beecrypt.h], [
55 AC_CHECK_LIB(beecrypt, mpfprintln, [
56 AC_DEFINE(HAVE_LIBBEECRYPT, 1, [Define to 1 if you have the `beecrypt' library (-lbeecrypt).])
57 - WITH_BEECRYPT_INCLUDE="-I/usr/include/beecrypt"
58 + WITH_BEECRYPT_INCLUDE=""
59 WITH_BEECRYPT_LIB="-lbeecrypt"
60 ])
61 ], [
63 +---------------------------------------------------------------------------
64 | Remove access to not-existing beecrypt/ subdirectory
65 | to avoid the configure script to break building.
66 +---------------------------------------------------------------------------
67 Index: configure.ac
68 --- configure.ac 2 Jul 2003 19:20:52 -0000 1.1.1.4
69 +++ configure.ac 13 Sep 2006 13:38:26 -0000
70 @@ -1274,7 +1274,6 @@
71 python/rpmdb/Makefile
72 python/test/Makefile
73 ], [ echo timestamp > popt/stamp-h.in
74 - echo timestamp > beecrypt/stamp-h.in
75 echo timestamp > stamp-h.in
76 ]
77 )
79 +---------------------------------------------------------------------------
80 | Fix filedescriptor leakage.
81 +---------------------------------------------------------------------------
82 Index: lib/psm.c
83 --- lib/psm.c 5 Jun 2003 12:43:18 -0000 1.1.1.6
84 +++ lib/psm.c 13 Sep 2006 13:38:27 -0000
85 @@ -940,6 +940,8 @@
86 if (sfdno > STDERR_FILENO) {
87 xx = Fclose (scriptFd);
88 }
89 + } else {
90 + xx = Fclose(out);
91 }
93 { const char *ipath = rpmExpand("PATH=%{_install_script_path}", NULL);
95 +---------------------------------------------------------------------------
96 | Fix trigger argument passing. For more details see RPM BugDB under:
97 | http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=100509
98 +---------------------------------------------------------------------------
99 Index: lib/psm.c
100 --- lib/psm.c 5 Jun 2003 12:43:18 -0000 1.1.1.6
101 +++ lib/psm.c 13 Sep 2006 13:38:29 -0000
102 @@ -1106,11 +1108,13 @@
103 const char ** triggerProgs;
104 int_32 * triggerIndices;
105 const char * sourceName;
106 + const char * triggerName;
107 rpmRC rc = RPMRC_OK;
108 int xx;
109 int i;
111 xx = headerNVR(sourceH, &sourceName, NULL, NULL);
112 + xx = headerNVR(triggeredH, &triggerName, NULL, NULL);
114 trigger = rpmdsInit(rpmdsNew(triggeredH, RPMTAG_TRIGGERNAME, scareMem));
115 if (trigger == NULL)
116 @@ -1149,7 +1153,7 @@
117 { int arg1;
118 int index;
120 - arg1 = rpmdbCountPackages(rpmtsGetRdb(ts), Name);
121 + arg1 = rpmdbCountPackages(rpmtsGetRdb(ts), triggerName);
122 if (arg1 < 0) {
123 /* XXX W2DO? fails as "execution of script failed" */
124 rc = RPMRC_FAIL;
126 +---------------------------------------------------------------------------
127 | Make sure RPM does not try to set file owner/group on files during
128 | installation of _source_ RPMs. Instead, let it use the current
129 | run-time owner/group, because most of the time the owner/group in
130 | the source RPM (which is the owner/group of the files as staying on
131 | the package author system) is not existing on the target system, of
132 | course.
133 +---------------------------------------------------------------------------
134 Index: lib/psm.c
135 --- lib/psm.c 5 Jun 2003 12:43:18 -0000 1.1.1.6
136 +++ lib/psm.c 13 Sep 2006 13:38:32 -0000
137 @@ -1710,6 +1714,7 @@
139 uid = fi->uid;
140 gid = fi->gid;
141 + if (!headerIsEntry(fi->h, RPMTAG_SOURCEPACKAGE)) {
142 if (fi->fuser && unameToUid(fi->fuser[i], &uid)) {
143 rpmMessage(RPMMESS_WARNING,
144 _("user %s does not exist - using root\n"),
145 @@ -1727,6 +1732,7 @@
146 /* XXX this diddles header memory. */
147 fi->fmodes[i] &= ~S_ISGID; /* turn off the sgid bit */
148 }
149 + }
150 if (fi->fuids) fi->fuids[i] = uid;
151 if (fi->fgids) fi->fgids[i] = gid;
152 }
154 +---------------------------------------------------------------------------
155 | Fix --justdb operation by consistently use the same rootDir checks
156 | RPM uses everywhere else, too.
157 +---------------------------------------------------------------------------
158 Index: lib/psm.c
159 --- lib/psm.c 5 Jun 2003 12:43:18 -0000 1.1.1.6
160 +++ lib/psm.c 13 Sep 2006 13:38:33 -0000
161 @@ -2027,7 +2033,8 @@
162 case PSM_CHROOT_IN:
163 { const char * rootDir = rpmtsRootDir(ts);
164 /* Change root directory if requested and not already done. */
165 - if (rootDir != NULL && !rpmtsChrootDone(ts) && !psm->chrootDone) {
166 + if (rootDir != NULL && !(rootDir[0] == '/' && rootDir[1] == '\0')
167 + && !rpmtsChrootDone(ts) && !psm->chrootDone) {
168 static int _loaded = 0;
170 /*
172 +---------------------------------------------------------------------------
173 | First, remove incorrectly introduced buffer assignment. Second, fix
174 | second and subsequent "%{foo -x}" constructs for non-Linux systems
175 | (without resetting the option index only the first construct would
176 | work). Third, bugfix the handling of macros inside macro arguments
177 | as in "%{foo bar%{quux}baz}": RPM correctly determined the pointer
178 | to the terminating second closing brace, but instead of passing
179 | this pointer to the subroutine which handles the macro argument
180 | construction, it passed the underlying character. This in turn
181 | obviously leaded to an incorrect determination of the argument end
182 | (it then though the first closing brace is the end). We fix this by
183 | passing the pointer and not the underlying character.
184 +---------------------------------------------------------------------------
185 Index: rpmio/macro.c
186 --- rpmio/macro.c 15 May 2003 13:42:01 -0000 1.1.1.7
187 +++ rpmio/macro.c 22 Jan 2004 21:42:32 -0000 1.2
188 @@ -879,7 +879,7 @@
189 */
190 /*@-bounds@*/
191 /*@dependent@*/ static const char *
192 -grabArgs(MacroBuf mb, const MacroEntry me, /*@returned@*/ const char * se, char lastc)
193 +grabArgs(MacroBuf mb, const MacroEntry me, /*@returned@*/ const char * se, char *lastc)
194 /*@globals rpmGlobalMacroContext @*/
195 /*@modifies mb, rpmGlobalMacroContext @*/
196 {
197 @@ -900,7 +900,7 @@
199 /* Copy args into buf until lastc */
200 *be++ = ' ';
201 - while ((c = *se++) != '\0' && c != lastc) {
202 + while ((c = *se++) != '\0' && (se-1) != lastc) {
203 /*@-globs@*/
204 if (!isblank(c)) {
205 *be++ = c;
206 @@ -968,6 +968,8 @@
207 /*@-mods@*/
208 optind = 0; /* XXX but posix != glibc */
209 /*@=mods@*/
210 +#else
211 + optind = 1;
212 #endif
214 opts = me->opts;
215 @@ -1168,7 +1170,7 @@
216 int c;
217 int rc = 0;
218 int negate;
219 - char grab;
220 + char *grab;
221 int chkexist;
223 if (++mb->depth > max_macro_depth) {
224 @@ -1202,7 +1204,7 @@
225 if (mb->depth > 1) /* XXX full expansion for outermost level */
226 t = mb->t; /* save expansion pointer for printExpand */
227 negate = 0;
228 - grab = '\0';
229 + grab = NULL;
230 chkexist = 0;
231 switch ((c = *s)) {
232 default: /* %name substitution */
233 @@ -1237,7 +1239,8 @@
234 /* For "%name " macros ... */
235 /*@-globs@*/
236 if ((c = *fe) && isblank(c))
237 - grab = '\n';
238 + if ((grab = strchr(fe,'\n')) == NULL)
239 + grab = strchr(fe, '\0');
240 /*@=globs@*/
241 /*@switchbreak@*/ break;
242 case '(': /* %(...) shell escape */
243 @@ -1284,7 +1287,7 @@
244 ge = se - 1;
245 /*@innerbreak@*/ break;
246 case ' ':
247 - grab = se[-1];
248 + grab = se-1;
249 /*@innerbreak@*/ break;
250 default:
251 /*@innerbreak@*/ break;
252 @@ -1438,7 +1441,7 @@
254 /* Setup args for "%name " macros with opts */
255 if (me && me->opts != NULL) {
256 - if (grab != '\0') {
257 + if (grab != NULL) {
258 se = grabArgs(mb, me, fe, grab);
259 } else {
260 addMacro(mb->mc, "**", NULL, "", mb->depth);
262 +---------------------------------------------------------------------------
263 | Backported RPM vendor patch:
264 | "fix: packages w/o file colors segfault"
265 | (cvs diff -r2.41.2.6 -r2.41.2.7 lib/rpmfi.c)
266 +---------------------------------------------------------------------------
267 Index: lib/rpmfi.c
268 --- lib/rpmfi.c 17 Jul 2003 22:44:28 -0000 1.1.1.3
269 +++ lib/rpmfi.c 22 Jan 2004 21:42:24 -0000 1.2
270 @@ -866,6 +866,7 @@
271 *fn = '\0';
272 fnlen = stpcpy( stpcpy(fn, dirNames[dirIndexes[i]]), baseNames[i]) - fn;
274 +if (fColors != NULL)
275 dColors[dirIndexes[i]] |= fColors[i];
276 /*
277 * See if this file path needs relocating.
279 +---------------------------------------------------------------------------
280 | The "%_excludedocs" macro is intended to set the _default_ if
281 | both --excludedocs and --includedocs are not specified and it is
282 | evaluated already before. So, do not override it here again, because
283 | it would not allow us to make "%_excludedocs 1" the default.
284 +---------------------------------------------------------------------------
285 Index: lib/transaction.c
286 --- lib/transaction.c 15 Jul 2003 15:15:47 -0000 1.1.1.15
287 +++ lib/transaction.c 22 Jan 2004 21:42:26 -0000 1.2
288 @@ -702,8 +702,10 @@
289 int dc;
290 int i, j;
292 +#if 0
293 if (!noDocs)
294 noDocs = rpmExpandNumeric("%{_excludedocs}");
295 +#endif
297 { const char *tmpPath = rpmExpand("%{_netsharedpath}", NULL);
298 /*@-branchstate@*/
300 +---------------------------------------------------------------------------
301 | Bugfix: POSIX/SUSv3 clearly expresses that fcntl(2) returns "value
302 | other than -1" on success, so check for equality to -1 instead of
303 | non-equality to 0. In practice this does not harm on most platforms,
304 | because they fortunately (by conincidence and common practice)
305 | return 0.
306 | Additionally, at least Solaris may reject (see fcntl(2) manpage) the
307 | (partial) locking, because DB mmap(2)'ed the file (or vice versa).
308 | The workaround is to lock the entire(!) file.
309 +---------------------------------------------------------------------------
310 Index: db/mutex/mut_fcntl.c
311 --- db/mutex/mut_fcntl.c 18 Jan 2003 14:05:03 -0000 1.1.1.5
312 +++ db/mutex/mut_fcntl.c 22 Jan 2004 21:42:18 -0000 1.2
313 @@ -84,8 +84,13 @@
315 /* Initialize the lock. */
316 k_lock.l_whence = SEEK_SET;
317 +#if 0
318 k_lock.l_start = mutexp->off;
319 k_lock.l_len = 1;
320 +#else
321 + k_lock.l_start = 0;
322 + k_lock.l_len = 0;
323 +#endif
325 for (locked = waited = 0;;) {
326 /*
327 @@ -101,7 +106,7 @@
329 /* Acquire an exclusive kernel lock. */
330 k_lock.l_type = F_WRLCK;
331 - if (fcntl(dbenv->lockfhp->fd, F_SETLKW, &k_lock))
332 + if (fcntl(dbenv->lockfhp->fd, F_SETLKW, &k_lock) == -1)
333 return (__os_get_errno());
335 /* If the resource is still available, it's ours. */
336 @@ -112,7 +117,7 @@
338 /* Release the kernel lock. */
339 k_lock.l_type = F_UNLCK;
340 - if (fcntl(dbenv->lockfhp->fd, F_SETLK, &k_lock))
341 + if (fcntl(dbenv->lockfhp->fd, F_SETLK, &k_lock) == -1)
342 return (__os_get_errno());
344 /*
346 +---------------------------------------------------------------------------
347 | The O_DIRECT feature is fully broken under at least Linux 2.2 and
348 | 2.4. It is sometimes accepted by open(2) without error and later
349 | causes a write(2) to fail with EINVAL -- all depending on the
350 | underlying filesystem (usually works on tmpfs and fails on ext3).
351 | Sometimes it also causes open(2) to fail with EINVAL. In general,
352 | it does especially no "graceful degradation" and so is useless for
353 | use mostly all platforms except for those where we know it works
354 | (currently FreeBSD only). Interestingly, RPM works on RedHat, just
355 | because RedHat's "kernel" package contains a patch which masks out
356 | O_DIRECT usage... ;-)
357 +---------------------------------------------------------------------------
358 Index: db/os/os_open.c
359 --- db/os/os_open.c 18 Jan 2003 14:05:03 -0000 1.1.1.5
360 +++ db/os/os_open.c 22 Jan 2004 21:42:19 -0000 1.2
361 @@ -93,7 +93,7 @@
362 if (LF_ISSET(DB_OSO_TRUNC))
363 oflags |= O_TRUNC;
365 -#ifdef HAVE_O_DIRECT
366 +#if defined(HAVE_O_DIRECT) && defined(__FreeBSD__)
367 if (LF_ISSET(DB_OSO_DIRECT))
368 oflags |= O_DIRECT;
369 #endif