unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
blob 53605bf3aeddd8b599f41e2a8426a9713f8c1e5f 1356 bytes (raw)
name: packages/patches/slurm-23-salloc-fallback-shell.patch 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
Have 'salloc' use $SHELL or /bin/sh as the fallback shell.

This is useful in situations where glibc’s 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[])

debug log:

solving 53605bf3aeddd8b599f41e2a8426a9713f8c1e5f ...
found 53605bf3aeddd8b599f41e2a8426a9713f8c1e5f in https://git.savannah.gnu.org/cgit/guix.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).