From e8d6584f64a8ecb4c3a22a208e56014906ea803e Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Wed, 30 Jul 2008 17:39:47 +0000
Subject: [PATCH] svn merge -r14652:14659
 https://eris.llnl.gov/svn/slurm/branches/slurm-1.2

---
 src/api/job_info.c                            |  7 ++--
 src/common/uid.c                              | 17 ++++++--
 src/common/uid.h                              |  6 ++-
 .../gold/accounting_storage_gold.c            | 21 +++++++---
 src/plugins/jobcomp/filetxt/jobcomp_filetxt.c |  7 ++--
 src/plugins/sched/wiki/get_jobs.c             |  9 +++--
 src/plugins/sched/wiki/msg.c                  | 12 +++++-
 src/plugins/sched/wiki2/get_jobs.c            |  9 +++--
 src/plugins/sched/wiki2/msg.c                 | 12 +++++-
 .../select/bluegene/plugin/bg_job_place.c     | 32 ++++++---------
 .../select/bluegene/plugin/bg_job_run.c       |  8 ++--
 .../select/bluegene/plugin/block_sys.c        |  4 +-
 .../select/bluegene/plugin/select_bluegene.c  |  2 +-
 src/slurmctld/agent.c                         |  2 +-
 src/slurmctld/partition_mgr.c                 | 30 +++++---------
 src/slurmctld/trigger_mgr.c                   |  7 +++-
 src/smap/job_functions.c                      | 11 ++++--
 src/squeue/print.c                            | 16 +++++---
 src/squeue/sort.c                             |  4 ++
 src/sview/job_info.c                          | 39 +++++++++++--------
 20 files changed, 149 insertions(+), 106 deletions(-)

diff --git a/src/api/job_info.c b/src/api/job_info.c
index f44ed7db997..c4f3de3ce35 100644
--- a/src/api/job_info.c
+++ b/src/api/job_info.c
@@ -124,7 +124,7 @@ extern char *
 slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 {
 	int i, j;
-	char time_str[32], select_buf[122];
+	char time_str[32], select_buf[122], *user_name;
 	struct group *group_info = NULL;
 	char tmp1[128], tmp2[128], *tmp3_ptr;
 	char tmp_line[512];
@@ -142,11 +142,12 @@ slurm_sprint_job_info ( job_info_t * job_ptr, int one_liner )
 #endif	
 
 	/****** Line 1 ******/
+	user_name = uid_to_string((uid_t) job_ptr->user_id);
 	snprintf(tmp_line, sizeof(tmp_line), 
 		"JobId=%u UserId=%s(%u) ", 
-		job_ptr->job_id, 
-		uid_to_string((uid_t) job_ptr->user_id), job_ptr->user_id);
+		job_ptr->job_id, user_name, job_ptr->user_id);
 	out = xstrdup(tmp_line);
+	xfree(user_name);
 	group_info = getgrgid((gid_t) job_ptr->group_id );
 	if ( group_info && group_info->gr_name[ 0 ] ) {
 		snprintf(tmp_line, sizeof(tmp_line), "GroupId=%s(%u)",
diff --git a/src/common/uid.c b/src/common/uid.c
index 021d3afc352..2b20727887b 100644
--- a/src/common/uid.c
+++ b/src/common/uid.c
@@ -43,6 +43,7 @@
 
 #include "src/common/uid.h"
 #include "src/common/xmalloc.h"
+#include "src/common/xstring.h"
 
 uid_t
 uid_from_string (char *name)
@@ -90,7 +91,7 @@ uid_to_string (uid_t uid)
 {
 	struct passwd pwd, *result;
 	size_t bufsize;
-	char *buffer;
+	char *buffer, *ustring;
 	int rc;
 
 	/* Suse Linux does not handle multiple users with UID=0 well */
@@ -107,8 +108,12 @@ uid_to_string (uid_t uid)
 			result = NULL;
 		break;
 	}
+	if (result)
+		ustring = xstrdup(result->pw_name);
+	else
+		ustring = xstrdup("nobody");
 	xfree(buffer);
-	return result ? result->pw_name : "nobody";
+	return ustring;
 }
 
 gid_t
@@ -157,7 +162,7 @@ gid_to_string (gid_t gid)
 {
 	struct group grp, *result;
 	size_t bufsize;
-	char *buffer;
+	char *buffer, *gstring;
 	int rc;
 
 	bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
@@ -170,6 +175,10 @@ gid_to_string (gid_t gid)
 			result = NULL;
 		break;
 	}
+	if (result)
+		gstring = xstrdup(result->gr_name);
+	else
+		gstring = xstrdup("nobody");
 	xfree(buffer);
-	return result ? result->gr_name : "nobody";
+	return gstring;
 }
