]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/exec-util.h
cryptenroll: allow to use a public key on a token
[thirdparty/systemd.git] / src / shared / exec-util.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
f18edd8a 2#pragma once
89711996 3
c6e47247
ZJS
4#include <stdbool.h>
5
89711996
ZJS
6#include "time-util.h"
7
c6e47247
ZJS
8typedef int (*gather_stdout_callback_t) (int fd, void *arg);
9
10enum {
11 STDOUT_GENERATE, /* from generators to helper process */
12 STDOUT_COLLECT, /* from helper process to main process */
13 STDOUT_CONSUME, /* process data in main process */
14 _STDOUT_CONSUME_MAX,
15};
16
4b05f0c9 17typedef enum {
43f565c6
YW
18 EXEC_DIR_NONE = 0, /* No execdir flags */
19 EXEC_DIR_PARALLEL = 1 << 0, /* Execute scripts in parallel, if possible */
20 EXEC_DIR_IGNORE_ERRORS = 1 << 1, /* Ignore non-zero exit status of scripts */
21 EXEC_DIR_SET_SYSTEMD_EXEC_PID = 1 << 2, /* Set $SYSTEMD_EXEC_PID environment variable */
6ad9af0b 22 EXEC_DIR_SKIP_REMAINING = 1 << 3, /* Ignore remaining executions when one exit with 77. */
4b05f0c9
MK
23} ExecDirFlags;
24
b3d59367
AZ
25typedef enum ExecCommandFlags {
26 EXEC_COMMAND_IGNORE_FAILURE = 1 << 0,
27 EXEC_COMMAND_FULLY_PRIVILEGED = 1 << 1,
28 EXEC_COMMAND_NO_SETUID = 1 << 2,
29 EXEC_COMMAND_AMBIENT_MAGIC = 1 << 3,
30 EXEC_COMMAND_NO_ENV_EXPAND = 1 << 4,
9de42a6a 31 _EXEC_COMMAND_FLAGS_INVALID = -EINVAL,
b3d59367
AZ
32} ExecCommandFlags;
33
f691157b
YW
34int execute_strv(
35 const char *name,
36 char* const* paths,
8521338f 37 const char *root,
f691157b
YW
38 usec_t timeout,
39 gather_stdout_callback_t const callbacks[_STDOUT_CONSUME_MAX],
40 void* const callback_args[_STDOUT_CONSUME_MAX],
41 char *argv[],
42 char *envp[],
43 ExecDirFlags flags);
44
c6e47247
ZJS
45int execute_directories(
46 const char* const* directories,
47 usec_t timeout,
48 gather_stdout_callback_t const callbacks[_STDOUT_CONSUME_MAX],
49 void* const callback_args[_STDOUT_CONSUME_MAX],
78ec1bb4 50 char *argv[],
4b05f0c9
MK
51 char *envp[],
52 ExecDirFlags flags);
3303d1b2 53
b3d59367
AZ
54int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags);
55int exec_command_flags_to_strv(ExecCommandFlags flags, char ***ex_opts);
56
3303d1b2 57extern const gather_stdout_callback_t gather_environment[_STDOUT_CONSUME_MAX];
b3d59367
AZ
58
59const char* exec_command_flags_to_string(ExecCommandFlags i);
60ExecCommandFlags exec_command_flags_from_string(const char *s);
a6d9111c
ZJS
61
62int fexecve_or_execve(int executable_fd, const char *executable, char *const argv[], char *const envp[]);
3e24e8cd 63
c85cb3bc 64int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret_pid, const char *path, ...) _sentinel_;