diff options
author | Andreas Kling <kling@serenityos.org> | 2022-07-14 21:49:26 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-07-14 23:27:19 +0200 |
commit | ed9b2a85edfb042bba1297c77be9d7b52422b0ce (patch) | |
tree | bb47867d830d164e258e386b109e269922162a10 /Userland/Utilities | |
parent | 976562b8176de1deaa0b420a0b3a9075a34d08cd (diff) | |
download | serenity-ed9b2a85edfb042bba1297c77be9d7b52422b0ce.zip |
Utilities: Add "pledge" utility for launching a sandboxed command
This new command allows you to run any command with an initial set
of pledge promises.
Note that dynamically linked executables won't be able to bootstrap
without at least "stdio rpath prot_exec".
Inspired by http://justine.lol/pledge/ :^)
Diffstat (limited to 'Userland/Utilities')
-rw-r--r-- | Userland/Utilities/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Utilities/pledge.cpp | 24 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index a90eec5537..f3b51a1115 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -175,6 +175,7 @@ target_link_libraries(pathchk LibMain) target_link_libraries(pgrep LibRegex LibMain) target_link_libraries(pidof LibMain) target_link_libraries(ping LibMain) +target_link_libraries(pledge LibMain) target_link_libraries(pls LibCrypt LibMain) target_link_libraries(pmap LibMain) target_link_libraries(pmemdump LibMain) diff --git a/Userland/Utilities/pledge.cpp b/Userland/Utilities/pledge.cpp new file mode 100644 index 0000000000..d54892dbab --- /dev/null +++ b/Userland/Utilities/pledge.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <LibCore/ArgsParser.h> +#include <LibCore/System.h> +#include <LibMain/Main.h> + +ErrorOr<int> serenity_main(Main::Arguments arguments) +{ + StringView promises; + Vector<StringView> command; + + Core::ArgsParser args_parser; + args_parser.add_option(promises, "Space-separated list of pledge promises", "promises", 'p', "promises"); + args_parser.add_positional_argument(command, "Command to execute", "command"); + args_parser.parse(arguments); + + TRY(Core::System::pledge(StringView(), promises)); + TRY(Core::System::exec(command[0], command.span(), Core::System::SearchInPath::Yes)); + return 0; +} |