diff --git a/src/common/uid.h b/src/common/uid.h
index d79a2f6a800..91e5d9a9f44 100644
--- a/src/common/uid.h
+++ b/src/common/uid.h
@@ -57,12 +57,14 @@ uid_t uid_from_string (char *name);
 gid_t gid_from_string (char *name);
 
 /* 
- * Translate uid to user name
+ * Translate uid to user name, 
+ * NOTE: xfree the return value
  */
 char *uid_to_string (uid_t uid);
 
 /*
  * Same as uid_to_string, but for group name.
-*/
+ * NOTE: xfree the return value
+ */
 char *gid_to_string (gid_t gid);
 #endif /*__SLURM_UID_UTILITY_H__*/
diff --git a/src/plugins/accounting_storage/gold/accounting_storage_gold.c b/src/plugins/accounting_storage/gold/accounting_storage_gold.c
index bd9629fd9e6..bc1ee12af98 100644
--- a/src/plugins/accounting_storage/gold/accounting_storage_gold.c
+++ b/src/plugins/accounting_storage/gold/accounting_storage_gold.c
@@ -3204,19 +3204,28 @@ extern List jobacct_storage_p_get_jobs(void *db_conn,
 /* 					} */
 
 					if(account_rec.user) {
-						struct passwd *passwd_ptr =
-							getpwnam(account_rec.
-								 user);
+						struct passwd pwd, *result;
+						size_t bufsize;
+						char *buffer;
+						int rc;
+						bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+						buffer = xmalloc(bufsize);
+						rc = getpwnam_r(account_rec.user,
+								&pwd, buffer,
+								bufsize, &result);
+						if (rc != 0)
+							result = NULL;
 						job->user = xstrdup(account_rec.
 								    user);
-						if(passwd_ptr) {
+						if(result) {
 							job->uid =
-								passwd_ptr->
+								result->
 								pw_uid;
 							job->gid = 
-								passwd_ptr->
+								result->
 								pw_gid;
 						}
+						xfree(buffer);
 					}
 					if(account_rec.acct) 
 						job->account =
diff --git a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
index 432a7be1586..24ce21bf401 100644
--- a/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
+++ b/src/plugins/jobcomp/filetxt/jobcomp_filetxt.c
@@ -116,11 +116,12 @@ static void
 _get_user_name(uint32_t user_id, char *user_name, int buf_size)
 {
 	static uint32_t cache_uid      = 0;
-	static char     cache_name[32] = "root";
+	static char     cache_name[32] = "root", *uname;
 
 	if (user_id != cache_uid) {
-		snprintf(cache_name, sizeof(cache_name), "%s",
-			 uid_to_string((uid_t) user_id));
+		uname = uid_to_string((uid_t) user_id);
+		snprintf(cache_name, sizeof(cache_name), "%s", uname);
+		xfree(uname);
 		cache_uid = user_id;
 	}
 	snprintf(user_name, buf_size, "%s", cache_name);
diff --git a/src/plugins/sched/wiki/get_jobs.c b/src/plugins/sched/wiki/get_jobs.c
index ece3ed12cda..235ceb174b9 100644
--- a/src/plugins/sched/wiki/get_jobs.c
+++ b/src/plugins/sched/wiki/get_jobs.c
@@ -201,6 +201,7 @@ static char *   _dump_all_jobs(int *job_cnt, time_t update_time)
 static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 {
 	char tmp[16384], *buf = NULL;
+	char *uname, *gname;
 	uint32_t end_time, suspend_time;
 
 	if (!job_ptr)
@@ -316,11 +317,13 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 	    (update_time > job_ptr->details->submit_time))
 		return buf;
 
+	uname = uid_to_string((uid_t) job_ptr->user_id);
+	gname = gid_to_string(job_ptr->group_id);
 	snprintf(tmp, sizeof(tmp),
-		"UNAME=%s;GNAME=%s;",
-		uid_to_string((uid_t) job_ptr->user_id),
-		gid_to_string(job_ptr->group_id));
+		"UNAME=%s;GNAME=%s;", uname, gname);
 	xstrcat(buf, tmp);
+	xfree(uname);
+	xfree(gname);
 
 	return buf;
 }
diff --git a/src/plugins/sched/wiki/msg.c b/src/plugins/sched/wiki/msg.c
index 8f3ec825292..e0e18decf7a 100644
--- a/src/plugins/sched/wiki/msg.c
+++ b/src/plugins/sched/wiki/msg.c
@@ -658,14 +658,22 @@ static void	_proc_msg(slurm_fd new_fd, char *msg)
 static void	_send_reply(slurm_fd new_fd, char *response)
 {
 	size_t i;
-	char *buf, sum[20];
+	char *buf, sum[20], *tmp;
+	static char uname[64] = "";
 
 	i = strlen(response);
 	i += 100;	/* leave room for header */
 	buf = xmalloc(i);
 
+	if (uname[0] == '\0') {
+		tmp = uid_to_string(getuid());
+		strncpy(uname, tmp, sizeof(uname));
+		uname[sizeof(uname) - 1] = '\0';
+		xfree(tmp);
+	}
+
 	snprintf(buf, i, "CK=dummy67890123456 TS=%u AUTH=%s DT=%s", 
-		(uint32_t) time(NULL), uid_to_string(getuid()), response);
+		(uint32_t) time(NULL), uname, response);
 	checksum(sum, auth_key, (buf+20));   /* overwrite "CK=dummy..." above */
 	memcpy(buf, sum, 19);
 
diff --git a/src/plugins/sched/wiki2/get_jobs.c b/src/plugins/sched/wiki2/get_jobs.c
index ec130759637..709b572ff4c 100644
--- a/src/plugins/sched/wiki2/get_jobs.c
+++ b/src/plugins/sched/wiki2/get_jobs.c
@@ -231,6 +231,7 @@ static char *   _dump_all_jobs(int *job_cnt, time_t update_time)
 static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 {
 	char tmp[16384], *buf = NULL;
+	char *uname, *gname;
 	uint32_t end_time, suspend_time;
 	int i, rej_sent = 0;
 
@@ -366,11 +367,13 @@ static char *	_dump_job(struct job_record *job_ptr, time_t update_time)
 	    (update_time > job_ptr->details->submit_time))
 		return buf;
 
+	uname = uid_to_string((uid_t) job_ptr->user_id);
+	gname = gid_to_string(job_ptr->group_id);
 	snprintf(tmp, sizeof(tmp),
-		"UNAME=%s;GNAME=%s;",
-		uid_to_string((uid_t) job_ptr->user_id),
-		gid_to_string(job_ptr->group_id));
+		"UNAME=%s;GNAME=%s;", uname, gname);
 	xstrcat(buf, tmp);
