]>
Commit | Line | Data |
---|---|---|
fd37ccaf MT |
1 | /*############################################################################# |
2 | # # | |
3 | # Pakfire - The IPFire package management system # | |
4 | # Copyright (C) 2022 Pakfire development team # | |
5 | # # | |
6 | # This program is free software: you can redistribute it and/or modify # | |
7 | # it under the terms of the GNU General Public License as published by # | |
8 | # the Free Software Foundation, either version 3 of the License, or # | |
9 | # (at your option) any later version. # | |
10 | # # | |
11 | # This program is distributed in the hope that it will be useful, # | |
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of # | |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | |
14 | # GNU General Public License for more details. # | |
15 | # # | |
16 | # You should have received a copy of the GNU General Public License # | |
17 | # along with this program. If not, see <http://www.gnu.org/licenses/>. # | |
18 | # # | |
19 | #############################################################################*/ | |
20 | ||
21 | #ifndef PAKFIRE_JAIL_H | |
22 | #define PAKFIRE_JAIL_H | |
23 | ||
fd37ccaf MT |
24 | #include <pakfire/pakfire.h> |
25 | ||
26 | struct pakfire_jail; | |
27 | ||
2dc104da MT |
28 | typedef int (*pakfire_jail_log_callback) |
29 | (struct pakfire* pakfire, void* data, int priority, const char* line, size_t length); | |
30 | ||
9fa1afb6 | 31 | int pakfire_jail_create(struct pakfire_jail** jail, struct pakfire* pakfire); |
fd37ccaf MT |
32 | |
33 | struct pakfire_jail* pakfire_jail_ref(struct pakfire_jail* jail); | |
34 | struct pakfire_jail* pakfire_jail_unref(struct pakfire_jail* jail); | |
35 | ||
cc6e2264 MT |
36 | // Mountpoints |
37 | int pakfire_jail_bind(struct pakfire_jail* jail, | |
38 | const char* source, const char* target, int flags); | |
39 | ||
2dc104da MT |
40 | // Callbacks |
41 | void pakfire_jail_set_log_callback(struct pakfire_jail* jail, | |
42 | pakfire_jail_log_callback callback, void* data); | |
43 | ||
cf440db8 MT |
44 | // Resource Limits |
45 | int pakfire_jail_nice(struct pakfire_jail* jail, int nice); | |
46 | ||
335b8a44 MT |
47 | // Timeout |
48 | int pakfire_jail_set_timeout(struct pakfire_jail* jail, unsigned int timeout); | |
49 | ||
32d5f21d MT |
50 | // Environment |
51 | const char* pakfire_jail_get_env(struct pakfire_jail* jail, const char* key); | |
52 | int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* value); | |
939025e7 | 53 | int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]); |
32d5f21d | 54 | |
9f50bf71 | 55 | // Execute |
2015cb92 MT |
56 | typedef int (*pakfire_jail_communicate_in) |
57 | (struct pakfire* pakfire, void* data, int fd); | |
58 | typedef int (*pakfire_jail_communicate_out) | |
59 | (struct pakfire* pakfire, void* data, int priority, const char* line, const size_t length); | |
60 | ||
9fa1afb6 | 61 | enum pakfire_jail_exec_flags { |
282b732a MT |
62 | PAKFIRE_JAIL_HAS_NETWORKING = (1 << 0), |
63 | PAKFIRE_JAIL_NOENT_OK = (1 << 1), | |
64 | PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 2), | |
9fa1afb6 MT |
65 | }; |
66 | ||
ccdd2e95 | 67 | int pakfire_jail_exec( |
2015cb92 MT |
68 | struct pakfire_jail* jail, |
69 | const char* argv[], | |
70 | pakfire_jail_communicate_in callback_in, | |
71 | pakfire_jail_communicate_out callback_out, | |
9fa1afb6 MT |
72 | void* data, |
73 | int flags); | |
2015cb92 | 74 | |
6ce56f90 MT |
75 | #ifdef PAKFIRE_PRIVATE |
76 | ||
15503538 MT |
77 | #include <pakfire/cgroup.h> |
78 | ||
ccdd2e95 MT |
79 | // Capture |
80 | int pakfire_jail_capture_stdout(struct pakfire* pakfire, void* data, | |
81 | int priority, const char* line, size_t length); | |
82 | ||
15503538 MT |
83 | // Resource limits |
84 | int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup); | |
85 | ||
82df3c77 | 86 | // Convenience functions |
12b9b39f | 87 | int pakfire_jail_run(struct pakfire* pakfire, const char* argv[], int flags, char** output); |
4f688bd8 | 88 | int pakfire_jail_run_script(struct pakfire* pakfire, |
49a9babc | 89 | const char* script, const size_t length, const char* argv[], int flags); |
82df3c77 | 90 | |
464a5794 MT |
91 | int pakfire_jail_exec_script(struct pakfire_jail* jail, |
92 | const char* script, | |
93 | const size_t size, | |
94 | const char* args[], | |
95 | pakfire_jail_communicate_in callback_in, | |
96 | pakfire_jail_communicate_out callback_out, | |
97 | void* data); | |
98 | ||
5f6e42a2 | 99 | int pakfire_jail_shell(struct pakfire_jail* jail); |
e43489f7 | 100 | int pakfire_jail_ldconfig(struct pakfire* pakfire); |
f7ffbb93 | 101 | int pakfire_jail_run_systemd_tmpfiles(struct pakfire* pakfire); |
e43489f7 | 102 | |
6ce56f90 | 103 | #endif /* PAKFIRE_PRIVATE */ |
fd37ccaf MT |
104 | |
105 | #endif /* PAKFIRE_JAIL_H */ |