bunpen: implement --bunpen-debug=n for more controlled logging

This commit is contained in:
2024-08-27 20:48:26 +00:00
parent fb894bb7a5
commit e5cdd53537
5 changed files with 14 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ export type cli_opts = struct {
// command to `exec` within the sandbox
cmd: []str,
// `--bunpen-debug`
debug: bool,
debug: uint,
drop_shell: bool,
// `--bunpen-help`
help: bool,
@@ -25,8 +25,9 @@ export fn usage() void = {
fmt::println("sandbox args:")!;
fmt::println(" --bunpen-help")!;
fmt::println(" show this message")!;
fmt::println(" --bunpen-debug")!;
fmt::println(" --bunpen-debug[=n]")!;
fmt::println(" print debug messages to stderr")!;
fmt::println(" omit `n` for light debugging, or specify n=0/1/2/3 where higher = more verbose")!;
fmt::println(" --bunpen-drop-shell")!;
fmt::println(" instead of running the program, drop into an interactive shell")!;
// fmt::println(" --bunpen-replace-cli <bin>")!;
@@ -84,7 +85,11 @@ export fn parse_args(args: []str) cli_opts = {
next = &args[idx+1];
};
switch (arg) {
case "--bunpen-debug" => parsed.debug = true;
case "--bunpen-debug" => parsed.debug = 2;
case "--bunpen-debug=0" => parsed.debug = 0;
case "--bunpen-debug=1" => parsed.debug = 1;
case "--bunpen-debug=2" => parsed.debug = 2;
case "--bunpen-debug=3" => parsed.debug = 3;
case "--bunpen-drop-shell" => parsed.drop_shell = true;
case "--bunpen-help" => parsed.help = true;
case "--bunpen-home-path" => idx += 1; append(parsed.home_paths, expect_arg("--bunpen-home-path", next));

View File

@@ -9,7 +9,7 @@ use path;
export type help = !void;
export type cli_request = struct {
debug: bool,
debug: uint,
// args to invoke the binary with.
// `exec_args[0]` is, by convention, the name of the executable,
// relevant for multi-call binaries like `busybox`.

View File

@@ -35,9 +35,7 @@ export fn main() void = {
};
log::tree::install(tree::global);
if (req.debug) {
log::tree::set_level(tree::global, 2); // TODO: make more configurable
};
log::tree::set_level(tree::global, req.debug);
let what = restrict::resources {
paths = req.paths,

View File

@@ -45,7 +45,7 @@ export fn namespace_restrict(what: *resources) void = {
isolate_paths(what.paths);
// try to change to the old working directory;
// this can fail if it's not within the sandbox.
rtext::swallow_error("[namespace] restore $PWD", os::chdir(pwd));
rtext::swallow_error("namespace: restore $PWD", os::chdir(pwd));
// TODO: CLONE_NEWPID (might not work without forking to also become reaper)
};

View File

@@ -17,9 +17,9 @@ export fn swallow_error(context: str, what: (void | fs::error | os::exec::error
match (what) {
// N.B.: use `println(...)` over `printfln("{}: {}")` so that my treelogger
// can extract the context.
case let e: fs::error => log::println(context, ": ", fs::strerror(e));
case let e: os::exec::error => log::println(context, ": ", os::exec::strerror(e));
case let e: rt::errno => log::println(context, ": ", rt::errname(e), ": ", rt::strerror(e));
case let e: fs::error => log::println(context, ":", fs::strerror(e));
case let e: os::exec::error => log::println(context, ":", os::exec::strerror(e));
case let e: rt::errno => log::println(context, ":", rt::errname(e), ":", rt::strerror(e));
case => void;
};
};