+	xfree(uname);
+	xfree(gname);
 
 	return buf;
 }
diff --git a/src/plugins/sched/wiki2/msg.c b/src/plugins/sched/wiki2/msg.c
index 01cd635c6cf..159535ebc2d 100644
--- a/src/plugins/sched/wiki2/msg.c
+++ b/src/plugins/sched/wiki2/msg.c
@@ -719,14 +719,22 @@ static void	_proc_msg(slurm_fd new_fd, char *msg)
 static void	_send_reply(slurm_fd new_fd, char *response)
 {
 	size_t i;
-	char *buf, sum[20];
+	char *buf, sum[20], *tmp;
+	static char uname[64] = "";
 
 	i = strlen(response);
 	i += 100;	/* leave room for header */
 	buf = xmalloc(i);
 
+	if (uname[0] == '\0') {
+		tmp = uid_to_string(getuid());
+		strncpy(uname, tmp, sizeof(uname));
+		uname[sizeof(uname) - 1] = '\0';
+		xfree(tmp);
+	}
+
 	snprintf(buf, i, "CK=dummy67890123456 TS=%u AUTH=%s DT=%s", 
-		(uint32_t) time(NULL), uid_to_string(getuid()), response);
+		(uint32_t) time(NULL), uname, response);
 	checksum(sum, auth_key, (buf+20));   /* overwrite "CK=dummy..." above */
 	memcpy(buf, sum, 19);
 
