diff options
author | Harald Welte <laforge@osmocom.org> | 2019-12-16 23:14:45 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2019-12-17 13:49:28 +0100 |
commit | c6a8697800376a02b868cdea8fc1bf55f12798f1 (patch) | |
tree | e42f7a62ae2a17efd8f10810dfc63d3e776c0809 /include/osmocom | |
parent | 22c7ec3b60d6544d3042a115d519b9311b6bee45 (diff) |
Introduce helper functions for safe fork+exec of processes
In some situations, we want to execute an external shell command
in a non-blocking way. Similar to 'system', but without waiting for
the child to complete. We also want to close all file descriptors
ahead of the exec() and filter + modify the environment.
Change-Id: Ib24ac8a083db32e55402ce496a5eabd8749cc888
Related: OS#4332
Diffstat (limited to 'include/osmocom')
-rw-r--r-- | include/osmocom/core/exec.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/include/osmocom/core/exec.h b/include/osmocom/core/exec.h new file mode 100644 index 00000000..6bbd352c --- /dev/null +++ b/include/osmocom/core/exec.h @@ -0,0 +1,28 @@ +#pragma once +/* (C) 2019 by Harald Welte <laforge@gnumonks.org> + * + * All Rights Reserved + * + * SPDX-License-Identifier: GPL-2.0+ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ +extern const char *osmo_environment_whitelist[]; + +int osmo_environment_filter(char **out, size_t out_len, char **in, const char **whitelist); +int osmo_environment_append(char **out, size_t out_len, char **in); +int osmo_close_all_fds_above(int last_fd_to_keep); +int osmo_system_nowait(const char *command, const char **env_whitelist, char **addl_env); |