To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to an
empty directory instead, therefore making all used keys unknown for this
single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
---
This was reported by Ævar in [off-list ref].
Just using an empty keyring / gpg homedir should achieve the same effect and
keeps the stress of generating a gpg key out of the CI.
t/t7510-signed-commit.sh | 22 ++--------------------
1 file changed, 2 insertions(+), 20 deletions(-)
@@ -71,25 +71,7 @@ test_expect_success GPG 'create signed commits' 'gittageleventh-signed$(catoid)&&echo12|gitcommit-tree--gpg-sign=B7227189HEAD^{tree}>oid&&test_line_count=1oid&&-gittagtwelfth-signed-alt$(catoid)&&--cat>keydetails<<-\EOF&&-Key-Type:RSA-Key-Length:2048-Subkey-Type:RSA-Subkey-Length:2048-Name-Real:UnknownUser-Name-Email:unknown@git.com-Expire-Date:0-%no-ask-passphrase-%no-protection-EOF-gpg--batch--gen-keykeydetails&&-echo13>file&&gitcommit-a-S"unknown@git.com"-mthirteenth&&-gittagthirteenth-signed&&-DELETE_FINGERPRINT=$(gpg-K--with-colons--fingerprint--batchunknown@git.com|grep"^fpr"|head-n1|awk-F":""{print \$10;}")&&-gpg--batch--yes--delete-secret-keys$DELETE_FINGERPRINT&&-gpg--batch--yes--delete-keysunknown@git.com+gittagtwelfth-signed-alt$(catoid)' test_expect_successGPG'verify and show signatures''
@@ -129,7 +111,7 @@ test_expect_success GPG 'verify and show signatures' '' test_expect_successGPG'verify-commit exits failure on unknown signature''-test_must_failgitverify-committhirteenth-signed2>actual&&+GNUPGHOME=./empty_hometest_must_failgitverify-commitinitial2>actual&&!grep"Good signature from"actual&&!grep"BAD signature from"actual&&grep-q-F-e"No public key"-e"public key not found"actual
To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to an
empty directory instead, therefore making all used keys unknown for this
single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
---
This was reported by Ævar in [off-list ref].
Just using an empty keyring / gpg homedir should achieve the same effect and
keeps the stress of generating a gpg key out of the CI.
Thanks, it would be great to have this in and before v2.35.0. I've run
into several boxes (on the GCC farm) that hang without this patch.
@@ -71,25 +71,7 @@ test_expect_success GPG 'create signed commits' 'gittageleventh-signed$(catoid)&&echo12|gitcommit-tree--gpg-sign=B7227189HEAD^{tree}>oid&&test_line_count=1oid&&-gittagtwelfth-signed-alt$(catoid)&&--cat>keydetails<<-\EOF&&-Key-Type:RSA-Key-Length:2048-Subkey-Type:RSA-Subkey-Length:2048-Name-Real:UnknownUser-Name-Email:unknown@git.com-Expire-Date:0-%no-ask-passphrase-%no-protection-EOF-gpg--batch--gen-keykeydetails&&-echo13>file&&gitcommit-a-S"unknown@git.com"-mthirteenth&&-gittagthirteenth-signed&&-DELETE_FINGERPRINT=$(gpg-K--with-colons--fingerprint--batchunknown@git.com|grep"^fpr"|head-n1|awk-F":""{print \$10;}")&&-gpg--batch--yes--delete-secret-keys$DELETE_FINGERPRINT&&-gpg--batch--yes--delete-keysunknown@git.com+gittagtwelfth-signed-alt$(catoid)' test_expect_successGPG'verify and show signatures''
@@ -129,7 +111,7 @@ test_expect_success GPG 'verify and show signatures' '' test_expect_successGPG'verify-commit exits failure on unknown signature''-test_must_failgitverify-committhirteenth-signed2>actual&&+GNUPGHOME=./empty_hometest_must_failgitverify-commitinitial2>actual&&
Before I noticed this thread (I looked at
https://lore.kernel.org/git/20211230111038.jtoqytdhkilv2732@fs/ first,
and the In-Reply-To chain wasn't connected) I was about to submit
exactly this patch for you but with:
- test_must_fail git verify-commit thirteenth-signed 2>actual &&
+ test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit initial 2>actual &&
Both of those are probably a good thing to do here. I.e.:
1. Didn't we have portability issues with "ENV_VAR=VALUE shell_function ..." ?
2. You're pointing to a nonexisting ./empty_home, but shouldn't we use
$GNUPGHOME_NOT_USED? The existing "show unknown signature with custom format"
test in the same file does that.
On 11.01.2022 17:56, Ævar Arnfjörð Bjarmason wrote:
On Fri, Jan 07 2022, Fabian Stelzer wrote:
quoted
To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to an
empty directory instead, therefore making all used keys unknown for this
single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
---
This was reported by Ævar in [off-list ref].
Just using an empty keyring / gpg homedir should achieve the same effect and
keeps the stress of generating a gpg key out of the CI.
Thanks, it would be great to have this in and before v2.35.0. I've run
into several boxes (on the GCC farm) that hang without this patch.
@@ -71,25 +71,7 @@ test_expect_success GPG 'create signed commits' 'gittageleventh-signed$(catoid)&&echo12|gitcommit-tree--gpg-sign=B7227189HEAD^{tree}>oid&&test_line_count=1oid&&-gittagtwelfth-signed-alt$(catoid)&&--cat>keydetails<<-\EOF&&-Key-Type:RSA-Key-Length:2048-Subkey-Type:RSA-Subkey-Length:2048-Name-Real:UnknownUser-Name-Email:unknown@git.com-Expire-Date:0-%no-ask-passphrase-%no-protection-EOF-gpg--batch--gen-keykeydetails&&-echo13>file&&gitcommit-a-S"unknown@git.com"-mthirteenth&&-gittagthirteenth-signed&&-DELETE_FINGERPRINT=$(gpg-K--with-colons--fingerprint--batchunknown@git.com|grep"^fpr"|head-n1|awk-F":""{print \$10;}")&&-gpg--batch--yes--delete-secret-keys$DELETE_FINGERPRINT&&-gpg--batch--yes--delete-keysunknown@git.com+gittagtwelfth-signed-alt$(catoid)' test_expect_successGPG'verify and show signatures''
@@ -129,7 +111,7 @@ test_expect_success GPG 'verify and show signatures' '' test_expect_successGPG'verify-commit exits failure on unknown signature''-test_must_failgitverify-committhirteenth-signed2>actual&&+GNUPGHOME=./empty_hometest_must_failgitverify-commitinitial2>actual&&
Yeah, sorry about that. I forgot to add the in-reply-to :/
I was about to submit
exactly this patch for you but with:
- test_must_fail git verify-commit thirteenth-signed 2>actual &&
+ test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit initial 2>actual &&
Both of those are probably a good thing to do here. I.e.:
1. Didn't we have portability issues with "ENV_VAR=VALUE shell_function ..." ?
I'm not good with portability stuff and trust your judgment on this.
2. You're pointing to a nonexisting ./empty_home, but shouldn't we use
$GNUPGHOME_NOT_USED? The existing "show unknown signature with custom format"
test in the same file does that.
I was not aware of $GNUPGHOME_NOT_USED but it is used in a similar fashion. However it is set to the old value of $GNUPGHOME before we change it in lib-gpg.sh which seems wrong to me. Wouldn't it then just pick up the gpg homedir of whatever the test environment has?
Using the variable is good, but i would set it to a known empty directory or?
From: Taylor Blau <hidden> Date: 2022-01-11 19:40:52
On Tue, Jan 11, 2022 at 06:26:21PM +0100, Fabian Stelzer wrote:
quoted
I was about to submit
exactly this patch for you but with:
- test_must_fail git verify-commit thirteenth-signed 2>actual &&
+ test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit initial 2>actual &&
Both of those are probably a good thing to do here. I.e.:
1. Didn't we have portability issues with "ENV_VAR=VALUE shell_function ..." ?
I'm not good with portability stuff and trust your judgment on this.
See [1] and the ensuing discussion for a good summary. Re-reading
that thread and comparing it with what we see with `git grep
test_must_fail env -- t` confirms that that
test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit ...
is the right thing to do here.
quoted
2. You're pointing to a nonexisting ./empty_home, but shouldn't we use
$GNUPGHOME_NOT_USED? The existing "show unknown signature with custom format"
test in the same file does that.
I was not aware of $GNUPGHOME_NOT_USED but it is used in a similar fashion.
However it is set to the old value of $GNUPGHOME before we change it in
lib-gpg.sh which seems wrong to me. Wouldn't it then just pick up the gpg
homedir of whatever the test environment has?
Using the variable is good, but i would set it to a known empty directory
or?
Yeah, t7510 captures the value of $GNUPGHOME as $GNUPGHOME_NOT_USED
before sourcing t/lib-gpg.sh. So long as nobody else has tampered with
$GNUPGHOME, they should get `$TRASH_DIRECTORY/gnupg-home-not-used`.
But I'm less certain that there isn't somebody accidentally ignoring the
"not-used" portion of the test $GNUPGHOME ;).
And I don't think that reasoning through it all is that worthwhile, so
I'm fine with what a much more direct ./empty_home here.
Thanks,
Taylor
[1]: https://lore.kernel.org/git/xmqqbn3l3kmc.fsf@gitster.mtv.corp.google.com/
On Tue, Jan 11, 2022 at 06:26:21PM +0100, Fabian Stelzer wrote:
quoted
quoted
I was about to submit
exactly this patch for you but with:
- test_must_fail git verify-commit thirteenth-signed 2>actual &&
+ test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit initial 2>actual &&
Both of those are probably a good thing to do here. I.e.:
1. Didn't we have portability issues with "ENV_VAR=VALUE shell_function ..." ?
I'm not good with portability stuff and trust your judgment on this.
See [1] and the ensuing discussion for a good summary. Re-reading
that thread and comparing it with what we see with `git grep
test_must_fail env -- t` confirms that that
test_must_fail env GNUPGHOME="$GNUPGHOME_NOT_USED" git verify-commit ...
is the right thing to do here.
Thanks. Interesting
quoted
quoted
2. You're pointing to a nonexisting ./empty_home, but shouldn't we use
$GNUPGHOME_NOT_USED? The existing "show unknown signature with custom format"
test in the same file does that.
I was not aware of $GNUPGHOME_NOT_USED but it is used in a similar fashion.
However it is set to the old value of $GNUPGHOME before we change it in
lib-gpg.sh which seems wrong to me. Wouldn't it then just pick up the gpg
homedir of whatever the test environment has?
Using the variable is good, but i would set it to a known empty directory
or?
Yeah, t7510 captures the value of $GNUPGHOME as $GNUPGHOME_NOT_USED
before sourcing t/lib-gpg.sh. So long as nobody else has tampered with
$GNUPGHOME, they should get `$TRASH_DIRECTORY/gnupg-home-not-used`.
But I'm less certain that there isn't somebody accidentally ignoring the
"not-used" portion of the test $GNUPGHOME ;).
And I don't think that reasoning through it all is that worthwhile, so
I'm fine with what a much more direct ./empty_home here.
Yeah. I checked the other uses of GNUPGHOME and the NOT_USED seems fine (and more consistent with existing tests). So let's use it.
Even if some other (non gpg related) test accidentally pollutes this gpghome it would surely not do so with the actual signing key used in the test suite.
Thanks, I'll send a new patch in a second
To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to the
empty $GNUPGHOME_NOT_USED instead, therefore making all used keys unknown
for this single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
---
t/t7510-signed-commit.sh | 22 ++--------------------
1 file changed, 2 insertions(+), 20 deletions(-)
@@ -71,25 +71,7 @@ test_expect_success GPG 'create signed commits' 'gittageleventh-signed$(catoid)&&echo12|gitcommit-tree--gpg-sign=B7227189HEAD^{tree}>oid&&test_line_count=1oid&&-gittagtwelfth-signed-alt$(catoid)&&--cat>keydetails<<-\EOF&&-Key-Type:RSA-Key-Length:2048-Subkey-Type:RSA-Subkey-Length:2048-Name-Real:UnknownUser-Name-Email:unknown@git.com-Expire-Date:0-%no-ask-passphrase-%no-protection-EOF-gpg--batch--gen-keykeydetails&&-echo13>file&&gitcommit-a-S"unknown@git.com"-mthirteenth&&-gittagthirteenth-signed&&-DELETE_FINGERPRINT=$(gpg-K--with-colons--fingerprint--batchunknown@git.com|grep"^fpr"|head-n1|awk-F":""{print \$10;}")&&-gpg--batch--yes--delete-secret-keys$DELETE_FINGERPRINT&&-gpg--batch--yes--delete-keysunknown@git.com+gittagtwelfth-signed-alt$(catoid)' test_expect_successGPG'verify and show signatures''
@@ -129,7 +111,7 @@ test_expect_success GPG 'verify and show signatures' '' test_expect_successGPG'verify-commit exits failure on unknown signature''-test_must_failgitverify-committhirteenth-signed2>actual&&+test_must_failenvGNUPGHOME="$GNUPGHOME_NOT_USED"gitverify-commitinitial2>actual&&!grep"Good signature from"actual&&!grep"BAD signature from"actual&&grep-q-F-e"No public key"-e"public key not found"actual
From: Taylor Blau <hidden> Date: 2022-01-12 18:57:22
On Wed, Jan 12, 2022 at 01:07:57PM +0100, Fabian Stelzer wrote:
To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to the
empty $GNUPGHOME_NOT_USED instead, therefore making all used keys unknown
for this single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
To test for a key that is completely unknown to the keyring we need one
to sign the commit with. This was done by generating a new key and not
add it into the keyring. To avoid the key generation overhead and
problems where GPG did hang in CI during it, switch GNUPGHOME to an
empty directory instead, therefore making all used keys unknown for this
single `verify-commit` call.
Reported-by: Ævar Arnfjörð Bjarmason <redacted>
Signed-off-by: Fabian Stelzer <redacted>
---
This was reported by Ævar in [off-list ref].
Just using an empty keyring / gpg homedir should achieve the same effect and
keeps the stress of generating a gpg key out of the CI.
Looks good to me.
Reviewed-by: Josh Steadmon <redacted>