diff --git a/src/plugins/select/bluegene/plugin/bg_job_place.c b/src/plugins/select/bluegene/plugin/bg_job_place.c
index 915b24142ff..c56e23ce289 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_place.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_place.c
@@ -41,6 +41,7 @@
 #include <pwd.h>
 
 #include "src/common/node_select.h"
+#include "src/common/uid.h"
 #include "src/slurmctld/trigger_mgr.h"
 #include "bluegene.h"
 #include "dynamic_block.h"
@@ -221,32 +222,21 @@ static int _bg_record_sort_aval_dec(bg_record_t* rec_a, bg_record_t* rec_b)
 static int _get_user_groups(uint32_t user_id, uint32_t group_id, 
 			    gid_t *groups, int max_groups, int *ngroups)
 {
-	struct passwd pwd, *results;
-	char *buffer;
-	static size_t buf_size = 0;
 	int rc;
+	char *user_name;
 
-	if (!buf_size && ((buf_size = sysconf(_SC_GETPW_R_SIZE_MAX)) < 0)) {
-		error("sysconf(_SC_GETPW_R_SIZE_MAX)");
-		return -1;
-	}
-	buffer = xmalloc(buf_size);
-	rc = getpwuid_r((uid_t) user_id, &pwd, buffer, buf_size, &results);
-	if (rc != 0) {
-		error("getpwuid_r(%u): %m", user_id);
-		xfree(buffer);
-		return -1;
-	}
+	user_name = uid_to_string((uid_t) user_id);
 	*ngroups = max_groups;
- 	rc = getgrouplist(pwd.pw_name, (gid_t) group_id, groups, ngroups);
-	xfree(buffer);
+	rc = getgrouplist(user_name, (gid_t) group_id, groups, ngroups);
 	if (rc < 0) {
-		error("getgrouplist(%s): %m", pwd.pw_name);
-		return -1;
+		error("getgrouplist(%s): %m", user_name);
+		rc = -1;
+	} else {
+		*ngroups = rc;
+		rc = 0;
 	}
-	*ngroups = rc;
-
-	return 0;
+	xfree(user_name);
+	return rc;
 }
 
 /*
diff --git a/src/plugins/select/bluegene/plugin/bg_job_run.c b/src/plugins/select/bluegene/plugin/bg_job_run.c
index 3e617a3413a..3152ec28e65 100644
--- a/src/plugins/select/bluegene/plugin/bg_job_run.c
+++ b/src/plugins/select/bluegene/plugin/bg_job_run.c
@@ -233,8 +233,8 @@ static void _sync_agent(bg_update_t *bg_update_ptr)
 			      bg_update_ptr->job_ptr->job_id,
 			      bg_update_ptr->bg_block_id);
 			xfree(bg_record->target_name);
-			bg_record->target_name = xstrdup(
-				uid_to_string(bg_update_ptr->job_ptr->user_id));
+			bg_record->target_name = 
+				uid_to_string(bg_update_ptr->job_ptr->user_id);
 			set_user_rc = set_block_user(bg_record);
 			slurm_mutex_unlock(&block_state_mutex);
 		
@@ -454,8 +454,8 @@ static void _start_agent(bg_update_t *bg_update_ptr)
 		
 	bg_record->boot_count = 0;
 	xfree(bg_record->target_name);
-	bg_record->target_name = xstrdup(
-		uid_to_string(bg_update_ptr->job_ptr->user_id));
+	bg_record->target_name = 
+		uid_to_string(bg_update_ptr->job_ptr->user_id);
 	debug("setting the target_name for Block %s to %s",
 	      bg_record->bg_block_id,
 	      bg_record->target_name);
diff --git a/src/plugins/select/bluegene/plugin/block_sys.c b/src/plugins/select/bluegene/plugin/block_sys.c
index 40e11e4e430..cc31ae896c7 100755
--- a/src/plugins/select/bluegene/plugin/block_sys.c
+++ b/src/plugins/select/bluegene/plugin/block_sys.c
@@ -211,7 +211,7 @@ static int _post_allocate(bg_record_t *bg_record)
 
 		my_uid = uid_from_string(bg_record->user_name);
 		if (my_uid == (uid_t) -1) {
-			error("getpwnam_r(%s): %m", bg_record->user_name);
+			error("uid_from_string(%s): %m", bg_record->user_name);
 		} else {
 			bg_record->user_uid = my_uid;
 		} 
@@ -710,7 +710,7 @@ int read_bg_blocks()
 			}
 			my_uid = uid_from_string(bg_record->user_name);
 			if (my_uid == (uid_t) -1) {
-				error("getpwnam_r(%s): %m", 
+				error("uid_from_string(%s): %m", 
 				      bg_record->user_name);
 			} else {
 				bg_record->user_uid = my_uid;
diff --git a/src/plugins/select/bluegene/plugin/select_bluegene.c b/src/plugins/select/bluegene/plugin/select_bluegene.c
index ca9039997cb..9b0769594a3 100644
--- a/src/plugins/select/bluegene/plugin/select_bluegene.c
+++ b/src/plugins/select/bluegene/plugin/select_bluegene.c
@@ -545,7 +545,7 @@ extern int select_p_state_restore(char *dir_name)
 			slurm_conf_unlock();
 			my_uid = uid_from_string(bg_record->user_name);
 			if (my_uid == (uid_t) -1) {
-				error("getpwnam_r(%s): %m", 
+				error("uid_from_strin(%s): %m", 
 				      bg_record->user_name);
 			} else {
 				bg_record->user_uid = my_uid;
diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c
index 89f073d9b13..da7382ec048 100644
--- a/src/slurmctld/agent.c
+++ b/src/slurmctld/agent.c
@@ -1414,7 +1414,7 @@ extern void mail_job_info (struct job_record *job_ptr, uint16_t mail_type)
 	mail_info_t *mi = _mail_alloc();
 
 	if (!job_ptr->mail_user)
-		mi->user_name = xstrdup(uid_to_string((uid_t)job_ptr->user_id));
+		mi->user_name = uid_to_string((uid_t)job_ptr->user_id);
 	else
 		mi->user_name = xstrdup(job_ptr->mail_user);
 
diff --git a/src/slurmctld/partition_mgr.c b/src/slurmctld/partition_mgr.c
index a1cc06871c6..85327140d3c 100644
--- a/src/slurmctld/partition_mgr.c
+++ b/src/slurmctld/partition_mgr.c
@@ -1052,13 +1052,13 @@ uid_t *_get_groups_members(char *group_names)
  */
 uid_t *_get_group_members(char *group_name)
 {
-	size_t grp_bufsize, pwd_bufsize;
-	char *grp_buffer,  *pwd_buffer;
+	size_t grp_bufsize;
+	char *grp_buffer;
 	struct group grp,  *grp_result;
-	struct passwd pwd, *pwd_result;
-	uid_t *group_uids;
+	struct passwd *pwd_result;
+	uid_t *group_uids, my_uid;
 	gid_t my_gid;
-	int i, j, rc, uid_cnt;
+	int i, j, uid_cnt;
 	
 	grp_bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
 	grp_buffer = xmalloc(grp_bufsize);
@@ -1076,28 +1076,16 @@ uid_t *_get_group_members(char *group_name)
 	}
 	group_uids = (uid_t *) xmalloc(sizeof(uid_t) * (uid_cnt + 1));
 
