--- 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);