gnu: slurm: Add patch for a useful fallback shell for ‘salloc’.

* gnu/packages/patches/slurm-23-salloc-fallback-shell.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/parallel.scm (slurm): Use it.
(slurm-22.05, slurm-21.08, slurm-20.11, slurm-20.02)
(slurm-19.05, slurm-18.08): Drop it.

Change-Id: I1498e8d21d631c988edf75a8bcc8d2ae5f244b7a
This commit is contained in:
Ludovic Courtès 2024-05-16 15:53:02 +02:00 committed by Ludovic Courtès
parent 3f800efb0d
commit 422ffb690e
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 49 additions and 1 deletions

View file

@ -0,0 +1,39 @@
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[])