shared: exec_command_build_json()

This commit is contained in:
Ivan Kruglov
2026-04-15 23:37:55 -07:00
parent 01f6d9e39f
commit bdbbb9cf91
4 changed files with 41 additions and 1 deletions
+22
View File
@@ -4,6 +4,7 @@
#include "bus-common-errors.h"
#include "cpu-set-util.h"
#include "execute.h"
#include "json-util.h"
#include "rlimit-util.h"
#include "varlink-common.h"
@@ -104,3 +105,24 @@ empty:
*ret = NULL;
return 0;
}
int exec_command_build_json(sd_json_variant **ret, const char *name, void *userdata) {
ExecCommand *cmd = ASSERT_PTR(userdata);
assert(ret);
if (isempty(cmd->path)) {
*ret = NULL;
return 0;
}
return sd_json_buildo(
ret,
SD_JSON_BUILD_PAIR_STRING("path", cmd->path),
JSON_BUILD_PAIR_STRV_NON_EMPTY("arguments", cmd->argv),
SD_JSON_BUILD_PAIR_BOOLEAN("ignoreFailure", FLAGS_SET(cmd->flags, EXEC_COMMAND_IGNORE_FAILURE)),
SD_JSON_BUILD_PAIR_BOOLEAN("privileged", FLAGS_SET(cmd->flags, EXEC_COMMAND_FULLY_PRIVILEGED)),
SD_JSON_BUILD_PAIR_BOOLEAN("noSetuid", FLAGS_SET(cmd->flags, EXEC_COMMAND_NO_SETUID)),
SD_JSON_BUILD_PAIR_BOOLEAN("noEnvExpand", FLAGS_SET(cmd->flags, EXEC_COMMAND_NO_ENV_EXPAND)),
SD_JSON_BUILD_PAIR_BOOLEAN("viaShell", FLAGS_SET(cmd->flags, EXEC_COMMAND_VIA_SHELL)));
}
+1 -1
View File
@@ -6,5 +6,5 @@
int rlimit_build_json(sd_json_variant **ret, const char *name, void *userdata);
int rlimit_table_build_json(sd_json_variant **ret, const char *name, void *userdata);
int cpuset_build_json(sd_json_variant **ret, const char *name, void *userdata);
const char* varlink_error_id_from_bus_error(const sd_bus_error *e);
int exec_command_build_json(sd_json_variant **ret, const char *name, void *userdata);
+17
View File
@@ -54,6 +54,23 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_DEFINE_FIELD_BY_TYPE(RTPRIO, ResourceLimit, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(RTTIME, ResourceLimit, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_STRUCT_TYPE(
ExecCommand,
SD_VARLINK_FIELD_COMMENT("Path"),
SD_VARLINK_DEFINE_FIELD(path, SD_VARLINK_STRING, 0),
SD_VARLINK_FIELD_COMMENT("Arguments"),
SD_VARLINK_DEFINE_FIELD(arguments, SD_VARLINK_STRING, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Ignore failure of the command"),
SD_VARLINK_DEFINE_FIELD(ignoreFailure, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Run with full privileges"),
SD_VARLINK_DEFINE_FIELD(privileged, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Skip setuid handling"),
SD_VARLINK_DEFINE_FIELD(noSetuid, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Skip environment variable expansion"),
SD_VARLINK_DEFINE_FIELD(noEnvExpand, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Run via shell"),
SD_VARLINK_DEFINE_FIELD(viaShell, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_ENUM_TYPE(
ExecOutputType,
SD_VARLINK_DEFINE_ENUM_VALUE(inherit),
+1
View File
@@ -8,6 +8,7 @@ extern const sd_varlink_symbol vl_type_ProcessId;
extern const sd_varlink_symbol vl_type_RateLimit;
extern const sd_varlink_symbol vl_type_ResourceLimit;
extern const sd_varlink_symbol vl_type_ResourceLimitTable;
extern const sd_varlink_symbol vl_type_ExecCommand;
extern const sd_varlink_symbol vl_type_ExecOutputType;
extern const sd_varlink_symbol vl_type_CGroupPressureWatch;
extern const sd_varlink_symbol vl_type_ManagedOOMMode;