X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=execute.h;h=d2ac4a82e006cbc1cabab6d57f86c5bf375d6ac9;hb=ba8c0bef6bbb3f8cb92e0bf381fbe5a84584506f;hp=4f700efd4623c3ddd9f1d7e5e895979d33944d3f;hpb=0acb83e9e63206af9a2c6a35ca054453d235458a;p=elogind.git diff --git a/execute.h b/execute.h index 4f700efd4..d2ac4a82e 100644 --- a/execute.h +++ b/execute.h @@ -3,6 +3,25 @@ #ifndef fooexecutehfoo #define fooexecutehfoo +/*** + This file is part of systemd. + + Copyright 2010 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with systemd; If not, see . +***/ + typedef struct ExecStatus ExecStatus; typedef struct ExecCommand ExecCommand; typedef struct ExecContext ExecContext; @@ -14,31 +33,37 @@ typedef struct ExecContext ExecContext; #include #include +struct CGroupBonding; + #include "list.h" #include "util.h" /* Abstract namespace! */ -#define LOGGER_SOCKET "/org/freedesktop.org/systemd1/logger" +#define LOGGER_SOCKET "/org/freedesktop/systemd1/logger" + +typedef enum ExecInput { + EXEC_INPUT_NULL, + EXEC_INPUT_TTY, + EXEC_INPUT_TTY_FORCE, + EXEC_INPUT_TTY_FAIL, + _EXEC_INPUT_MAX, + _EXEC_INPUT_INVALID = -1 +} ExecInput; typedef enum ExecOutput { - EXEC_OUTPUT_CONSOLE, + EXEC_OUTPUT_INHERIT, EXEC_OUTPUT_NULL, + EXEC_OUTPUT_TTY, EXEC_OUTPUT_SYSLOG, EXEC_OUTPUT_KERNEL, _EXEC_OUTPUT_MAX, _EXEC_OUTPUT_INVALID = -1 } ExecOutput; -typedef enum ExecInput { - EXEC_INPUT_NULL, - EXEC_INPUT_CONSOLE, - _EXEC_INPUT_MAX, - _EXEC_INPUT_INVALID = -1 -} ExecInput; - struct ExecStatus { pid_t pid; - usec_t timestamp; + usec_t start_timestamp; + usec_t exit_timestamp; int code; /* as in siginfo_t::si_code */ int status; /* as in sigingo_t::si_status */ }; @@ -71,13 +96,17 @@ struct ExecContext { bool timer_slack_ns_set:1; bool cpu_sched_reset_on_fork; + bool non_blocking; + + ExecInput std_input; + ExecOutput std_output; + ExecOutput std_error; + + char *tty_path; - ExecInput input; - ExecOutput output; int syslog_priority; char *syslog_identifier; - /* FIXME: all privs related settings need to be enforced */ cap_t capabilities; int secure_bits; uint64_t capability_bounding_set_drop; @@ -115,18 +144,35 @@ typedef enum ExitStatus { EXIT_LIMITS, EXIT_OOM_ADJUST, EXIT_SIGNAL_MASK, - EXIT_INPUT, - EXIT_OUTPUT, - EXIT_CHROOT, - EXIT_PGID, + EXIT_STDIN, + EXIT_STDOUT, + EXIT_CHROOT, /* 210 */ EXIT_IOPRIO, EXIT_TIMERSLACK, EXIT_SECUREBITS, EXIT_SETSCHEDULER, - EXIT_CPUAFFINITY + EXIT_CPUAFFINITY, + EXIT_GROUP, + EXIT_USER, + EXIT_CAPABILITIES, + EXIT_CGROUP, + EXIT_SETSID, /* 220 */ + EXIT_CONFIRM, + EXIT_STDERR + } ExitStatus; -int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds, unsigned n_fds, pid_t *ret); +int exec_spawn(ExecCommand *command, + const ExecContext *context, + int *fds, unsigned n_fds, + bool apply_permissions, + bool apply_chroot, + bool confirm_spawn, + struct CGroupBonding *cgroup_bondings, + pid_t *ret); + +void exec_command_done(ExecCommand *c); +void exec_command_done_array(ExecCommand *c, unsigned n); void exec_command_free_list(ExecCommand *c); void exec_command_free_array(ExecCommand **c, unsigned n); @@ -134,12 +180,15 @@ void exec_command_free_array(ExecCommand **c, unsigned n); char *exec_command_line(ExecCommand *c); void exec_command_dump(ExecCommand *c, FILE *f, const char *prefix); 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, ...); 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_status_fill(ExecStatus *s, 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); @@ -147,4 +196,6 @@ int exec_output_from_string(const char *s); const char* exec_input_to_string(ExecInput i); int exec_input_from_string(const char *s); +const char* exit_status_to_string(ExitStatus status); + #endif