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