Skip to content

Commit

Permalink
Backport fix for delete_key
Browse files Browse the repository at this point in the history
  • Loading branch information
lkubb committed Dec 11, 2022
1 parent 8d70e42 commit acd2b4d
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 15 deletions.
32 changes: 20 additions & 12 deletions salt/modules/gpg.py
Original file line number Diff line number Diff line change
Expand Up @@ -556,12 +556,10 @@ def delete_key(
key = get_key(keyid=keyid, fingerprint=fingerprint, user=user, gnupghome=gnupghome)

def __delete_key(fingerprint, secret, use_passphrase):
if use_passphrase:
if secret and use_passphrase:
gpg_passphrase = __salt__["pillar.get"]("gpg_passphrase")
if not gpg_passphrase:
ret["res"] = False
ret["message"] = "gpg_passphrase not available in pillar."
return ret
return "gpg_passphrase not available in pillar."
else:
out = gpg.delete_keys(fingerprint, secret, passphrase=gpg_passphrase)
else:
Expand All @@ -570,7 +568,7 @@ def __delete_key(fingerprint, secret, use_passphrase):

if key:
fingerprint = key["fingerprint"]
skey = get_secret_key(keyid, fingerprint, user)
skey = get_secret_key(keyid, fingerprint, user, gnupghome=gnupghome)
if skey:
if not delete_secret:
ret["res"] = False
Expand All @@ -579,19 +577,29 @@ def __delete_key(fingerprint, secret, use_passphrase):
] = "Secret key exists, delete first or pass delete_secret=True."
return ret
else:
if str(__delete_key(fingerprint, True, use_passphrase)) == "ok":
out = __delete_key(fingerprint, True, use_passphrase)
if str(out) == "ok":
# Delete the secret key
ret["message"] = "Secret key for {} deleted\n".format(fingerprint)
ret["message"] = f"Secret key for {fingerprint} deleted\n"
else:
ret["res"] = False
ret[
"message"
] = f"Failed to delete secret key for {fingerprint}: {out}"
return ret

# Delete the public key
if str(__delete_key(fingerprint, False, use_passphrase)) == "ok":
ret["message"] += "Public key for {} deleted".format(fingerprint)
ret["res"] = True
return ret
out = __delete_key(fingerprint, False, use_passphrase)
if str(out) == "ok":
ret["res"] = True
ret["message"] += f"Public key for {fingerprint} deleted"
else:
ret["res"] = False
ret["message"] += f"Failed to delete public key for {fingerprint}: {out}"
else:
ret["res"] = False
ret["message"] = "Key not available in keychain."
return ret
return ret


def get_key(keyid=None, fingerprint=None, user=None, gnupghome=None):
Expand Down
11 changes: 8 additions & 3 deletions tests/pytests/unit/modules/test_gpg.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,8 @@ def test_delete_key_with_passphrase_without_gpg_passphrase_in_pillar(gpghome):
]

_expected_result = {
"res": True,
"message": "gpg_passphrase not available in pillar.",
"res": False,
"message": "Failed to delete secret key for xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx: gpg_passphrase not available in pillar.",
}

mock_opt = MagicMock(return_value="root")
Expand Down Expand Up @@ -545,10 +545,15 @@ def test_delete_key_with_passphrase_with_gpg_passphrase_in_pillar(gpghome):
) as gnupg_delete_keys:
ret = gpg.delete_key("xxxxxxxxxxxxxxxx", delete_secret=True)
assert ret == _expected_result
gnupg_delete_keys.assert_any_call(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
True,
passphrase=GPG_TEST_KEY_PASSPHRASE,
)
gnupg_delete_keys.assert_called_with(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
False,
passphrase=GPG_TEST_KEY_PASSPHRASE,
expect_passphrase=False,
)


Expand Down

0 comments on commit acd2b4d

Please sign in to comment.