]>
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 | ||
9fa1afb6 | 28 | int pakfire_jail_create(struct pakfire_jail** jail, struct pakfire* pakfire); |
fd37ccaf MT |
29 | |
30 | struct pakfire_jail* pakfire_jail_ref(struct pakfire_jail* jail); | |
31 | struct pakfire_jail* pakfire_jail_unref(struct pakfire_jail* jail); | |
32 | ||
cc6e2264 MT |
33 | // Mountpoints |
34 | int pakfire_jail_bind(struct pakfire_jail* jail, | |
35 | const char* source, const char* target, int flags); | |
36 | ||
cf440db8 MT |
37 | // Resource Limits |
38 | int pakfire_jail_nice(struct pakfire_jail* jail, int nice); | |
39 | ||
335b8a44 MT |
40 | // Timeout |
41 | int pakfire_jail_set_timeout(struct pakfire_jail* jail, unsigned int timeout); | |
42 | ||
32d5f21d MT |
43 | // Environment |
44 | const char* pakfire_jail_get_env(struct pakfire_jail* jail, const char* key); | |
45 | int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* value); | |
939025e7 | 46 | int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]); |
32d5f21d | 47 | |
9f50bf71 | 48 | // Execute |
2015cb92 MT |
49 | typedef int (*pakfire_jail_communicate_in) |
50 | (struct pakfire* pakfire, void* data, int fd); | |
51 | typedef int (*pakfire_jail_communicate_out) | |
52 | (struct pakfire* pakfire, void* data, int priority, const char* line, const size_t length); | |
53 | ||
9fa1afb6 | 54 | enum pakfire_jail_exec_flags { |
282b732a MT |
55 | PAKFIRE_JAIL_HAS_NETWORKING = (1 << 0), |
56 | PAKFIRE_JAIL_NOENT_OK = (1 << 1), | |
57 | PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 2), | |
9fa1afb6 MT |
58 | }; |
59 | ||
ccdd2e95 | 60 | int pakfire_jail_exec( |
2015cb92 MT |
61 | struct pakfire_jail* jail, |
62 | const char* argv[], | |
63 | pakfire_jail_communicate_in callback_in, | |
64 | pakfire_jail_communicate_out callback_out, | |
9fa1afb6 MT |
65 | void* data, |
66 | int flags); | |
2015cb92 | 67 | |
6ce56f90 MT |
68 | #ifdef PAKFIRE_PRIVATE |
69 | ||
15503538 MT |
70 | #include <pakfire/cgroup.h> |
71 | ||
ccdd2e95 MT |
72 | // Capture |
73 | int pakfire_jail_capture_stdout(struct pakfire* pakfire, void* data, | |
74 | int priority, const char* line, size_t length); | |
75 | ||
15503538 MT |
76 | // Resource limits |
77 | int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup); | |
78 | ||
82df3c77 | 79 | // Convenience functions |
12b9b39f | 80 | int pakfire_jail_run(struct pakfire* pakfire, const char* argv[], int flags, char** output); |
4f688bd8 | 81 | int pakfire_jail_run_script(struct pakfire* pakfire, |
49a9babc | 82 | const char* script, const size_t length, const char* argv[], int flags); |
82df3c77 | 83 | |
464a5794 MT |
84 | int pakfire_jail_exec_script(struct pakfire_jail* jail, |
85 | const char* script, | |
86 | const size_t size, | |
87 | const char* args[], | |
88 | pakfire_jail_communicate_in callback_in, | |
89 | pakfire_jail_communicate_out callback_out, | |
90 | void* data); | |
91 | ||
5f6e42a2 | 92 | int pakfire_jail_shell(struct pakfire_jail* jail); |
e43489f7 | 93 | int pakfire_jail_ldconfig(struct pakfire* pakfire); |
f7ffbb93 | 94 | int pakfire_jail_run_systemd_tmpfiles(struct pakfire* pakfire); |
e43489f7 | 95 | |
6ce56f90 | 96 | #endif /* PAKFIRE_PRIVATE */ |
fd37ccaf MT |
97 | |
98 | #endif /* PAKFIRE_JAIL_H */ |