From dc2d3c24fa0e1e148c626b5cd0e3eff3231c2074 Mon Sep 17 00:00:00 2001
From: manschwetusCS <30724946+manschwetusCS@users.noreply.github.com>
Date: Wed, 5 Oct 2022 08:26:40 +0200
Subject: [PATCH] Make pfexec become usable for illumos (#3889)

* Experimental change from OpenIndiana

* resolve pfexec problem, by removing superfluous quotes

* reimplement "wrap_exe"

* remove spaces arround keyword argument assignment

* adapted pfexec unit test

* Try to fix quoting of test expression

* Fix quoting of test expression by replacing ' with "

* Add changelog fragment
---
 changelogs/fragments/3671-illumos-pfexec.yml | 2 ++
 plugins/become/pfexec.py                     | 2 +-
 tests/unit/plugins/become/test_pfexec.py     | 6 +++---
 3 files changed, 6 insertions(+), 4 deletions(-)
 create mode 100644 changelogs/fragments/3671-illumos-pfexec.yml

diff --git a/changelogs/fragments/3671-illumos-pfexec.yml b/changelogs/fragments/3671-illumos-pfexec.yml
new file mode 100644
index 0000000000..b1fcdb31ea
--- /dev/null
+++ b/changelogs/fragments/3671-illumos-pfexec.yml
@@ -0,0 +1,2 @@
+minor_changes:
+  - "become_pfexec - remove superflous quotes preventing exe wrap from working as expected, fixes #3671, see https://github.com/ansible-collections/community.general/issues/3671#issuecomment-1174906473"
diff --git a/plugins/become/pfexec.py b/plugins/become/pfexec.py
index 43237342d4..392ee961f5 100644
--- a/plugins/become/pfexec.py
+++ b/plugins/become/pfexec.py
@@ -102,4 +102,4 @@ class BecomeModule(BecomeBase):
 
         flags = self.get_option('become_flags')
         noexe = not self.get_option('wrap_exe')
-        return '%s %s "%s"' % (exe, flags, self._build_success_command(cmd, shell, noexe=noexe))
+        return '%s %s %s' % (exe, flags, self._build_success_command(cmd, shell, noexe=noexe))
diff --git a/tests/unit/plugins/become/test_pfexec.py b/tests/unit/plugins/become/test_pfexec.py
index 445185c197..350cd5ad27 100644
--- a/tests/unit/plugins/become/test_pfexec.py
+++ b/tests/unit/plugins/become/test_pfexec.py
@@ -32,7 +32,7 @@ def test_pfexec_basic(mocker, parser, reset_cli_args):
     var_options = {}
     cmd = call_become_plugin(task, var_options, cmd=default_cmd, executable=default_exe)
     print(cmd)
-    assert re.match('''%s %s "'echo %s; %s'"''' % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None
+    assert re.match("""%s %s 'echo %s; %s'""" % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None
 
 
 def test_pfexec(mocker, parser, reset_cli_args):
@@ -54,7 +54,7 @@ def test_pfexec(mocker, parser, reset_cli_args):
     var_options = {}
     cmd = call_become_plugin(task, var_options, cmd=default_cmd, executable=default_exe)
     print(cmd)
-    assert re.match('''%s %s "'echo %s; %s'"''' % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None
+    assert re.match("""%s %s 'echo %s; %s'""" % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None
 
 
 def test_pfexec_varoptions(mocker, parser, reset_cli_args):
@@ -79,4 +79,4 @@ def test_pfexec_varoptions(mocker, parser, reset_cli_args):
     }
     cmd = call_become_plugin(task, var_options, cmd=default_cmd, executable=default_exe)
     print(cmd)
-    assert re.match('''%s %s "'echo %s; %s'"''' % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None
+    assert re.match("""%s %s 'echo %s; %s'""" % (pfexec_exe, pfexec_flags, success, default_cmd), cmd) is not None