Blob Blame History Raw
diff -ur globus_gridftp_server-3.17.orig/globus_i_gfs_config.c globus_gridftp_server-3.17/globus_i_gfs_config.c
--- globus_gridftp_server-3.17.orig/globus_i_gfs_config.c	2009-06-12 11:25:22.000000000 +0200
+++ globus_gridftp_server-3.17/globus_i_gfs_config.c	2009-08-06 11:17:48.994508311 +0200
@@ -15,6 +15,7 @@
  */
 
 #include "globus_i_gridftp_server.h"
+#include "globus_gsi_system_config.h"
 #include "version.h"
 
 #define GLOBUS_GFS_HELP_ROWS            60
@@ -2114,8 +2115,7 @@
     }
     else if(exec_name[0] == '.')
     {
-        tmp_str = malloc(PATH_MAX);
-        getcwd(tmp_str, PATH_MAX);
+        GLOBUS_GSI_SYSCONFIG_GET_CURRENT_WORKING_DIR(&tmp_str);
         exec_name = globus_common_create_string(
          "%s/%s", tmp_str, exec_name);
         globus_free(tmp_str);
diff -ur globus_gridftp_server-3.17.orig/globus_i_gfs_control.c globus_gridftp_server-3.17/globus_i_gfs_control.c
--- globus_gridftp_server-3.17.orig/globus_i_gfs_control.c	2009-06-12 11:25:19.000000000 +0200
+++ globus_gridftp_server-3.17/globus_i_gfs_control.c	2009-08-06 11:25:41.756508578 +0200
@@ -17,6 +17,10 @@
 #include "globus_i_gridftp_server.h"
 #include "version.h"
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 4096
+#endif
+
 struct passwd *
 globus_l_gfs_getpwuid(
     uid_t                               uid);
diff -ur globus_gridftp_server-3.17.orig/globus_i_gfs_data.c globus_gridftp_server-3.17/globus_i_gfs_data.c
--- globus_gridftp_server-3.17.orig/globus_i_gfs_data.c	2009-06-24 21:42:56.000000000 +0200
+++ globus_gridftp_server-3.17/globus_i_gfs_data.c	2009-08-06 11:05:13.566888209 +0200
@@ -25,7 +25,6 @@
 
 #define FTP_SERVICE_NAME "file"
 #define USER_NAME_MAX   64
-#define GSC_GETPW_PWBUFSIZE        (USER_NAME_MAX*3)+(PATH_MAX*2)
 
 #define GFSDataOpDec(_op, _d_op, _d_s)                                  \
 do                                                                      \
@@ -759,18 +758,37 @@
     uid_t                               uid)
 {
     int                                 rc;
-    char                                pw_buffer[GSC_GETPW_PWBUFSIZE];
+    int                                 pw_buflen;
+    char *                              pw_buffer;
     struct passwd                       pwent_mem;
     struct passwd *                     pw_result;
     struct passwd *                     pwent = NULL;
 
+#ifdef _SC_GETPW_R_SIZE_MAX
+    pw_buflen = sysconf(_SC_GETPW_R_SIZE_MAX) + 1;
+    if(pw_buflen < 1)
+    {
+        pw_buflen = 1024;
+    }
+#else
+    pw_buflen = 1024;
+#endif
+    pw_buffer = globus_malloc(pw_buflen);
+    if(!pw_buffer)
+    {
+        return NULL;
+    }
+
     rc = globus_libc_getpwuid_r(getuid(), &pwent_mem, pw_buffer,
-                GSC_GETPW_PWBUFSIZE, &pw_result);
+                                pw_buflen, &pw_result);
     if(rc != 0)
     {
+        globus_free(pw_buffer);
         return NULL;
     }
+
     pwent = globus_l_gfs_pw_copy(&pwent_mem);
+    globus_free(pw_buffer);
 
     return pwent;
 }
@@ -781,19 +799,37 @@
     const char *                        name)
 {
     int                                 rc;
-    char                                pw_buffer[GSC_GETPW_PWBUFSIZE];
+    int                                 pw_buflen;
+    char *                              pw_buffer;
     struct passwd                       pwent_mem;
     struct passwd *                     pw_result;
     struct passwd *                     pwent = NULL;
 
+#ifdef _SC_GETPW_R_SIZE_MAX
+    pw_buflen = sysconf(_SC_GETPW_R_SIZE_MAX) + 1;
+    if(pw_buflen < 1)
+    {
+        pw_buflen = 1024;
+    }
+#else
+    pw_buflen = 1024;
+#endif
+    pw_buffer = globus_malloc(pw_buflen);
+    if(!pw_buffer)
+    {
+        return NULL;
+    }
+
     rc = globus_libc_getpwnam_r(
-        (char *)name, &pwent_mem, pw_buffer,GSC_GETPW_PWBUFSIZE, &pw_result);
+        (char *)name, &pwent_mem, pw_buffer, pw_buflen, &pw_result);
     if(rc != 0)
     {
+        globus_free(pw_buffer);
         return NULL;
     }
 
     pwent = globus_l_gfs_pw_copy(&pwent_mem);
+    globus_free(pw_buffer);
 
     return pwent;
 }
diff -ur globus_gridftp_server-3.17.orig/modules/file/globus_gridftp_server_file.c globus_gridftp_server-3.17/modules/file/globus_gridftp_server_file.c
--- globus_gridftp_server-3.17.orig/modules/file/globus_gridftp_server_file.c	2009-06-24 21:43:32.000000000 +0200
+++ globus_gridftp_server-3.17/modules/file/globus_gridftp_server_file.c	2009-08-06 11:23:19.417510568 +0200
@@ -20,6 +20,9 @@
 #include "openssl/md5.h"
 #include "version.h"
 
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 4096
+#endif
 
 GlobusDebugDeclare(GLOBUS_GRIDFTP_SERVER_FILE);