blob: c68681c1ed52f365e5e2a1bb3156c756a735edc1 [file] [log] [blame]
From bb48dbc88a58bc05a43d71a3375fb05358119ec5 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Sun, 20 Mar 2016 20:20:16 -0700
Subject: [PATCH] rpmqv.c: check _gpg_passphrase before ask for input
rpm always asked for pass phrasae when add signature, which made it
can't work non-interactively, this patch fix the problem. It will work
non-interactively if _gpg_passphrase is defined, and work as before if
not.
Upstream-Status: Pending
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
macros/macros.in | 7 +++++--
rpmqv.c | 17 ++++++++++-------
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/macros/macros.in b/macros/macros.in
index 2e5b07d..01b3aad 100644
--- a/macros/macros.in
+++ b/macros/macros.in
@@ -520,15 +520,18 @@ $_arbitrary_tags_tests Foo:Bar
# Macro(s) to hold the arguments passed to GPG/PGP for package
# signing and verification.
#
+
+%_gpg_passphrase_way %{?_gpg_passphrase:--passphrase "%{_gpg_passphrase}"}%{!?_gpg_passphrase:--passphrase-fd 3}
+
%__gpg_check_password_cmd %{__gpg} \
- gpg --batch --no-verbose --passphrase-fd 3 -u "%{_gpg_name}" -so -
+ gpg --batch --no-verbose %{_gpg_passphrase_way} -u "%{_gpg_name}" -so -
#%__pgp_check_password_cmd %{__pgp} \
# pgp +batchmode=on +verbose=0 "%{_pgp_name}" -sf
#%__pgp5_check_password_cmd %{__pgp} \
# pgps +batchmode=on +verbose=0 +armor=off "%{_pgp_name}" -f
%__gpg_sign_cmd %{__gpg} \
- gpg --batch --no-verbose --no-armor --passphrase-fd 3 --no-secmem-warning \
+ gpg --batch --no-verbose --no-armor %{_gpg_passphrase_way} --no-secmem-warning \
-u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename}
#%__pgp_sign_cmd %{__pgp} \
# pgp +batchmode=on +verbose=0 +armor=off \
diff --git a/rpmqv.c b/rpmqv.c
index b306486..7604396 100644
--- a/rpmqv.c
+++ b/rpmqv.c
@@ -831,13 +831,16 @@ int main(int argc, const char ** argv)
#endif
)
{
- passPhrase = Getpass(_("Enter pass phrase: "));
- if (rpmCheckPassPhrase(passPhrase)) {
- fprintf(stderr, _("Pass phrase check failed\n"));
- ec = EXIT_FAILURE;
- goto exit;
+ passPhrase = rpmExpand("%{?_gpg_passphrase}", NULL);
+ if (passPhrase == NULL || passPhrase[0] == '\0') {
+ passPhrase = Getpass(_("Enter pass phrase: "));
+ if (rpmCheckPassPhrase(passPhrase)) {
+ fprintf(stderr, _("Pass phrase check failed\n"));
+ ec = EXIT_FAILURE;
+ goto exit;
+ }
+ fprintf(stderr, _("Pass phrase is good.\n"));
}
- fprintf(stderr, _("Pass phrase is good.\n"));
/* XXX Getpass() should realloc instead. */
passPhrase = xstrdup(passPhrase);
}