-	pwd_bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
-	pwd_buffer = xmalloc(pwd_bufsize);
 	j = 0;
 	for (i=0; i<uid_cnt; i++) {
-		while (1) {
-			rc = getpwnam_r(grp_result->gr_mem[i], &pwd, pwd_buffer,
-					pwd_bufsize, &pwd_result);
-			if (rc == EINTR)
-				continue;
-			else if (rc != 0)
-				pwd_result = NULL;
-			break;
-		}
-		if (pwd_result == NULL) {
+		my_uid = uid_from_string(grp_result->gr_mem[i]);
+		if (my_uid == (uid_t) -1) {
 			error("Could not find user %s in configured group %s",
 			      grp_result->gr_mem[i], group_name);
-		} else {
-			if (pwd_result->pw_uid)
-				group_uids[j++] = pwd_result->pw_uid;
+		} else if (my_uid) {
+			group_uids[j++] = my_uid;
 		}
 	}
-	xfree(pwd_buffer);
 	xfree(grp_buffer);
 
 	/* NOTE: code below not reentrant, avoid these functions elsewhere */
diff --git a/src/slurmctld/trigger_mgr.c b/src/slurmctld/trigger_mgr.c
index 1e38a598619..00d112a670f 100644
--- a/src/slurmctld/trigger_mgr.c
+++ b/src/slurmctld/trigger_mgr.c
@@ -950,7 +950,8 @@ static void _trigger_node_event(trig_mgr_info_t *trig_in, time_t now)
  * may be sufficient. */
 static void _trigger_run_program(trig_mgr_info_t *trig_in)
 {
-	char program[1024], arg0[1024], arg1[1024], user_name[1024], *pname;
+	char program[1024], arg0[1024], arg1[1024], user_name[1024];
+	char *pname, *uname;
 	uid_t uid;
 	gid_t gid;
 	pid_t child;
@@ -967,7 +968,9 @@ static void _trigger_run_program(trig_mgr_info_t *trig_in)
 	strncpy(arg1, trig_in->res_id, sizeof(arg1));
 	uid = trig_in->user_id;
 	gid = trig_in->group_id;
-	snprintf(user_name, sizeof(user_name), "%s", uid_to_string(uid));
+	uname = uid_to_string(uid);
+	snprintf(user_name, sizeof(user_name), "%s", uname);
+	xfree(uname);
 
 	child = fork();
 	if (child > 0) {
diff --git a/src/smap/job_functions.c b/src/smap/job_functions.c
index 9a49b3729f0..db22f3a1479 100644
--- a/src/smap/job_functions.c
+++ b/src/smap/job_functions.c
@@ -253,7 +253,7 @@ static int _print_text_job(job_info_t * job_ptr)
 	char time_buf[20];
 	char tmp_cnt[8];
 	uint32_t node_cnt = 0;
-	char *ionodes = NULL;
+	char *ionodes = NULL, *uname;
 	time_t now_time = time(NULL);
 
 #ifdef HAVE_BG
@@ -294,9 +294,10 @@ static int _print_text_job(job_info_t * job_ptr)
 						  SELECT_PRINT_BG_ID));
 		main_xcord += 18;
 #endif
+		uname = uid_to_string((uid_t) job_ptr->user_id);
 		mvwprintw(text_win, main_ycord,
-			  main_xcord, "%.8s", 
-			  uid_to_string((uid_t) job_ptr->user_id));
+			  main_xcord, "%.8s", uname);
+		xfree(uname);
 		main_xcord += 9;
 		mvwprintw(text_win, main_ycord,
 			  main_xcord, "%.9s", job_ptr->name);
