[Darshan-commits] [Git][darshan/darshan][test-pwuid] switch from cuserid to getpwuid for username

Shane Snyder xgitlab at cels.anl.gov
Wed Sep 21 11:28:27 CDT 2016


Shane Snyder pushed to branch test-pwuid at darshan / darshan


Commits:
31429ebd by Shane Snyder at 2016-09-21T11:27:22-05:00
switch from cuserid to getpwuid for username

- - - - -


3 changed files:

- darshan-runtime/configure.in
- darshan-runtime/darshan-core.h
- darshan-runtime/lib/darshan-core.c


Changes:

=====================================
darshan-runtime/configure.in
=====================================
--- a/darshan-runtime/configure.in
+++ b/darshan-runtime/configure.in
@@ -31,13 +31,6 @@ AC_ARG_ENABLE(ld-preload,
 fi]
 ,)
 
-AC_ARG_ENABLE(cuserid, 
-[  --disable-cuserid       Disables attempted use of cuserid() at run time], 
-[if test "x$enableval" = "xno" ; then
-    AC_DEFINE(__DARSHAN_DISABLE_CUSERID, 1, Define if cuserid() should be disabled)
-fi]
-,)
-
 AC_ARG_ENABLE(group-readable-logs, 
 [  --enable-group-readable-logs
                           Set log files to be group readable], 


=====================================
darshan-runtime/darshan-core.h
=====================================
--- a/darshan-runtime/darshan-core.h
+++ b/darshan-runtime/darshan-core.h
@@ -51,6 +51,9 @@
 /* Default runtime compression buffer size */
 #define DARSHAN_COMP_BUF_SIZE DARSHAN_MOD_MEM_MAX
 
+/* Maximum length of a username corresponding to a Darshan log */
+#define DARSHAN_USERNAME_LEN_MAX 32
+
 /* structure to track registered modules */
 struct darshan_core_module
 {


=====================================
darshan-runtime/lib/darshan-core.c
=====================================
--- a/darshan-runtime/lib/darshan-core.c
+++ b/darshan-runtime/lib/darshan-core.c
@@ -25,6 +25,7 @@
 #include <sys/stat.h>
 #include <sys/mman.h>
 #include <sys/vfs.h>
+#include <pwd.h>
 #include <zlib.h>
 #include <mpi.h>
 #include <assert.h>
@@ -117,7 +118,7 @@ static void darshan_fs_info_from_path(
 static int darshan_add_name_record_ref(
     struct darshan_core_runtime *core, darshan_record_id rec_id,
     const char *name, darshan_module_id mod_id);
-static void darshan_get_user_name(
+static void darshan_get_username(
     char *user);
 static void darshan_get_logfile_name(
     char* logfile_name, int jobid, struct tm* start_tm);
@@ -785,7 +786,7 @@ static void *darshan_init_mmap_log(struct darshan_core_runtime* core, int jobid)
     int mmap_fd;
     int mmap_size;
     int sys_page_size;
-    char cuser[L_cuserid] = {0};
+    char username[DARSHAN_USERNAME_LEN_MAX] = {0};
     uint64_t hlevel;
     char hname[HOST_NAME_MAX];
     uint64_t logmod;
@@ -807,7 +808,7 @@ static void *darshan_init_mmap_log(struct darshan_core_runtime* core, int jobid)
     else
         mmap_log_path = DARSHAN_DEF_MMAP_LOG_PATH;
 
-    darshan_get_user_name(cuser);
+    darshan_get_username(username);
 
     /* generate a random number to help differentiate the temporary log */
     /* NOTE: job id is not sufficient for constructing a unique log file name,
@@ -827,7 +828,7 @@ static void *darshan_init_mmap_log(struct darshan_core_runtime* core, int jobid)
      */
     snprintf(core->mmap_log_name, PATH_MAX,
         "/%s/%s_%s_id%d_mmap-log-%" PRIu64 "-%d.darshan",
-        mmap_log_path, cuser, __progname, jobid, logmod, my_rank);
+        mmap_log_path, username, __progname, jobid, logmod, my_rank);
 
     /* create the temporary mmapped darshan log */
     mmap_fd = open(core->mmap_log_name, O_CREAT|O_RDWR|O_EXCL , 0644);
@@ -1170,14 +1171,15 @@ static int darshan_add_name_record_ref(struct darshan_core_runtime *core,
     return(1);
 }
 
-static void darshan_get_user_name(char *cuser)
+static void darshan_get_username(char *username)
 {
+    struct passwd *pwd;
     char* logname_string;
 
     /* get the username for this job.  In order we will try each of the
      * following until one of them succeeds:
      *
-     * - cuserid()
+     * - getpwuid(geteuid())
      * - getenv("LOGNAME")
      * - snprintf(..., geteuid());
      *
@@ -1185,25 +1187,25 @@ static void darshan_get_user_name(char *cuser)
      * work in statically compiled binaries.
      */
 
-#ifndef __DARSHAN_DISABLE_CUSERID
-    cuserid(cuser);
-#endif
+    pwd = getpwuid(geteuid());
+    if(pwd)
+        strncpy(username, pwd->pw_name, (DARSHAN_USERNAME_LEN_MAX-1));
 
-    /* if cuserid() didn't work, then check the environment */
-    if(strcmp(cuser, "") == 0)
+    /* if getpwuid() didn't work, then check the environment */
+    if(strcmp(username, "") == 0)
     {
         logname_string = getenv("LOGNAME");
         if(logname_string)
         {
-            strncpy(cuser, logname_string, (L_cuserid-1));
+            strncpy(username, logname_string, (DARSHAN_USERNAME_LEN_MAX-1));
         }
     }
 
-    /* if cuserid() and environment both fail, then fall back to uid */
-    if(strcmp(cuser, "") == 0)
+    /* if getpwuid() and environment both fail, then fall back to uid */
+    if(strcmp(username, "") == 0)
     {
         uid_t uid = geteuid();
-        snprintf(cuser, L_cuserid, "%u", uid);
+        snprintf(username, DARSHAN_USERNAME_LEN_MAX, "%u", uid);
     }
 
     return;
@@ -1222,7 +1224,7 @@ static void darshan_get_logfile_name(char* logfile_name, int jobid, struct tm* s
     uint64_t hlevel;
     char hname[HOST_NAME_MAX];
     uint64_t logmod;
-    char cuser[L_cuserid] = {0};
+    char username[DARSHAN_USERNAME_LEN_MAX] = {0};
     int ret;
 
     /* first, check if user specifies a complete logpath to use */
@@ -1252,7 +1254,7 @@ static void darshan_get_logfile_name(char* logfile_name, int jobid, struct tm* s
 #endif
         }
 
-        darshan_get_user_name(cuser);
+        darshan_get_username(username);
 
         /* generate a random number to help differentiate the log */
         hlevel=DARSHAN_MPI_CALL(PMPI_Wtime)() * 1000000;
@@ -1292,7 +1294,7 @@ static void darshan_get_logfile_name(char* logfile_name, int jobid, struct tm* s
             ret = snprintf(logfile_name, PATH_MAX,
                 "%s/%s_%s_id%d_%d-%d-%d-%" PRIu64 ".darshan_partial",
                 logpath_override,
-                cuser, __progname, jobid,
+                username, __progname, jobid,
                 (start_tm->tm_mon+1),
                 start_tm->tm_mday,
                 (start_tm->tm_hour*60*60 + start_tm->tm_min*60 + start_tm->tm_sec),
@@ -1311,7 +1313,7 @@ static void darshan_get_logfile_name(char* logfile_name, int jobid, struct tm* s
                 "%s/%d/%d/%d/%s_%s_id%d_%d-%d-%d-%" PRIu64 ".darshan_partial",
                 logpath, (start_tm->tm_year+1900),
                 (start_tm->tm_mon+1), start_tm->tm_mday,
-                cuser, __progname, jobid,
+                username, __progname, jobid,
                 (start_tm->tm_mon+1),
                 start_tm->tm_mday,
                 (start_tm->tm_hour*60*60 + start_tm->tm_min*60 + start_tm->tm_sec),



View it on GitLab: https://xgitlab.cels.anl.gov/darshan/darshan/commit/31429ebd805235e5ac6a0d6cfb755007018d3aca
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/darshan-commits/attachments/20160921/f354be7a/attachment-0001.html>


More information about the Darshan-commits mailing list