Files
ports/sysutils/polkit/files/patch-test_wrapper.py
T
Olivier Duchateau 23ea6c9b59 sysutils/polkit: update to 127
PR:		291781
Co-authored-by:	Gleb Popov <arrowd@FreeBSD.org>
2026-01-07 12:28:09 +03:00

77 lines
2.8 KiB
Python

--- test/wrapper.py.orig 2026-01-07 09:02:36 UTC
+++ test/wrapper.py
@@ -3,7 +3,9 @@ import os
import argparse
import atexit
import os
+import platform
import subprocess
+import shutil
import sys
import signal
import time
@@ -34,10 +36,11 @@ def setup_test_namespace(data_dir):
subprocess.check_call(["mount", "--bind", os.path.join(data_dir, "etc"), "/etc"])
except PermissionError:
print("Lacking permissions to set up test harness, skipping")
- sys.exit(77)
+ return False
except AttributeError:
print("Python 3.12 is required for os.unshare(), skipping")
- sys.exit(77)
+ return False
+ return True
def stop_dbus(pid: int) -> None:
@@ -69,6 +72,32 @@ def stop_dbus(pid: int) -> None:
signal.signal(signal.SIGTERM, signal.SIG_DFL)
+def setup_test_unconstrained_freebsd(data_dir):
+ passwd = os.path.join(data_dir, "etc", "passwd")
+ with open(passwd, 'r') as file:
+ for line in file:
+ fields = line.split(":")
+ if fields[0] == "root":
+ continue
+ subprocess.call(["pw", "useradd", "-n", fields[0], "-u", fields[2], "-c", fields[4], "-d", fields[5], "-s", fields[6].strip()])
+ group = os.path.join(data_dir, "etc", "group")
+ with open(group, 'r') as file:
+ for line in file:
+ fields = line.split(":")
+ cmd = ["pw", "groupadd", "-n", fields[0], "-g", fields[2]]
+ members = fields[3].strip()
+ if len(members) > 0:
+ cmd.append("-M")
+ cmd.append(members)
+ if fields[0] == "root":
+ cmd = ["pw", "groupmod", "-g", "0", "-l", "root"]
+ subprocess.call(cmd)
+ shutil.copy2(os.path.join(data_dir, "etc", "netgroup"), "/etc/netgroup")
+ shutil.copy2("/usr/bin/true", "/bin/true")
+ bus = dbus.SystemBus()
+ consolekit = bus.get_object("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager")
+ consolekit.GetSeats(dbus_interface="org.freedesktop.ConsoleKit.Manager")
+
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("test_executable",
@@ -79,7 +108,15 @@ if __name__ == "__main__":
help="set up a mock system D-Bus using dbusmock")
args = parser.parse_args()
- setup_test_namespace(args.data_dir)
+ if not setup_test_namespace(args.data_dir):
+ if os.getenv("ALLOW_SYSTEM_AFFECTING_TESTS") == "1":
+ if platform.system() == 'FreeBSD':
+ setup_test_unconstrained_freebsd(args.data_dir)
+ else:
+ setup_test_unconstrained_linux(args.data_dir)
+ else:
+ # skip tests
+ sys.exit(77)
if args.mock_dbus:
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)