From e2487c872ae330cd74bb2eb4f09e334e2ff9b34d Mon Sep 17 00:00:00 2001
From: jwindley <jwindley@unknown>
Date: Wed, 17 Dec 2003 18:48:14 +0000
Subject: [PATCH] Allow root user no-op for --uid

---
 src/common/uid.c | 4 ++--
 src/common/uid.h | 2 ++
 src/srun/opt.c   | 5 ++++-
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/common/uid.c b/src/common/uid.c
index 45c4ab45543..1e2a3610072 100644
--- a/src/common/uid.c
+++ b/src/common/uid.c
@@ -19,13 +19,13 @@ uid_t
 uid_from_name( char *name )
 {
 	struct passwd *p = getpwnam( name );
-	return p ? p->pw_uid : 0;
+	return p ? p->pw_uid : NFS_NOBODY;
 }
 
 gid_t
 gid_from_name( char *name )
 {
 	struct group *g = getgrnam( name );
-	return g ? g->gr_gid : 0;
+	return g ? g->gr_gid : NFS_NOBODY;
 }
 
diff --git a/src/common/uid.h b/src/common/uid.h
index 3cc63b1ea32..c6729170567 100644
--- a/src/common/uid.h
+++ b/src/common/uid.h
@@ -1,6 +1,8 @@
 #ifndef __SLURM_UID_UTILITY_H__
 #define __SLURM_UID_UTILITY_H__
 
+#define NFS_NOBODY 65534
+
 int	is_digit_string( char *str );
 uid_t	uid_from_name( char *name );
 gid_t	gid_from_name( char *name );
diff --git a/src/srun/opt.c b/src/srun/opt.c
index 6d204c26a37..ec247668a1a 100644
--- a/src/srun/opt.c
+++ b/src/srun/opt.c
@@ -426,6 +426,9 @@ static void _opt_default()
 	opt.max_exit_timeout= 60; /* Warn user 60 seconds after task exit */
 	opt.msg_timeout     = 5;  /* Default launch msg timeout           */
 
+	opt.euid	    = NULL;
+	opt.egid	    = NULL;
+	
 	mode	= MODE_NORMAL;
 
 #ifdef HAVE_TOTALVIEW
@@ -910,7 +913,7 @@ static bool _opt_verify(void)
 	if ( getuid() == 0 ) {
 		if ( opt.euid ) {
 			euid = _become_user( opt.euid, opt.egid );
-			if ( euid ) {
+			if ( euid != NFS_NOBODY ) {
 				opt.uid = euid;
 				strncpy( opt.user, opt.euid, MAX_USERNAME );
 			} else {
-- 
GitLab