diff options
Diffstat (limited to 'execute.h')
-rw-r--r-- | execute.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/execute.h b/execute.h new file mode 100644 index 0000000000..fb952d1e6a --- /dev/null +++ b/execute.h @@ -0,0 +1,59 @@ +/*-*- Mode: C; c-basic-offset: 8 -*-*/ + +#ifndef fooexecutehfoo +#define fooexecutehfoo + +typedef struct ExecStatus ExecStatus; +typedef struct ExecCommand ExecCommand; +typedef struct ExecContext ExecContext; + +#include <sys/time.h> +#include <sys/resource.h> +#include <sys/capability.h> +#include <stdbool.h> +#include <stdio.h> + +#include "list.h" + +struct ExecStatus { + pid_t pid; + time_t timestamp; + int status; /* as in wait() */ +}; + +struct ExecCommand { + char *path; + char **argv; + ExecStatus last_exec_status; + LIST_FIELDS(ExecCommand); +}; + +struct ExecContext { + char **environment; + mode_t umask; + struct rlimit *rlimit[RLIMIT_NLIMITS]; + cap_t capabilities; + bool capabilities_set:1; + bool dumpable:1; + int oom_adjust; + int nice; + char *chdir; + + /* since resolving these names might might involve socket + * connections and we don't want to deadlock ourselves these + * names are resolved on execution only. */ + char *user; + char *group; + char **supplementary_groups; +}; + +int exec_spawn(const ExecCommand *command, const ExecContext *context, pid_t *ret); + +void exec_context_free(ExecContext *c); +void exec_command_free_list(ExecCommand *c); + +void exec_context_dump(ExecContext *c, FILE* f, const char *prefix); + +void exec_context_defaults(ExecContext *c); + +#endif |