From c6a8697800376a02b868cdea8fc1bf55f12798f1 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 16 Dec 2019 23:14:45 +0100 Subject: 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 --- include/Makefile.am | 1 + include/osmocom/core/exec.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 include/osmocom/core/exec.h (limited to 'include') diff --git a/include/Makefile.am b/include/Makefile.am index dc6eaa7f..b341ee3c 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -23,6 +23,7 @@ nobase_include_HEADERS = \ osmocom/core/crcgen.h \ osmocom/core/endian.h \ osmocom/core/defs.h \ + osmocom/core/exec.h \ osmocom/core/fsm.h \ osmocom/core/gsmtap.h \ osmocom/core/gsmtap_util.h \ 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 + * + * 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); -- cgit v1.2.3