]>
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); | |
2dc104da | 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 | |
d8b94dd5 MT |
48 | // Standard Input |
49 | typedef int (*pakfire_jail_stdin_callback) | |
50 | (struct pakfire_jail* jail, void* data, int fd); | |
51 | void pakfire_jail_set_stdin_callback(struct pakfire_jail* jail, | |
52 | pakfire_jail_stdin_callback callback, void* data); | |
53 | ||
54 | // Standard Output | |
55 | typedef int (*pakfire_jail_stdout_callback) | |
56 | (struct pakfire_jail* jail, void* data, const char* line, const size_t length); | |
57 | void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail, | |
58 | pakfire_jail_stdout_callback callback, void* data); | |
59 | ||
9f50bf71 | 60 | // Execute |
2015cb92 MT |
61 | typedef int (*pakfire_jail_communicate_in) |
62 | (struct pakfire* pakfire, void* data, int fd); | |
63 | typedef int (*pakfire_jail_communicate_out) | |
64 | (struct pakfire* pakfire, void* data, int priority, const char* line, const size_t length); | |
65 | ||
9fa1afb6 | 66 | enum pakfire_jail_exec_flags { |
1190bb5f MT |
67 | PAKFIRE_JAIL_PTY_FORWARDING = (1 << 0), |
68 | PAKFIRE_JAIL_HAS_NETWORKING = (1 << 1), | |
69 | PAKFIRE_JAIL_NOENT_OK = (1 << 2), | |
70 | PAKFIRE_JAIL_HAS_LOOP_DEVICES = (1 << 3), | |
9fa1afb6 MT |
71 | }; |
72 | ||
ccdd2e95 | 73 | int pakfire_jail_exec( |
2015cb92 MT |
74 | struct pakfire_jail* jail, |
75 | const char* argv[], | |
76 | pakfire_jail_communicate_in callback_in, | |
77 | pakfire_jail_communicate_out callback_out, | |
9fa1afb6 MT |
78 | void* data, |
79 | int flags); | |
2015cb92 | 80 | |
6ce56f90 MT |
81 | #ifdef PAKFIRE_PRIVATE |
82 | ||
15503538 MT |
83 | #include <pakfire/cgroup.h> |
84 | ||
ccdd2e95 MT |
85 | // Capture |
86 | int pakfire_jail_capture_stdout(struct pakfire* pakfire, void* data, | |
87 | int priority, const char* line, size_t length); | |
88 | ||
15503538 MT |
89 | // Resource limits |
90 | int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup); | |
91 | ||
82df3c77 | 92 | // Convenience functions |
12b9b39f | 93 | int pakfire_jail_run(struct pakfire* pakfire, const char* argv[], int flags, char** output); |
4f688bd8 | 94 | int pakfire_jail_run_script(struct pakfire* pakfire, |
49a9babc | 95 | const char* script, const size_t length, const char* argv[], int flags); |
82df3c77 | 96 | |
464a5794 MT |
97 | int pakfire_jail_exec_script(struct pakfire_jail* jail, |
98 | const char* script, | |
99 | const size_t size, | |
100 | const char* args[], | |
101 | pakfire_jail_communicate_in callback_in, | |
102 | pakfire_jail_communicate_out callback_out, | |
103 | void* data); | |
104 | ||
5f6e42a2 | 105 | int pakfire_jail_shell(struct pakfire_jail* jail); |
e43489f7 | 106 | int pakfire_jail_ldconfig(struct pakfire* pakfire); |
f7ffbb93 | 107 | int pakfire_jail_run_systemd_tmpfiles(struct pakfire* pakfire); |
e43489f7 | 108 | |
6ce56f90 | 109 | #endif /* PAKFIRE_PRIVATE */ |
fd37ccaf MT |
110 | |
111 | #endif /* PAKFIRE_JAIL_H */ |