diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-26 16:18:36 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-26 16:18:36 +0000 |
commit | 6c3ea4f47ea280811a7fe53a22f7832e4533c9ec (patch) | |
tree | 3d7ed5da23b5dbf6f9e450dfb61642832249c31e /lib/pwd_init.c | |
parent | Adding upstream version 1:4.13+dfsg1. (diff) | |
download | shadow-6c3ea4f47ea280811a7fe53a22f7832e4533c9ec.tar.xz shadow-6c3ea4f47ea280811a7fe53a22f7832e4533c9ec.zip |
Adding upstream version 1:4.15.2.upstream/1%4.15.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/pwd_init.c')
-rw-r--r-- | lib/pwd_init.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/pwd_init.c b/lib/pwd_init.c new file mode 100644 index 0000000..b3f94e1 --- /dev/null +++ b/lib/pwd_init.c @@ -0,0 +1,56 @@ +/* + * SPDX-FileCopyrightText: 1990 - 1994, Julianne Frances Haugh + * SPDX-FileCopyrightText: 1997 , Marek Michałkiewicz + * SPDX-FileCopyrightText: 2003 - 2005, Tomasz Kłoczko + * SPDX-FileCopyrightText: 2008 , Nicolas François + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <config.h> + +#ident "$Id$" + +#include "defines.h" +#include <signal.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/resource.h> + +#include "prototypes.h" + +/* + * pwd_init - ignore signals, and set resource limits to safe + * values. Call this before modifying password files, so that + * it is less likely to fail in the middle of operation. + */ +void pwd_init (void) +{ + struct rlimit rlim; + + rlim.rlim_cur = rlim.rlim_max = 0; + setrlimit (RLIMIT_CORE, &rlim); + + rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; + setrlimit (RLIMIT_AS, &rlim); + + setrlimit (RLIMIT_CPU, &rlim); + setrlimit (RLIMIT_DATA, &rlim); + setrlimit (RLIMIT_FSIZE, &rlim); + setrlimit (RLIMIT_NOFILE, &rlim); +#ifdef RLIMIT_RSS + setrlimit (RLIMIT_RSS, &rlim); +#endif + setrlimit (RLIMIT_STACK, &rlim); + + signal (SIGALRM, SIG_IGN); + signal (SIGHUP, SIG_IGN); + signal (SIGINT, SIG_IGN); + signal (SIGPIPE, SIG_IGN); + signal (SIGQUIT, SIG_IGN); + signal (SIGTERM, SIG_IGN); + signal (SIGTSTP, SIG_IGN); + signal (SIGTTOU, SIG_IGN); + + umask (077); +} |