diff --git a/src/_utils/_git_secret_tools.sh b/src/_utils/_git_secret_tools.sh index a12c26da..0d23e565 100644 --- a/src/_utils/_git_secret_tools.sh +++ b/src/_utils/_git_secret_tools.sh @@ -567,17 +567,6 @@ function _get_encrypted_filename { } -function _parse_keyring_users { - # First argument must be a `sed` pattern - local sed_pattern="$1" - - local result - - local secrets_dir_keys - secrets_dir_keys=$(_get_secrets_dir_keys) - result=$($SECRETS_GPG_COMMAND --homedir "$secrets_dir_keys" --no-permission-warning --list-public-keys --with-colon | sed -n "$sed_pattern") - echo "$result" -} function _get_users_in_keyring { @@ -585,7 +574,15 @@ function _get_users_in_keyring { # `whoknows` command uses it internally. # It basically just parses the `gpg` public keys - _parse_keyring_users 's/.*<\(.*\)>.*/\1/p' + local secrets_dir_keys + secrets_dir_keys=$(_get_secrets_dir_keys) + + # pluck out 'uid' lines, fetch 10th field, extract part in <> if it exists (else leave alone) + # we use --fixed-list-mode so older versions of gpg emit 'uid:' lines + local result + result=$($SECRETS_GPG_COMMAND --homedir "$secrets_dir_keys" --no-permission-warning --list-public-keys --with-colon --fixed-list-mode | grep ^uid: | gawk -F':' '{print $10;}' | sed 's/.*<\(.*\)>.*/\1/') + + echo "$result" } @@ -594,7 +591,9 @@ function _get_recipients { # These users are called 'recipients' in the `gpg` terms. # It basically just parses the `gpg` public keys - _parse_keyring_users 's/.*<\(.*\)>.*/-r\1/p' + local result + result=$(_get_users_in_keyring | sed 's/^/-r/') # put -r before each user + echo "$result" } diff --git a/tests/_test_base.bash b/tests/_test_base.bash index fd1ee127..15819052 100644 --- a/tests/_test_base.bash +++ b/tests/_test_base.bash @@ -33,9 +33,10 @@ GPGTEST="$SECRETS_GPG_COMMAND --homedir=$TEST_GPG_HOMEDIR --no-permission-warnin # Personal data: -TEST_DEFAULT_USER="user1" -TEST_SECOND_USER="user2" # shellcheck disable=2034 -TEST_ATTACKER_USER="attacker1" # shellcheck disable=2034 +# user3 created with '--quick-key-generate' and has only an email, no username. +TEST_DEFAULT_USER="user3" +TEST_SECOND_USER="user2" +TEST_ATTACKER_USER="attacker1" #TEST_DEFAULT_FILENAME="file_one" # no spaces #TEST_SECOND_FILENAME="file_two" # no spaces diff --git a/tests/fixtures/gpg/README.md b/tests/fixtures/gpg/README.md new file mode 100644 index 00000000..22b313d0 --- /dev/null +++ b/tests/fixtures/gpg/README.md @@ -0,0 +1,11 @@ +== public/private key pairs for test keys + +* user1 and user2 are normal gpg key sets for user1@gitsecret.io and + user2@gitsecret.io. They have the passwords 'user1pass' and 'user2pass', + respectively. + +* user3 was created by `gpg --quick-generate user3@gitsecret.io` + and therefore has only an email associated with it (no username). + It has the password 'user3pass' as the tests expect. + This user was created to fix https://github.com/sobolevn/git-secret/issues/227 , + "keys with no info but the email address not recognized by whoknows" diff --git a/tests/fixtures/gpg/user3/private.key b/tests/fixtures/gpg/user3/private.key new file mode 100644 index 00000000..21810192 --- /dev/null +++ b/tests/fixtures/gpg/user3/private.key @@ -0,0 +1,59 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +t8BLVRdOiK5wCW5ErIHh7mpgpvRK4Q== +=3Kdr +-----END PGP PRIVATE KEY BLOCK----- diff --git a/tests/fixtures/gpg/user3/public.key b/tests/fixtures/gpg/user3/public.key new file mode 100644 index 00000000..3a50993b --- /dev/null +++ b/tests/fixtures/gpg/user3/public.key @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFtLVc0BCACwGHyefi/z8xeH6KpLN2k9+PlHAPpwJaW+8siaWjbQenkbWX6/ +cVBFBwLNVCY+UacKNKVPxYDgS9UkAGlqD1GRGISh9uvIKW/w4T2LBxDQBGlYsTdL +KhOY1eTb5c7fa3ai17CqNam384+fqD9WCiK3PnO/1QLW48E8Q3R7JgyxmFB96FCb +PZuRAMcBmKR7aa2yp493gGoI6Ts04gd33zDex0Qywz7u1rKNp/Sirb35nJUZ7Q63 +fof2LXSaJXEnHMdE6BFMkIhSluMAICxnb8uD57QilPSh3dkd5VmZAwd0dFV9orLA +zlBnRu/VOmQA3bXaT8/g+F0XiA/r+4ARLnyRABEBAAG0EnVzZXIzQGdpdHNlY3Jl +dC5pb4kBVAQTAQgAPhYhBHP8k4RMwYJK33MPsbP8kwgK5TtRBQJbS1XNAhsDBQkD +wmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJELP8kwgK5TtR/RUIAILLv/ij +FXzZ87KgikMi4PQ+WGpgXe8G5ownzwQS3TKAFSpk2QsWwzrOcFK3midxCqhUVRJ+ +U+92yPUlGkSa2BXQI5xGud8wLTFdEYHSJi64jFfgKKg4pNtJnRs95jCPXNxvSIvj +ZbTtbutl1U9xotlQhoezRLBMCyjfQCZx9D6AnpcrBHkD6u/pDlrDHkjE5SarwRA7 +Yca2nm9GH2QxWnjLH4sdXMQOsPHANDy6coaRN5a14RjIFv71vO+JA5Oop13ueP5i +f0cK3Djn4Wz2R4vVx3Mu3/2owMU1GOvZbnbZlb79KYfv469u0TeqNmuu1jc1hFrD +18WpPSv3XEU2pqu5AQ0EW0tVzQEIAPZv9pwPyKQ8x675NJHPXGTCvGMyHXiTHltY +taaEB0UrcWSlHNHL+7tRExjJzV7iTVV36ytJxzo8d8DJbl0/uTK5X8jeoZUlMYO2 +ndgNxeD1NJOhinrlWj5FNOUYTcZV5Wz8pWzcil/agGDFtdmL63CtDplSv4CTsz2h +aKY3IaRiv+Q4L/zM7mFrGxg1qY60GZx52WRy0fGHdq5nntcYMcK3WHl8xEzM2hWq +HJaaD5dbs7fQdjx/kBffuseC2m4KS7t6PNffk1f6Mt6VHlrZ/ZD5JWzTakaY4Xqf +g8okDek9dh+i5HzC6KIWOJ/FWrUBBCbQnUwl4yK0e75VxfHwoGsAEQEAAYkBNgQY +AQgAIBYhBHP8k4RMwYJK33MPsbP8kwgK5TtRBQJbS1XNAhsMAAoJELP8kwgK5TtR +PWcH/3K5/Xe6gmRqYEG2kI9ZSK9S7Sx87HJetFIP/Zi97u03PcrOaoPhAfmNM5em +OzKTR7f10xWy1NKKitSVTO6SVWcahR5yquUraVrYgkO798LaXc4rm9UtZJrYiFt1 +UTDKkBlvwo5EY9ed9iqmnnnzPKw1yj+JfwAfIL317Pl4eLYBE+PY4fwjiIfGilQD +HBHtkfMs/HgrZpOwHMHMmBg2XaYh5PfTDzPQAougKqeeX5jyrrJTIy9S71o5RhA8 +5jmUGLX8DE2+YnV6n25gvUKO5EkWQFt+KwKEw8B4eROufdVBFe8JAYVN+MN1lLfA +S1UXToiucAluRKyB4e5qYKb0SuE= +=XKbN +-----END PGP PUBLIC KEY BLOCK-----