From 9f3525d0345c1f4e91c5a7a68043e8efe0a2b5b5 Mon Sep 17 00:00:00 2001 From: Pascal Terjan Date: Sun, 21 Jan 2018 12:31:14 +0000 Subject: Fix Urpm_verify_rpm during install Signatures can't be verified as pubkeys are not available, the code ignores it but that broke with rpm 4.14 (mga#21886). Switch to using rpmtsSetVSFlags and rpmReadPackageFile which should work with older versions too. --- NEWS | 2 ++ URPM.xs | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index edf131d..18c361f 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,8 @@ o advertize the proper pkg for most distros o skip all rpmdb tests on Debian/Ubutun o skip failing tests on *BSD +- switch Urpm_verify_rpm rpmReadPackageFile to support ignoring signatures with + rpm 4.14 Version 5.15 - 3 October 2017 diff --git a/URPM.xs b/URPM.xs index 65729a5..c40dea9 100644 --- a/URPM.xs +++ b/URPM.xs @@ -3073,34 +3073,35 @@ Urpm_verify_rpm(filename, ...) PREINIT: FD_t fd; int i, oldlogmask; - rpmts ts = NULL; - struct rpmQVKArguments_s qva; + rpmVSFlags vsflags; CODE: /* Don't display error messages */ oldlogmask = rpmlogSetMask(RPMLOG_UPTO(RPMLOG_PRI(4))); - memset(&qva, 0, sizeof(struct rpmQVKArguments_s)); - qva.qva_source = RPMQV_RPM; - qva.qva_flags = VERIFY_ALL; + vsflags = RPMVSF_DEFAULT; for (i = 1 ; i < items - 1 ; i += 2) { STRLEN len; char *s = SvPV(ST(i), len); if (SvIV(ST(i+1))) { if (len == 9 && !strncmp(s, "nodigests", 9)) - qva.qva_flags &= ~VERIFY_DIGEST; + vsflags |= _RPMVSF_NODIGESTS; else if (len == 12 && !strncmp(s, "nosignatures", 12)) - qva.qva_flags &= ~VERIFY_SIGNATURE; + vsflags |= _RPMVSF_NOSIGNATURES; } } fd = Fopen(filename, "r"); if (fd == NULL) RETVAL = 0; else { + Header h; read_config_files(0); - ts = rpmtsCreate(); + rpmts ts = rpmtsCreate(); rpmtsSetRootDir(ts, "/"); rpmtsOpenDB(ts, O_RDONLY); - RETVAL = rpmVerifySignatures(&qva, ts, fd, filename) ? 0 : 1; + rpmtsSetVSFlags(ts, vsflags); + RETVAL = (rpmReadPackageFile(ts, fd, filename, &h) == RPMRC_OK); Fclose(fd); + if (h) + h = headerFree(h); (void)rpmtsFree(ts); } rpmlogSetMask(oldlogmask); -- cgit v1.2.1