diff --git a/flake.nix b/flake.nix index e5c9cd0..235e039 100644 --- a/flake.nix +++ b/flake.nix @@ -242,6 +242,7 @@ defaultNixConf = { cores = "1"; max-jobs = "1"; + http-connections = "5"; sandbox = "true"; build-users-group = "nixbld"; trusted-users = [ diff --git a/src/bash.zig b/src/bash.zig index 56971b1..cf83a34 100644 --- a/src/bash.zig +++ b/src/bash.zig @@ -16,19 +16,16 @@ pub fn main(init: std.process.Init) !void { var argv: std.ArrayList([]const u8) = .empty; defer argv.deinit(arena); - try argv.append(arena, "bash"); - var it = try init.minimal.args.iterateAllocator(arena); defer it.deinit(); - _ = it.next(); while (it.next()) |arg| { try argv.append(arena, arg); } try lib.switchToUser(); - try lib.exec(init.gpa, options.bash, argv, &environ_map); + try lib.exec(init.gpa, options.bash, argv.items, &environ_map); // const err = std.process.replace(io, .{ // .argv = argv.items, diff --git a/src/execas.zig b/src/execas.zig index 9e60c68..073f820 100644 --- a/src/execas.zig +++ b/src/execas.zig @@ -4,15 +4,13 @@ const std = @import("std"); const options = @import("options"); +const lib = @import("lib.zig"); + pub fn main(init: std.process.Init) !void { const arena: std.mem.Allocator = init.arena.allocator(); const io = init.io; - const rc = std.os.linux.setuid(options.uid); - switch (std.os.linux.errno(rc)) { - .SUCCESS => {}, - else => |err| return std.posix.unexpectedErrno(err), - } + try lib.switchToUser(); var argv: std.ArrayList([]const u8) = .empty; diff --git a/src/lib/process.zig b/src/lib/process.zig index 5dc461c..bed64ee 100644 --- a/src/lib/process.zig +++ b/src/lib/process.zig @@ -19,8 +19,8 @@ pub fn exec(gpa: std.mem.Allocator, path: []const u8, argv: []const []const u8, const rc = std.os.linux.execve( path0.ptr, argv0.ptr, - block, + block.slice, ); - return std.posix.unexpectedErrno(rc); + return std.posix.unexpectedErrno(std.os.linux.errno(rc)); } diff --git a/src/sh.zig b/src/sh.zig index a11339a..7ec258f 100644 --- a/src/sh.zig +++ b/src/sh.zig @@ -6,9 +6,9 @@ const options = @import("options"); const lib = @import("lib.zig"); -pub fn main(init: std.process.Init) !u8 { +pub fn main(init: std.process.Init) !void { const arena: std.mem.Allocator = init.arena.allocator(); - const io = init.io; + // const io = init.io; var environ_map = try lib.fixupEnvironMap(arena, init.environ_map, .user); defer environ_map.deinit(); @@ -16,24 +16,23 @@ pub fn main(init: std.process.Init) !u8 { var argv: std.ArrayList([]const u8) = .empty; defer argv.deinit(arena); - try argv.append(arena, options.sh); - var it = try init.minimal.args.iterateAllocator(arena); defer it.deinit(); - _ = it.next(); while (it.next()) |arg| { try argv.append(arena, arg); } try lib.switchToUser(); - const err = std.process.replace(io, .{ - .argv = argv.items, - .environ_map = &environ_map, - }); + try lib.exec(init.gpa, options.sh, argv.items, &environ_map); + + // const err = std.process.replace(io, .{ + // .argv = argv.items, + // .environ_map = &environ_map, + // }); - std.debug.print("unable to execute: {t}\n", .{err}); + // std.debug.print("unable to execute: {t}\n", .{err}); - return 127; + // return 127; } diff --git a/src/tail.zig b/src/tail.zig index 762401c..175825b 100644 --- a/src/tail.zig +++ b/src/tail.zig @@ -31,16 +31,17 @@ pub fn main(init: std.process.Init) !void { std.process.setCurrentDir(io, dir) catch break :cwd; } - const err = std.process.replace(io, .{ - .argv = &.{ - options.nix, - "daemon", - }, - .environ_map = &environ_map, - }); - - std.debug.print("unable to execute: {t}\n", .{err}); - return; + try lib.exec(init.gpa, options.nix, &.{ "nix", "daemon" }, &environ_map); + // const err = std.process.replace(io, .{ + // .argv = &.{ + // options.nix, + // "daemon", + // }, + // .environ_map = &environ_map, + // }); + + // std.debug.print("unable to execute: {t}\n", .{err}); + // return; } var environ_map = try lib.fixupEnvironMap(arena, init.environ_map, .user); @@ -49,7 +50,7 @@ pub fn main(init: std.process.Init) !void { var argv: std.ArrayList([]const u8) = .empty; defer argv.deinit(arena); - try argv.append(arena, options.tail); + try argv.append(arena, "tail"); var it = try init.minimal.args.iterateAllocator(arena); defer it.deinit(); @@ -61,10 +62,12 @@ pub fn main(init: std.process.Init) !void { try lib.switchToUser(); - const err = std.process.replace(io, .{ - .argv = argv.items, - .environ_map = &environ_map, - }); + try lib.exec(init.gpa, options.tail, argv.items, &environ_map); - std.debug.print("unable to execute: {t}\n", .{err}); + // const err = std.process.replace(io, .{ + // .argv = argv.items, + // .environ_map = &environ_map, + // }); + + // std.debug.print("unable to execute: {t}\n", .{err}); }