summaryrefslogtreecommitdiffstats
path: root/test/units/parsing/vault
diff options
context:
space:
mode:
authorAdrian Likins <alikins@redhat.com>2017-04-18 19:09:02 +0200
committerBrian Coca <bcoca@users.noreply.github.com>2017-04-18 19:09:02 +0200
commitae3d7fb29ed3aac413aea05384dd60eacc5f738c (patch)
treea691173aed946b88b0c9746efab7259a51a63715 /test/units/parsing/vault
parentWhen become_method is su, self._play_context.prompt is a function. Fixes #23689 (diff)
downloadansible-ae3d7fb29ed3aac413aea05384dd60eacc5f738c.tar.xz
ansible-ae3d7fb29ed3aac413aea05384dd60eacc5f738c.zip
Fix vault reading from stdin (avoid realpath() on non-links) (#23583)
* Fix vault reading from stdin (avoid realpath() on non-links) os.path.realpath() is used to find the target of file paths that are symlinks so vault operations happen directly on the target. However, in addition to resolving symlinks, realpath() also returns a full path. when reading from stdin, vault cli uses '-' as a special file path so VaultEditor() will replace with stdin. realpath() was expanding '-' with the CWD to something like '/home/user/playbooks/-' causing errors like: ERROR! [Errno 2] No such file or directory: u'/home/user/ansible/-' Fix is to specialcase '-' to not use realpath() Fixes #23567 * to_text decrypt output when writing to stdout
Diffstat (limited to 'test/units/parsing/vault')
-rw-r--r--test/units/parsing/vault/test_vault_editor.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/units/parsing/vault/test_vault_editor.py b/test/units/parsing/vault/test_vault_editor.py
index 51b8301a0d..259761ba35 100644
--- a/test/units/parsing/vault/test_vault_editor.py
+++ b/test/units/parsing/vault/test_vault_editor.py
@@ -516,3 +516,29 @@ class TestVaultEditor(unittest.TestCase):
assert vl.cipher_name == "AES256", "wrong cipher name set after rekey: %s" % vl.cipher_name
assert error_hit is False, "error decrypting migrated 1.0 file"
assert dec_data.strip() == b"foo", "incorrect decryption of rekeyed/migrated file: %s" % dec_data
+
+ def test_real_path_dash(self):
+ filename = '-'
+ ve = vault.VaultEditor('password')
+
+ res = ve._real_path(filename)
+ self.assertEqual(res, '-')
+
+ def test_real_path_dev_null(self):
+ filename = '/dev/null'
+ ve = vault.VaultEditor('password')
+
+ res = ve._real_path(filename)
+ self.assertEqual(res, '/dev/null')
+
+ def test_real_path_symlink(self):
+ self._test_dir = self._create_test_dir()
+ file_path = self._create_file(self._test_dir, 'test_file', content=b'this is a test file')
+ file_link_path = os.path.join(self._test_dir, 'a_link_to_test_file')
+
+ os.symlink(file_path, file_link_path)
+
+ ve = vault.VaultEditor('password')
+
+ res = ve._real_path(file_link_path)
+ self.assertEqual(res, file_path)