[PATCH] sec-keys.eclass: detect conflicting key name/remote mappings
Zhixu Liu <[email protected]> Sun, 26 Jul 2026 23:27:55 +0800
| Newsgroups | gmane.linux.gentoo.devel |
|---|---|
| Message-ID | <CALMA0xZV4XH=cS4XM8Prwfkq3oN5m4_+TnqgZhBRYkzPDJS++w@mail.gmail.com> |
Detect conflicting SEC_KEYS_VALIDPGPKEYS entries where the same name/remote pair maps to different OpenPGP fingerprints. For keyserver-based remotes (gentoo, openpgp and Ubuntu), the fingerprint is part of the download URL while the target filename is derived only from the key name and remote. So multiple fingerprints for the same name/remote pair would overwrite each other. Github downloads are keyed by user name only and can include multiple fingerprints, so the overwrite is harmless. Reject such configurations early with a descriptive error message. Closes: https://bugs.gentoo.org/979441 Signed-off-by: Z. Liu <[email protected]> --- eclass/sec-keys.eclass | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/eclass/sec-keys.eclass b/eclass/sec-keys.eclass index b53b7143bea65..0f93183e560b2 100644 --- a/eclass/sec-keys.eclass +++ b/eclass/sec-keys.eclass @@ -63,7 +63,8 @@ inherit eapi9-pipestatus edo # - manual -- do not add to SRC_URI, the ebuild will provide a custom # download location _sec_keys_set_globals() { - local key fingerprint name loc locations=() remote + local -A name_loc_fpr=() + local key key_id fingerprint name loc locations=() remote for key in "${SEC_KEYS_VALIDPGPKEYS[@]}"; do fingerprint=${key%%:*} @@ -80,6 +81,23 @@ _sec_keys_set_globals() { manual) continue;; *) die "${ECLASS}: unknown PGP key remote: ${loc}";; esac + + # github remote depends only on the user name. Other remotes include the + # fingerprint in the URL, so prevent multiple fingerprints from mapping + # to the same output file. + key_id="${name}:${loc}" + case ${loc} in + gentoo|openpgp|ubuntu) + if [[ -v "name_loc_fpr[${key_id}]" ]] && + [[ ${name_loc_fpr["${key_id}"]} != "${fingerprint}" ]] + then + die "${ECLASS}: ${key_id} maps to multiple fingerprints: " \ + "${name_loc_fpr["${key_id}"]} and ${fingerprint}" + fi + name_loc_fpr["${key_id}"]=${fingerprint} + ;; + esac + SRC_URI+=" ${remote} -> openpgp-keys-${name}-${loc}-${PV}.asc " -- 2.49.1