aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Vignaud <tv@mageia.org>2012-06-11 10:32:18 +0000
committerThierry Vignaud <tv@mageia.org>2012-06-11 10:32:18 +0000
commit44b86ac71b0c15b49be210237a234888e2d449ce (patch)
tree841bd189ee3b6c7f5668ce55bc528ff192215a13
parente52a0133388ed094b450ceeda87f074d24d7befc (diff)
downloadperl-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--NEWS1
-rw-r--r--URPM.xs16
2 files changed, 12 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index cc241b1..8eb2c7d 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/URPM.xs b/URPM.xs
index 60f0a6b..6c3917c 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -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;