aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Mark <[email protected]>2023-09-16 12:33:31 -0700
committerGravatar Mark <[email protected]>2023-10-27 11:59:01 -0700
commitc85bc73cdbab27bfb8903a0744bef834bbf8f7aa (patch)
treee588f4e14adaff1951bf4084d510d82a3f82ab7b
parentMove iter_lstrip to separate utils module (diff)
Refactor creation of NsJail args list into a separate function
-rw-r--r--snekbox/nsjail.py73
1 files changed, 39 insertions, 34 deletions
diff --git a/snekbox/nsjail.py b/snekbox/nsjail.py
index 1d7565d..4e86f33 100644
--- a/snekbox/nsjail.py
+++ b/snekbox/nsjail.py
@@ -2,7 +2,7 @@ import logging
import re
import subprocess
import sys
-from collections.abc import Iterable
+from collections.abc import Iterable, Sequence
from contextlib import nullcontext
from pathlib import Path
from tempfile import NamedTemporaryFile
@@ -162,6 +162,43 @@ class NsJail:
return "".join(output)
+ def _build_args(
+ self, py_args: Iterable[str], nsjail_args: Iterable[str], log_path: str, fs_home: str
+ ) -> Sequence[str]:
+ if self.cgroup_version == 2:
+ nsjail_args = ("--use_cgroupv2", *nsjail_args)
+
+ if self.ignore_swap_limits:
+ nsjail_args = (
+ "--cgroup_mem_memsw_max",
+ "0",
+ "--cgroup_mem_swap_max",
+ "-1",
+ *nsjail_args,
+ )
+
+ nsjail_args = (
+ # Mount `home` with Read/Write access
+ "--bindmount",
+ f"{fs_home}:home",
+ *nsjail_args,
+ )
+
+ return [
+ self.nsjail_path,
+ "--config",
+ self.config_path,
+ "--log",
+ log_path,
+ *nsjail_args,
+ "--",
+ self.config.exec_bin.path,
+ # Filter out empty strings at start of Python args
+ # (causes issues with python cli)
+ *iter_lstrip(self.config.exec_bin.arg),
+ *iter_lstrip(py_args),
+ ]
+
def python3(
self,
py_args: Iterable[str],
@@ -176,44 +213,12 @@ class NsJail:
files: FileAttachments to write to the sandbox prior to running Python.
nsjail_args: Overrides for the NsJail configuration.
"""
- if self.cgroup_version == 2:
- nsjail_args = ("--use_cgroupv2", *nsjail_args)
-
- if self.ignore_swap_limits:
- nsjail_args = (
- "--cgroup_mem_memsw_max",
- "0",
- "--cgroup_mem_swap_max",
- "-1",
- *nsjail_args,
- )
-
with NamedTemporaryFile() as nsj_log, MemFS(
instance_size=self.memfs_instance_size,
home=self.memfs_home,
output=self.memfs_output,
) as fs:
- nsjail_args = (
- # Mount `home` with Read/Write access
- "--bindmount",
- f"{fs.home}:home",
- *nsjail_args,
- )
-
- args = [
- self.nsjail_path,
- "--config",
- self.config_path,
- "--log",
- nsj_log.name,
- *nsjail_args,
- "--",
- self.config.exec_bin.path,
- # Filter out empty strings at start of Python args
- # (causes issues with python cli)
- *iter_lstrip(self.config.exec_bin.arg),
- *iter_lstrip(py_args),
- ]
+ args = self._build_args(py_args, nsjail_args, nsj_log.name, str(fs.home))
# Write provided files if any
files_written: dict[Path, float] = {}