me
/
guix
Archived
1
0
Fork 0
This repository has been archived on 2024-08-07. You can view files and clone it, but cannot push or open issues/pull-requests.
guix/gnu/packages/patches/slurm-23-salloc-fallback-sh...

40 lines
1.3 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Have 'salloc' use $SHELL or /bin/sh as the fallback shell.
This is useful in situations where glibcs Name Service Switch (NSS) is
dysfunctional (with getpwuid returning NULL), which can happen when
/etc/nsswitch.conf specifies plugins that fail to be loaded in user code, for
instance because user code is linked against an incompatible libc.
Similar patch submitted upstream: https://bugs.schedmd.com/show_bug.cgi?id=19896
diff --git a/src/salloc/opt.c b/src/salloc/opt.c
index ffff7c8..74563ad 100644
--- a/src/salloc/opt.c
+++ b/src/salloc/opt.c
@@ -329,6 +329,7 @@ static void _opt_args(int argc, char **argv, int het_job_offset)
* NOTE: This function is NOT reentrant (see getpwuid_r if needed) */
static char *_get_shell(void)
{
+ char *shell;
struct passwd *pw_ent_ptr;
if (opt.uid == SLURM_AUTH_NOBODY)
@@ -336,11 +337,13 @@ static char *_get_shell(void)
else
pw_ent_ptr = getpwuid(opt.uid);
- if (!pw_ent_ptr) {
- pw_ent_ptr = getpwnam("nobody");
- warning("no user information for user %u", opt.uid);
+ if (pw_ent_ptr) {
+ shell = pw_ent_ptr->pw_shell;
+ } else {
+ shell = getenv("SHELL") ?: "/bin/sh";
+ warning("no user information for user %u, using '%s' as the shell", opt.uid, shell);
}
- return pw_ent_ptr->pw_shell;
+ return shell;
}
static void _salloc_default_command(int *argcp, char **argvp[])