diff options
author | Thierry Vignaud <tv@mageia.org> | 2012-06-11 10:32:18 +0000 |
---|---|---|
committer | Thierry Vignaud <tv@mageia.org> | 2012-06-11 10:32:18 +0000 |
commit | 44b86ac71b0c15b49be210237a234888e2d449ce (patch) | |
tree | 841bd189ee3b6c7f5668ce55bc528ff192215a13 | |
parent | e52a0133388ed094b450ceeda87f074d24d7befc (diff) | |
download | perl-URPM-44b86ac71b0c15b49be210237a234888e2d449ce.tar perl-URPM-44b86ac71b0c15b49be210237a234888e2d449ce.tar.gz perl-URPM-44b86ac71b0c15b49be210237a234888e2d449ce.tar.bz2 perl-URPM-44b86ac71b0c15b49be210237a234888e2d449ce.tar.xz perl-URPM-44b86ac71b0c15b49be210237a234888e2d449ce.zip |
fix importing pubkeys with rpm-4.10.0 (eg: when adding media)
(ts_nosignature) return old values of ts->vsflags
(Db_traverse,Db_traverse_tag,Db_traverse_tag_find) restore previous ts->vsflags
issue introduced in commit r22930 by nanardon on Mar 1 2007:
"- make read_config_files() the load error code
- URPM::read_config_files return success true/false
- load config file at module load
- the config is tagged as load only in case of success, so reloading
after error will retry anyway"
looks like an optimisation silently added with that commit for faster
DB traversing; up to rpm-4.9.x, this was OK, but rpm-4.10.0 now refuses
to load the keyring if signature checking is disabled, which fails
importing the key
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | URPM.xs | 16 |
2 files changed, 12 insertions, 5 deletions
@@ -1,4 +1,5 @@ - drop import_pubkey function (dead for 5 years) +- fix importing pubkeys with rpm-4.10.0 (eg: when adding media) Version 4.0 - 8 June 2012 @@ -1231,9 +1231,9 @@ read_config_files(int force) { return rc; } -static void +static rpmVSFlags ts_nosignature(rpmts ts) { - rpmtsSetVSFlags(ts, _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES); + return rpmtsSetVSFlags(ts, _RPMVSF_NODIGESTS | _RPMVSF_NOSIGNATURES); } static void *rpmRunTransactions_callback(__attribute__((unused)) const void *h, @@ -2518,10 +2518,11 @@ Db_traverse(db,callback) PREINIT: Header header; rpmdbMatchIterator mi; + rpmVSFlags ovsflags; int count = 0; CODE: db->ts = rpmtsLink(db->ts); - ts_nosignature(db->ts); + ovsflags = ts_nosignature(db->ts); mi = rpmtsInitIterator(db->ts, RPMDBI_PACKAGES, NULL, 0); while ((header = rpmdbNextIterator(mi))) { if (SvROK(callback)) { @@ -2543,6 +2544,7 @@ Db_traverse(db,callback) ++count; } rpmdbFreeIterator(mi); + rpmtsSetVSFlags(db->ts, ovsflags); (void)rpmtsFree(db->ts); RETVAL = count; OUTPUT: @@ -2558,6 +2560,7 @@ Db_traverse_tag(db,tag,names,callback) Header header; rpmdbMatchIterator mi; int count = 0; + rpmVSFlags ovsflags; CODE: if (SvROK(names) && SvTYPE(SvRV(names)) == SVt_PVAV) { AV* names_av = (AV*)SvRV(names); @@ -2571,7 +2574,7 @@ Db_traverse_tag(db,tag,names,callback) SV **isv = av_fetch(names_av, i, 0); char *name = SvPV(*isv, str_len); db->ts = rpmtsLink(db->ts); - ts_nosignature(db->ts); + ovsflags = ts_nosignature(db->ts); mi = rpmtsInitIterator(db->ts, rpmtag, name, str_len); while ((header = rpmdbNextIterator(mi))) { if (SvROK(callback)) { @@ -2593,6 +2596,7 @@ Db_traverse_tag(db,tag,names,callback) ++count; } (void)rpmdbFreeIterator(mi); + rpmtsSetVSFlags(db->ts, ovsflags); (void)rpmtsFree(db->ts); } } else croak("bad arguments list"); @@ -2612,8 +2616,9 @@ Db_traverse_tag_find(db,tag,name,callback) CODE: int rpmtag = rpmtag_from_string(tag); int found = 0; + rpmVSFlags ovsflags; db->ts = rpmtsLink(db->ts); - ts_nosignature(db->ts); + ovsflags = ts_nosignature(db->ts); mi = rpmtsInitIterator(db->ts, rpmtag, name, 0); while ((header = rpmdbNextIterator(mi))) { dSP; @@ -2636,6 +2641,7 @@ Db_traverse_tag_find(db,tag,name,callback) break; } } + rpmtsSetVSFlags(db->ts, ovsflags); (void)rpmdbFreeIterator(mi); (void)rpmtsFree(db->ts); RETVAL = found; |