@@ -367,7 +368,9 @@ static int _print_text_job(job_info_t * job_ptr)
 					       sizeof(time_buf), 
 					       SELECT_PRINT_BG_ID));
 #endif
-		printf("%8.8s ", uid_to_string((uid_t) job_ptr->user_id));
+		uname = uid_to_string((uid_t) job_ptr->user_id);
+		printf("%8.8s ", uname);
+		xfree(uname);
 		printf("%6.6s ", job_ptr->name);
 		printf("%2.2s ",
 		       job_state_string_compact(job_ptr->job_state));
diff --git a/src/squeue/print.c b/src/squeue/print.c
index 74b01063683..6b4a016cae6 100644
--- a/src/squeue/print.c
+++ b/src/squeue/print.c
@@ -370,9 +370,11 @@ int _print_job_user_name(job_info_t * job, int width, bool right, char* suffix)
 {
 	if (job == NULL)	/* Print the Header instead */
 		_print_str("USER", width, right, true);
-	else
-		_print_str(uid_to_string((uid_t) job->user_id), width, 
-			right, true);
+	else {
+		char *uname = uid_to_string((uid_t) job->user_id);
+		_print_str(uname, width, right, true);
+		xfree(uname);
+	}
 	if (suffix)
 		printf("%s", suffix);
 	return SLURM_SUCCESS;
@@ -1171,9 +1173,11 @@ int _print_step_user_name(job_step_info_t * step, int width, bool right,
 {
 	if (step == NULL)	/* Print the Header instead */
 		_print_str("USER", width, right, true);
-	else
-		_print_str(uid_to_string((uid_t) step->user_id), width, 
-			right, true);
+	else {
+		char *uname = uid_to_string((uid_t) step->user_id);
+		_print_str(uname, width, right, true);
+		xfree(uname);
+	}
 	if (suffix)
 		printf("%s", suffix);
 	return SLURM_SUCCESS;
diff --git a/src/squeue/sort.c b/src/squeue/sort.c
index 2a0bce6371b..ad66c2dcdc1 100644
--- a/src/squeue/sort.c
+++ b/src/squeue/sort.c
@@ -609,6 +609,8 @@ static int _sort_job_by_user_name(void *void1, void *void2)
 	name1 = uid_to_string((uid_t) job1->user_id);
 	name2 = uid_to_string((uid_t) job2->user_id);
 	diff = strcmp(name1, name2);
+	xfree(name1);
+	xfree(name2);
 
 	if (reverse_order)
 		diff = -diff;
@@ -755,6 +757,8 @@ static int _sort_step_by_user_name(void *void1, void *void2)
 	name1 = uid_to_string((uid_t) step1->user_id);
 	name2 = uid_to_string((uid_t) step2->user_id);
 	diff = strcmp(name1, name2);
+	xfree(name1);
+	xfree(name2);
 
 	if (reverse_order)
 		diff = -diff;
diff --git a/src/sview/job_info.c b/src/sview/job_info.c
index 7155dc4b4e5..998cf595550 100644
--- a/src/sview/job_info.c
+++ b/src/sview/job_info.c
@@ -1028,7 +1028,7 @@ static void _layout_job_record(GtkTreeView *treeview,
 			       sview_job_info_t *sview_job_info_ptr, 
 			       int update)
 {
-	char *nodes = NULL;
+	char *nodes = NULL, *uname;
 	char tmp_char[50];
 	time_t now_time = time(NULL);
 	job_info_t *job_ptr = sview_job_info_ptr->job_ptr;
@@ -1128,10 +1128,11 @@ static void _layout_job_record(GtkTreeView *treeview,
 					   sizeof(tmp_char), 
 					   SELECT_PRINT_BG_ID));
 #endif
+	uname = uid_to_string((uid_t)job_ptr->user_id);
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
-						 SORTID_USER), 
-				   uid_to_string((uid_t)job_ptr->user_id));
+						 SORTID_USER), uname);
+	xfree(uname);
 	group_info = getgrgid((gid_t) job_ptr->group_id );
 	if ( group_info && group_info->gr_name[ 0 ] ) {
 		snprintf(tmp_char, sizeof(tmp_char), "%s",
@@ -1419,7 +1420,7 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 			       GtkTreeStore *treestore,
 			       GtkTreeIter *iter)
 {
-	char *nodes = NULL;
+	char *nodes = NULL, uname;
 	char tmp_char[50];
 	time_t now_time = time(NULL);
 	GtkTreeIter step_iter;
@@ -1558,9 +1559,10 @@ static void _update_job_record(sview_job_info_t *sview_job_info_ptr,
 				   SELECT_PRINT_RAMDISK_IMAGE), -1);
 	
 #endif
+	uname = uid_to_string((uid_t)job_ptr->user_id);
 	gtk_tree_store_set(treestore, iter, 
-			   SORTID_USER, 
-			   uid_to_string((uid_t)job_ptr->user_id), -1);
+			   SORTID_USER, uname, -1);
+	xfree(uname);
 	group_info = getgrgid((gid_t) job_ptr->group_id );
 	if ( group_info && group_info->gr_name[ 0 ] ) {
 		snprintf(tmp_char, sizeof(tmp_char), "%s",
@@ -1718,7 +1720,7 @@ static void _layout_step_record(GtkTreeView *treeview,
 				job_step_info_t *step_ptr,
 				int update)
 {
-	char *nodes = NULL;
+	char *nodes = NULL, *uname;
 	char tmp_char[50];
 	char tmp_time[50];
 	time_t now_time = time(NULL);
@@ -1782,10 +1784,11 @@ static void _layout_step_record(GtkTreeView *treeview,
 /* 				   sizeof(tmp_char),  */
 /* 				   SELECT_PRINT_BG_ID)); */
 /* #endif */
+	uname = uid_to_string((uid_t)step_ptr->user_id);
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
-						 SORTID_USER), 
-				   uid_to_string((uid_t)step_ptr->user_id));
+						 SORTID_USER), uname);
+	xfree(uname);
 	add_display_treestore_line(update, treestore, &iter, 
 				   find_col_name(display_data_job,
 						 SORTID_NAME),
@@ -1813,7 +1816,7 @@ static void _update_step_record(job_step_info_t *step_ptr,
 				GtkTreeStore *treestore,
 				GtkTreeIter *iter)
 {
-	char *nodes = NULL;
+	char *nodes = NULL, uname;
 	char tmp_char[50];
 	char tmp_time[50];
 	time_t now_time = time(NULL);
@@ -1862,9 +1865,10 @@ static void _update_step_record(job_step_info_t *step_ptr,
 /* 				   sizeof(tmp_char),  */
 /* 				   SELECT_PRINT_BG_ID), -1); */
 /* #endif */
+	uname = uid_to_string((uid_t)step_ptr->user_id);
 	gtk_tree_store_set(treestore, iter, 
-			   SORTID_USER, 
-			   uid_to_string((uid_t)step_ptr->user_id), -1);
+			   SORTID_USER, uname, -1);
+	xfree(uname);
 	gtk_tree_store_set(treestore, iter, 
 			   SORTID_NAME, step_ptr->name, -1);
 		
@@ -2720,10 +2724,10 @@ extern void specific_info_job(popup_info_t *popup_win)
 	sview_job_info_t *sview_job_info_ptr = NULL;
 	job_info_t *job_ptr = NULL;	
 	ListIterator itr = NULL;
-	char name[30];
+	char name[30], uname;
 	char *host = NULL, *host2 = NULL;
 	hostlist_t hostlist = NULL;
-	int found = 0;
+	int found = 0, name_diff;
 	
 	if(!spec_info->display_widget)
 		setup_popup_info(popup_win, display_data_job, SORTID_CNT);
@@ -2863,8 +2867,11 @@ display_it:
 			case SEARCH_JOB_USER:
 				if(!search_info->gchar_data)
 					continue;
-				if(strcmp(uid_to_string(job_ptr->user_id),
-					  search_info->gchar_data))
+				uname = uid_to_string(job_ptr->user_id);
+				name_diff = strcmp(uname, 
+						   search_info->gchar_data);
+				xfree(uname);
+				if(name_diff)
 					continue;
 				break;
 			case SEARCH_JOB_STATE:
-- 
GitLab