]> git.ipfire.org Git - pakfire.git/commitdiff
jail: Add functions to set standard input/output callbacks
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 Dec 2023 18:08:50 +0000 (18:08 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 Dec 2023 18:08:50 +0000 (18:08 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/jail.h
src/libpakfire/jail.c
src/libpakfire/libpakfire.sym

index 6185d2016b959c20c5dbb8d39adf34fe4e2e1e4e..e320d6f790aef554e7ff24abb38e65ddd944c889 100644 (file)
@@ -45,6 +45,18 @@ const char* pakfire_jail_get_env(struct pakfire_jail* jail, const char* key);
 int pakfire_jail_set_env(struct pakfire_jail* jail, const char* key, const char* value);
 int pakfire_jail_import_env(struct pakfire_jail* jail, const char* env[]);
 
+// Standard Input
+typedef int (*pakfire_jail_stdin_callback)
+       (struct pakfire_jail* jail, void* data, int fd);
+void pakfire_jail_set_stdin_callback(struct pakfire_jail* jail,
+       pakfire_jail_stdin_callback callback, void* data);
+
+// Standard Output
+typedef int (*pakfire_jail_stdout_callback)
+       (struct pakfire_jail* jail, void* data, const char* line, const size_t length);
+void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail,
+       pakfire_jail_stdout_callback callback, void* data);
+
 // Execute
 typedef int (*pakfire_jail_communicate_in)
        (struct pakfire* pakfire, void* data, int fd);
index 884d2c4a92284a030ac14da46126e8acb2eb2bf6..9433f925158cfb6cbbb3fda1a5bfcf13dfe88cb7 100644 (file)
@@ -136,6 +136,20 @@ struct pakfire_jail {
        // Environment
        char* env[ENVIRON_SIZE];
 
+       struct pakfire_jail_callbacks {
+               // Standard Input
+               struct pakfire_jail_callbacks_stdin {
+                       pakfire_jail_stdin_callback callback;
+                       void* data;
+               } stdin;
+
+               // Standard Output
+               struct pakfire_jail_callbacks_stdout {
+                       pakfire_jail_stdout_callback callback;
+                       void* data;
+               } stdout;
+       } callbacks;
+
        // Mountpoints
        struct pakfire_jail_mountpoint mountpoints[MAX_MOUNTPOINTS];
        unsigned int num_mountpoints;
@@ -536,6 +550,24 @@ ERROR:
        return -1;
 }
 
+/*
+       Standard Input
+*/
+PAKFIRE_EXPORT void pakfire_jail_set_stdin_callback(struct pakfire_jail* jail,
+               pakfire_jail_stdin_callback callback, void* data) {
+       jail->callbacks.stdin.callback = callback;
+       jail->callbacks.stdin.data     = data;
+}
+
+/*
+       Standard Output
+*/
+PAKFIRE_EXPORT void pakfire_jail_set_stdout_callback(struct pakfire_jail* jail,
+               pakfire_jail_stdout_callback callback, void* data) {
+       jail->callbacks.stdout.callback = callback;
+       jail->callbacks.stdout.data     = data;
+}
+
 /*
        This function replaces any logging in the child process.
 
index 6083a70e68c707faa6c18f13730a71d3cf88f21d..425f20f56747ddabd421bd328ec75b24f0869a67 100644 (file)
@@ -181,6 +181,8 @@ global:
        pakfire_jail_nice;
        pakfire_jail_ref;
        pakfire_jail_set_env;
+       pakfire_jail_set_stdin_callback;
+       pakfire_jail_set_stdout_callback;
        pakfire_jail_set_timeout;
        pakfire_jail_unref;