typedef struct ExecCommand ExecCommand;
typedef struct ExecContext ExecContext;
typedef struct ExecRuntime ExecRuntime;
+typedef struct ExecParameters ExecParameters;
#include <linux/types.h>
#include <sys/time.h>
#include "fdset.h"
#include "missing.h"
#include "namespace.h"
+#include "bus-endpoint.h"
typedef enum ExecInput {
EXEC_INPUT_NULL,
bool selinux_context_ignore;
char *selinux_context;
- bool selinux_label_via_net;
bool apparmor_profile_ignore;
char *apparmor_profile;
+ bool smack_process_label_ignore;
+ char *smack_process_label;
+
char **read_write_dirs, **read_only_dirs, **inaccessible_dirs;
unsigned long mount_flags;
bool ioprio_set:1;
bool cpu_sched_set:1;
bool no_new_privileges_set:1;
+
+ /* custom dbus enpoint */
+ BusEndpoint *bus_endpoint;
};
#include "cgroup.h"
+struct ExecParameters {
+ char **argv;
+ int *fds; unsigned n_fds;
+ char **environment;
+ bool apply_permissions;
+ bool apply_chroot;
+ bool apply_tty_stdin;
+ bool confirm_spawn;
+ bool selinux_context_net;
+ CGroupControllerMask cgroup_supported;
+ const char *cgroup_path;
+ bool cgroup_delegate;
+ const char *runtime_prefix;
+ const char *unit_id;
+ usec_t watchdog_usec;
+ int *idle_pipe;
+ char *bus_endpoint_path;
+ int bus_endpoint_fd;
+};
+
int exec_spawn(ExecCommand *command,
- char **argv,
- ExecContext *context,
- int fds[], unsigned n_fds,
- char **environment,
- bool apply_permissions,
- bool apply_chroot,
- bool apply_tty_stdin,
- bool confirm_spawn,
- CGroupControllerMask cgroup_mask,
- const char *cgroup_path,
- const char *runtime_prefix,
- const char *unit_id,
- usec_t watchdog_usec,
- int pipe_fd[2],
+ const ExecContext *context,
+ const ExecParameters *exec_params,
ExecRuntime *runtime,
pid_t *ret);
void exec_command_dump_list(ExecCommand *c, FILE *f, const char *prefix);
void exec_command_append_list(ExecCommand **l, ExecCommand *e);
int exec_command_set(ExecCommand *c, const char *path, ...);
+int exec_command_append(ExecCommand *c, const char *path, ...);
void exec_context_init(ExecContext *c);
void exec_context_done(ExecContext *c);
int exec_context_destroy_runtime_directory(ExecContext *c, const char *runtime_root);
-int exec_context_load_environment(const ExecContext *c, char ***l);
+int exec_context_load_environment(const ExecContext *c, const char *unit_id, char ***l);
bool exec_context_may_touch_console(ExecContext *c);
+bool exec_context_maintains_privileges(ExecContext *c);
void exec_status_start(ExecStatus *s, pid_t pid);
void exec_status_exit(ExecStatus *s, ExecContext *context, pid_t pid, int code, int status);