X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fexecute.h;h=187e8d22742fc6aefe858608bb3f2703b9720bee;hp=b612145027e1c2c69c771aa390fb54ac2d36316b;hb=706343f492725fe430879c5d4a3485d7c49b0601;hpb=dacdf153675637258d155faa592b247837b05e42 diff --git a/src/execute.h b/src/execute.h index b61214502..187e8d227 100644 --- a/src/execute.h +++ b/src/execute.h @@ -35,26 +35,27 @@ typedef struct ExecContext ExecContext; #include struct CGroupBonding; +struct CGroupAttribute; #include "list.h" #include "util.h" -/* Abstract namespace! */ -#define LOGGER_SOCKET "/org/freedesktop/systemd1/logger" - -/* This doesn't really belong here, but I couldn't find a better place to put this. */ -#define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT -#define SIGNALS_IGNORE SIGKILL,SIGPIPE - typedef enum KillMode { KILL_CONTROL_GROUP = 0, - KILL_PROCESS_GROUP, KILL_PROCESS, KILL_NONE, _KILL_MODE_MAX, _KILL_MODE_INVALID = -1 } KillMode; +typedef enum KillWho { + KILL_MAIN, + KILL_CONTROL, + KILL_ALL, + _KILL_WHO_MAX, + _KILL_WHO_INVALID = -1 +} KillWho; + typedef enum ExecInput { EXEC_INPUT_NULL, EXEC_INPUT_TTY, @@ -70,7 +71,11 @@ typedef enum ExecOutput { EXEC_OUTPUT_NULL, EXEC_OUTPUT_TTY, EXEC_OUTPUT_SYSLOG, + EXEC_OUTPUT_SYSLOG_AND_CONSOLE, EXEC_OUTPUT_KMSG, + EXEC_OUTPUT_KMSG_AND_CONSOLE, + EXEC_OUTPUT_JOURNAL, + EXEC_OUTPUT_JOURNAL_AND_CONSOLE, EXEC_OUTPUT_SOCKET, _EXEC_OUTPUT_MAX, _EXEC_OUTPUT_INVALID = -1 @@ -94,6 +99,8 @@ struct ExecCommand { struct ExecContext { char **environment; + char **environment_files; + struct rlimit *rlimit[RLIMIT_NLIMITS]; char *working_directory, *root_directory; @@ -117,6 +124,10 @@ struct ExecContext { char *tty_path; + bool tty_reset; + bool tty_vhangup; + bool tty_vt_disallocate; + /* Since resolving these names might might involve socket * connections and we don't want to deadlock ourselves these * names are resolved on execution only and in the child @@ -127,6 +138,8 @@ struct ExecContext { char *pam_name; + char *utmp_id; + char **read_write_dirs, **read_only_dirs, **inaccessible_dirs; unsigned long mount_flags; @@ -135,6 +148,7 @@ struct ExecContext { /* Not relevant for spawning processes, just for killing */ KillMode kill_mode; int kill_signal; + bool send_sigkill; cap_t capabilities; int secure_bits; @@ -146,6 +160,9 @@ struct ExecContext { bool cpu_sched_reset_on_fork; bool non_blocking; bool private_tmp; + bool private_network; + + bool control_group_modify; /* This is not exposed to the user but available * internally. We need it to make sure that whenever we spawn @@ -171,6 +188,7 @@ int exec_spawn(ExecCommand *command, bool apply_tty_stdin, bool confirm_spawn, struct CGroupBonding *cgroup_bondings, + struct CGroupAttribute *cgroup_attributes, pid_t *ret); void exec_command_done(ExecCommand *c); @@ -189,15 +207,24 @@ int exec_command_set(ExecCommand *c, const char *path, ...); void exec_context_init(ExecContext *c); void exec_context_done(ExecContext *c); void exec_context_dump(ExecContext *c, FILE* f, const char *prefix); +void exec_context_tty_reset(const ExecContext *context); + +int exec_context_load_environment(const ExecContext *c, char ***l); void exec_status_start(ExecStatus *s, pid_t pid); -void exec_status_exit(ExecStatus *s, pid_t pid, int code, int status); +void exec_status_exit(ExecStatus *s, ExecContext *context, pid_t pid, int code, int status); void exec_status_dump(ExecStatus *s, FILE *f, const char *prefix); const char* exec_output_to_string(ExecOutput i); -int exec_output_from_string(const char *s); +ExecOutput exec_output_from_string(const char *s); const char* exec_input_to_string(ExecInput i); -int exec_input_from_string(const char *s); +ExecInput exec_input_from_string(const char *s); + +const char *kill_mode_to_string(KillMode k); +KillMode kill_mode_from_string(const char *s); + +const char *kill_who_to_string(KillWho k); +KillWho kill_who_from_string(const char *s); #endif