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);