commit rpm for openSUSE:Factory
Hello community, here is the log from the commit of package rpm for openSUSE:Factory checked in at 2012-04-23 16:13:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rpm (Old) and /work/SRC/openSUSE:Factory/.rpm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "rpm", Maintainer is "mls@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/rpm/rpm-python.changes 2012-01-25 11:09:28.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.rpm.new/rpm-python.changes 2012-04-23 16:13:04.000000000 +0200 @@ -1,0 +2,11 @@ +Mon Apr 23 11:16:26 CEST 2012 - mls@suse.de + +- modified capsule api diff to match rpm upstream + +------------------------------------------------------------------- +Wed Apr 11 16:54:02 UTC 2012 - klaussfreire@gmail.com + +- Fix usage of deprecated AsVoidPtr Python/C API, + replaced by Capsule API + +------------------------------------------------------------------- --- /work/SRC/openSUSE:Factory/rpm/rpm.changes 2012-03-27 09:13:15.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.rpm.new/rpm.changes 2012-04-23 16:13:04.000000000 +0200 @@ -1,0 +2,11 @@ +Fri Apr 20 14:40:50 CEST 2012 - mls@suse.de + +- fix some more crashes on malformed header data + [bnc#754281] [bnc#754284] [bnc#754285] +- fix quoting in brp-python-hardlink [bnc#756087] +- change env handling for supplements [bnc#741543] +- fix _fix macros [bnc#728682] +- fix obsoletes handling of installed packages [bnc#714724] +- implement tilde support in version comparison [bnc#466994] + +------------------------------------------------------------------- New: ---- headerchk2.diff helperenv.diff instobscheck.diff python-capsule-api.diff pythonhardlink.diff tilde.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ rpm-python.spec: same change ++++++ rpm.spec ++++++ --- /var/tmp/diff_new_pack.NjMHBg/_old 2012-04-23 16:13:08.000000000 +0200 +++ /var/tmp/diff_new_pack.NjMHBg/_new 2012-04-23 16:13:08.000000000 +0200 @@ -138,6 +138,12 @@ Patch83: findlang-new-help-fix.diff Patch84: langnoc.diff Patch85: rpm-gcc47.patch +Patch86: headerchk2.diff +Patch87: pythonhardlink.diff +Patch88: helperenv.diff +Patch89: instobscheck.diff +Patch90: tilde.diff +Patch91: python-capsule-api.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # # avoid bootstrapping problem @@ -154,7 +160,6 @@ %package devel Summary: Include Files and Libraries mandatory for Development -Group: System/Packages Requires: rpm = %{version} # for people confusing the one with the other Recommends: rpm-build = %{version} @@ -169,7 +174,6 @@ %package build Summary: Tools and Scripts to create rpm packages -Group: System/Packages Requires: rpm = %{version} Provides: rpm:%_bindir/rpmbuild Provides: rpmbuild @@ -211,7 +215,8 @@ %patch -P 50 -P 51 -P 52 -P 53 -P 54 -P 55 -P 56 -P 57 -P 58 -P 59 %patch -P 60 -P 61 -P 62 -P 63 -P 64 -P 65 -P 66 -P 67 -P 68 -P 69 %patch -P 70 -P 71 -P 72 -P 73 -P 74 -P 75 -P 76 -P 77 -P 78 -P 79 -%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 +%patch -P 80 -P 81 -P 82 -P 83 -P 84 -P 85 -P 86 -P 87 -P 88 -P 89 +%patch -P 90 -P 91 #chmod 755 scripts/find-supplements{,.ksyms} #chmod 755 scripts/find-provides.ksyms scripts/find-requires.ksyms #chmod 755 scripts/firmware.prov ++++++ fileattrs.diff ++++++ --- /var/tmp/diff_new_pack.NjMHBg/_old 2012-04-23 16:13:08.000000000 +0200 +++ /var/tmp/diff_new_pack.NjMHBg/_new 2012-04-23 16:13:08.000000000 +0200 @@ -37,9 +37,9 @@ --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ fileattrs/ksyms.attr 2011-12-15 13:47:26.787456907 +0100 @@ -0,0 +1,4 @@ -+%__ksyms_provides %{__set_helper_env}%{_rpmconfigdir}/find-provides.ksyms %name -+%__ksyms_requires %{__set_helper_env}%{_rpmconfigdir}/find-requires.ksyms %name -+%__ksyms_supplements %{__set_helper_env}%{_rpmconfigdir}/find-supplements.ksyms %name ++%__ksyms_provides %{_rpmconfigdir}/find-provides.ksyms %name ++%__ksyms_requires %{_rpmconfigdir}/find-requires.ksyms %name ++%__ksyms_supplements %{_rpmconfigdir}/find-supplements.ksyms %name +%__ksyms_path (/lib/modules/.*\.ko(\.gz)?)|(/boot/vmlinu[xz].*)$ Index: fileattrs/Makefile.am =================================================================== ++++++ headerchk2.diff ++++++ --- lib/header.c.orig 2012-04-17 16:16:29.000000000 +0000 +++ lib/header.c 2012-04-17 16:53:32.000000000 +0000 @@ -197,7 +197,7 @@ int headerVerifyInfo(int il, int dl, con return i; if (hdrchkAlign(info->type, info->offset)) return i; - if (!negate && hdrchkRange(dl, info->offset)) + if (hdrchkRange(dl, info->offset)) return i; if (hdrchkData(info->count)) return i; @@ -837,10 +837,13 @@ Header headerLoad(void * uh) entry->info.type = htonl(pe->type); entry->info.count = htonl(pe->count); + entry->info.tag = htonl(pe->tag); - if (hdrchkType(entry->info.type)) + if (!ENTRY_IS_REGION(entry)) goto errxit; - if (hdrchkTags(entry->info.count)) + if (entry->info.type != REGION_TAG_TYPE) + goto errxit; + if (entry->info.count != REGION_TAG_COUNT) goto errxit; { int off = ntohl(pe->offset); @@ -856,7 +859,6 @@ Header headerLoad(void * uh) ril = rdl/sizeof(*pe); if (hdrchkTags(ril) || hdrchkData(rdl)) goto errxit; - entry->info.tag = htonl(pe->tag); } else { ril = il; rdl = (ril * sizeof(struct entryInfo_s)); @@ -876,13 +878,12 @@ Header headerLoad(void * uh) indexEntry newEntry = entry + ril; int ne = (h->indexUsed - ril); int rid = entry->info.offset+1; - int rc; /* Load dribble entries from region. */ - rc = regionSwab(newEntry, ne, 0, pe+ril, dataStart, dataEnd, rid); - if (rc < 0) + rdlen = regionSwab(newEntry, ne, rdlen, pe+ril, + dataStart, dataEnd, rid); + if (rdlen < 0) goto errxit; - rdlen += rc; { indexEntry firstEntry = newEntry; int save = h->indexUsed; @@ -905,7 +906,7 @@ Header headerLoad(void * uh) } } rdlen += REGION_TAG_COUNT; - /* XXX should be equality test, but dribbles are sometimes a bit off? */ + /* should be equality test, but can be off if entries are not perfectly aligned */ if (rdlen > dl) goto errxit; } --- lib/package.c.orig 2012-04-17 16:26:00.000000000 +0000 +++ lib/package.c 2012-04-17 16:26:05.000000000 +0000 @@ -241,16 +241,23 @@ static rpmRC headerVerify(rpmKeyring key } /* Is there an immutable header region tag? */ - if (!(entry.info.tag == RPMTAG_HEADERIMMUTABLE - && entry.info.type == RPM_BIN_TYPE - && entry.info.count == REGION_TAG_COUNT)) - { + if (!(entry.info.tag == RPMTAG_HEADERIMMUTABLE)) { rc = RPMRC_NOTFOUND; goto exit; } - /* Is the offset within the data area? */ - if (entry.info.offset >= dl) { + /* Is the region tag sane? */ + if (!(entry.info.type == REGION_TAG_TYPE && + entry.info.count == REGION_TAG_COUNT)) { + rasprintf(&buf, + _("region tag: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is the trailer within the data area? */ + if (entry.info.offset + REGION_TAG_COUNT > dl) { rasprintf(&buf, _("region offset: BAD, tag %d type %d offset %d count %d\n"), entry.info.tag, entry.info.type, @@ -263,10 +270,10 @@ static rpmRC headerVerify(rpmKeyring key (void) memcpy(&info, regionEnd, REGION_TAG_COUNT); regionEnd += REGION_TAG_COUNT; - xx = headerVerifyInfo(1, dl, &info, &entry.info, 1); + xx = headerVerifyInfo(1, il * sizeof(*pe), &info, &entry.info, 1); if (xx != -1 || !(entry.info.tag == RPMTAG_HEADERIMMUTABLE - && entry.info.type == RPM_BIN_TYPE + && entry.info.type == REGION_TAG_TYPE && entry.info.count == REGION_TAG_COUNT)) { rasprintf(&buf, --- lib/signature.c.orig 2012-04-17 16:25:52.000000000 +0000 +++ lib/signature.c 2012-04-17 16:26:05.000000000 +0000 @@ -133,12 +133,19 @@ rpmRC rpmReadSignature(FD_t fd, Header * } /* Is there an immutable header region tag? */ - if (entry.info.tag == RPMTAG_HEADERSIGNATURES - && entry.info.type == RPM_BIN_TYPE - && entry.info.count == REGION_TAG_COUNT) - { - - if (entry.info.offset >= dl) { + if (entry.info.tag == RPMTAG_HEADERSIGNATURES) { + /* Is the region tag sane? */ + if (!(entry.info.type == REGION_TAG_TYPE && + entry.info.count == REGION_TAG_COUNT)) { + rasprintf(&buf, + _("region tag: BAD, tag %d type %d offset %d count %d\n"), + entry.info.tag, entry.info.type, + entry.info.offset, entry.info.count); + goto exit; + } + + /* Is the trailer within the data area? */ + if (entry.info.offset + REGION_TAG_COUNT > dl) { rasprintf(&buf, _("region offset: BAD, tag %d type %d offset %d count %d\n"), entry.info.tag, entry.info.type, @@ -157,10 +164,10 @@ rpmRC rpmReadSignature(FD_t fd, Header * } dataEnd += REGION_TAG_COUNT; - xx = headerVerifyInfo(1, dl, &info, &entry.info, 1); + xx = headerVerifyInfo(1, il * sizeof(*pe), &info, &entry.info, 1); if (xx != -1 || !((entry.info.tag == RPMTAG_HEADERSIGNATURES || entry.info.tag == RPMTAG_HEADERIMAGE) - && entry.info.type == RPM_BIN_TYPE + && entry.info.type == REGION_TAG_TYPE && entry.info.count == REGION_TAG_COUNT)) { rasprintf(&buf, ++++++ helperenv.diff ++++++ --- macros.in.orig 2012-04-18 13:48:07.000000000 +0000 +++ macros.in 2012-04-18 13:47:41.000000000 +0000 @@ -515,7 +515,7 @@ posix.setenv("RPMBUILD_SOURCEDIR",rpm.ex # %__myattr_exclude_magic exclude by magic regex # %__myattr_exclude_path exclude by path regex # -%_fileattrsdir %{_rpmconfigdir}/fileattrs +%_fileattrsdir %{__set_helper_env}%{_rpmconfigdir}/fileattrs #============================================================================== # ---- Database configuration macros. ++++++ instobscheck.diff ++++++ --- lib/depends.c.orig 2012-04-18 14:46:10.000000000 +0000 +++ lib/depends.c 2012-04-18 14:46:15.000000000 +0000 @@ -355,6 +355,7 @@ static int rpmdbProvides(rpmts ts, depCa rpmdbMatchIterator mi = NULL; Header h = NULL; int rc = 0; + int matchnvr = rpmdsTagN(dep) == RPMTAG_OBSOLETENAME; /* See if we already looked this up */ if (depCacheGetEntry(dcache, DNEVR, &cachedrc, NULL, NULL)) { @@ -368,7 +369,7 @@ static int rpmdbProvides(rpmts ts, depCa * taking file state into account: replaced, wrong colored and * not installed files can not satisfy a dependency. */ - if (Name[0] == '/') { + if (Name[0] == '/' && !matchnvr) { mi = rpmtsPrunedIterator(ts, RPMDBI_BASENAMES, Name); while ((h = rpmdbNextIterator(mi)) != NULL) { int fs = RPMFILE_STATE_MISSING; @@ -390,9 +391,16 @@ static int rpmdbProvides(rpmts ts, depCa if (h == NULL) { mi = rpmtsPrunedIterator(ts, RPMDBI_PROVIDENAME, Name); while ((h = rpmdbNextIterator(mi)) != NULL) { - if (rpmdsAnyMatchesDep(h, dep, _rpmds_nopromote)) { - rpmdsNotify(dep, "(db provides)", rc); - break; + if (matchnvr) { + if (rpmdsNVRMatchesDep(h, dep , _rpmds_nopromote)) { + rpmdsNotify(dep, "(db provides)", rc); + break; + } + } else { + if (rpmdsAnyMatchesDep(h, dep, _rpmds_nopromote)) { + rpmdsNotify(dep, "(db provides)", rc); + break; + } } } rpmdbFreeIterator(mi); ++++++ platformin.diff ++++++ --- /var/tmp/diff_new_pack.NjMHBg/_old 2012-04-23 16:13:08.000000000 +0200 +++ /var/tmp/diff_new_pack.NjMHBg/_new 2012-04-23 16:13:08.000000000 +0200 @@ -29,9 +29,9 @@ +@SuSE@#--------------------------------------------------------------------- +@SuSE@# Expanded at end of %prep +@SuSE@# -+@SuSE@%__id_u @__ID_U@ -+@SuSE@%__chown_Rhf @__CHOWN_RHF@ -+@SuSE@%__chgrp_Rhf @__CHGRP_RHF@ ++@SuSE@%__id_u %{__id} -u ++@SuSE@%__chown_Rhf %{__chown} -Rhf ++@SuSE@%__chgrp_Rhf %{__chgrp} -Rhf +@SuSE@%_fixowner [ `%{__id_u}` = '0' ] && %{__chown_Rhf} root +@SuSE@%_fixgroup [ `%{__id_u}` = '0' ] && %{__chgrp_Rhf} root +@SuSE@%_fixperms %{__chmod} -Rf @FIXPERMS@ ++++++ python-capsule-api.diff ++++++ --- python/header-py.c.orig 2012-04-23 09:13:33.000000000 +0000 +++ python/header-py.c 2012-04-23 09:14:25.000000000 +0000 @@ -368,8 +368,8 @@ static PyObject *hdr_new(PyTypeObject *s if (obj == NULL) { h = headerNew(); - } else if (PyCObject_Check(obj)) { - h = PyCObject_AsVoidPtr(obj); + } else if (CAPSULE_CHECK(obj)) { + h = CAPSULE_EXTRACT(obj, "rpm._C_Header"); } else if (hdrObject_Check(obj)) { h = headerCopy(((hdrObject*) obj)->h); } else if (PyBytes_Check(obj)) { --- python/rpmsystem-py.h.orig 2012-04-23 09:12:49.000000000 +0000 +++ python/rpmsystem-py.h 2012-04-23 09:13:19.000000000 +0000 @@ -33,6 +33,16 @@ typedef Py_ssize_t (*lenfunc)(PyObject * #define PyBytes_AsString PyString_AsString #endif +#if ((PY_MAJOR_VERSION << 8) | (PY_MINOR_VERSION << 0)) >= 0x0207 +#define CAPSULE_BUILD(ptr,name) PyCapsule_New(ptr, name, NULL) +#define CAPSULE_CHECK(obj) PyCapsule_CheckExact(obj) +#define CAPSULE_EXTRACT(obj,name) PyCapsule_GetPointer(obj, name) +#else +#define CAPSULE_BUILD(ptr,name) PyCObject_FromVoidPtr(ptr, NULL) +#define CAPSULE_CHECK(obj) PyCObject_Check(obj) +#define CAPSULE_EXTRACT(obj,name) PyCObject_AsVoidPtr(obj) +#endif + /* For Python 3, use the PyLong type throughout in place of PyInt */ #if PY_MAJOR_VERSION >= 3 #define PyInt_Check PyLong_Check --- python/spec-py.c.orig 2012-04-23 09:13:41.000000000 +0000 +++ python/spec-py.c 2012-04-23 09:14:56.000000000 +0000 @@ -34,7 +34,7 @@ static PyObject *makeHeader(Header h) PyObject *rpmmod = PyImport_ImportModuleNoBlock("rpm"); if (rpmmod == NULL) return NULL; - PyObject *ptr = PyCObject_FromVoidPtr(h, NULL); + PyObject *ptr = CAPSULE_BUILD(h, "rpm._C_Header"); PyObject *hdr = PyObject_CallMethod(rpmmod, "hdr", "(O)", ptr); Py_XDECREF(ptr); Py_XDECREF(rpmmod); ++++++ pythonhardlink.diff ++++++ --- scripts/brp-python-hardlink.orig 2012-04-18 13:33:39.000000000 +0000 +++ scripts/brp-python-hardlink 2012-04-18 13:34:52.000000000 +0000 @@ -10,8 +10,8 @@ fi find "$RPM_BUILD_ROOT" -type f -name "*.pyc" | while read pyc ; do pyo="${pyc%c}o" if [ -f "$pyo" ] ; then - csha="$(sha1sum -b $pyc | cut -d' ' -f 1)" && \ - osha="$(sha1sum -b $pyo | cut -d' ' -f 1)" && \ + csha="$(sha1sum -b "$pyc" | cut -d' ' -f 1)" && \ + osha="$(sha1sum -b "$pyo" | cut -d' ' -f 1)" && \ if [ "$csha" = "$osha" ] ; then ln -f "$pyc" "$pyo" fi ++++++ tilde.diff ++++++ --- ./build/pack.c.orig 2012-04-20 13:43:49.000000000 +0000 +++ ./build/pack.c 2012-04-20 14:23:57.000000000 +0000 @@ -308,6 +308,44 @@ static rpmRC processScriptFiles(rpmSpec return RPMRC_OK; } +/** + */ +static int depContainsTilde(Header h, rpmTagVal tagEVR) +{ + struct rpmtd_s evrs; + const char *evr = NULL; + + if (headerGet(h, tagEVR, &evrs, HEADERGET_MINMEM)) { + while ((evr = rpmtdNextString(&evrs)) != NULL) + if (strchr(evr, '~')) + break; + rpmtdFreeData(&evrs); + } + return evr != NULL; +} + +static rpmTagVal depevrtags[] = { + RPMTAG_PROVIDEVERSION, + RPMTAG_REQUIREVERSION, + RPMTAG_OBSOLETEVERSION, + RPMTAG_CONFLICTVERSION, + RPMTAG_ORDERVERSION, + RPMTAG_TRIGGERVERSION, + RPMTAG_SUGGESTSVERSION, + RPMTAG_ENHANCESVERSION, + 0 +}; + +static int haveTildeDep(Header h) +{ + int i; + + for (i = 0; depevrtags[i] != 0; i++) + if (depContainsTilde(h, depevrtags[i])) + return 1; + return 0; +} + static rpmRC writeRPM(Header *hdrp, unsigned char ** pkgidp, const char *fileName, CSA_t csa, char **cookie) { @@ -382,6 +420,10 @@ static rpmRC writeRPM(Header *hdrp, unsi free(buf); } + /* check if the package has a dependency with a '~' */ + if (haveTildeDep(h)) + (void) rpmlibNeedsFeature(h, "TildeInVersions", "4.10.0-1"); + /* Create and add the cookie */ if (cookie) { rasprintf(cookie, "%s %d", buildHost(), (int) (*getBuildTime())); --- ./build/parsePreamble.c.orig 2012-04-20 14:29:26.000000000 +0000 +++ ./build/parsePreamble.c 2012-04-20 14:30:18.000000000 +0000 @@ -671,7 +671,7 @@ static int handlePreambleTag(rpmSpec spe case RPMTAG_VERSION: case RPMTAG_RELEASE: SINGLE_TOKEN_ONLY; - if (rpmCharCheck(spec, field, strlen(field), "._+%{}") != RPMRC_OK) return RPMRC_FAIL; + if (rpmCharCheck(spec, field, strlen(field), "._+%{}~") != RPMRC_OK) return RPMRC_FAIL; headerPutString(pkg->header, tag, field); break; case RPMTAG_URL: --- ./build/parseReqs.c.orig 2012-04-20 14:29:22.000000000 +0000 +++ ./build/parseReqs.c 2012-04-20 14:29:57.000000000 +0000 @@ -170,7 +170,7 @@ rpmRC parseRCPOT(rpmSpec spec, Package p } EVR = xmalloc((ve-v) + 1); rstrlcpy(EVR, v, (ve-v) + 1); - if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}")) goto exit; + if (rpmCharCheck(spec, EVR, ve-v, ".-_+:%{}~")) goto exit; re = ve; /* ==> next token after EVR string starts here */ } else EVR = NULL; --- ./lib/rpmds.c.orig 2012-04-20 13:44:06.000000000 +0000 +++ ./lib/rpmds.c 2012-04-20 13:44:12.000000000 +0000 @@ -913,6 +913,9 @@ static const struct rpmlibProvides_s rpm { "rpmlib(ScriptletExpansion)", "4.9.0-1", ( RPMSENSE_EQUAL), N_("package scriptlets can be expanded at install time.") }, + { "rpmlib(TildeInVersions)", "4.10.0-1", + ( RPMSENSE_EQUAL), + N_("dependency comparison supports versions with tilde.") }, { NULL, NULL, 0, NULL } }; --- ./lib/rpmvercmp.c.orig 2012-04-20 13:44:06.000000000 +0000 +++ ./lib/rpmvercmp.c 2012-04-20 13:44:12.000000000 +0000 @@ -32,9 +32,18 @@ int rpmvercmp(const char * a, const char two = str2; /* loop through each version segment of str1 and str2 and compare them */ - while (*one && *two) { - while (*one && !risalnum(*one)) one++; - while (*two && !risalnum(*two)) two++; + while (*one || *two) { + while (*one && !risalnum(*one) && *one != '~') one++; + while (*two && !risalnum(*two) && *two != '~') two++; + + /* handle the tilde separator, it sorts before everthing else */ + if (*one == '~' || *two == '~') { + if (*one != '~') return 1; + if (*two != '~') return -1; + one++; + two++; + continue; + } /* If we ran to the end of either, we are finished with the loop */ if (!(*one && *two)) break; -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de