--- packaging/source-trees/gt2-cvs/gsi/gss_assist/source/globus_gss_assist_module.c 12 May 2004 22:25:34 -0000 1.7
+++ packaging/source-trees/gt2-cvs/gsi/gss_assist/source/globus_gss_assist_module.c 23 Feb 2005 02:20:58 -0000
@@ -23,6 +23,8 @@
int globus_i_gsi_gss_assist_debug_level = 0;
FILE * globus_i_gsi_gss_assist_debug_fstream = NULL;
+globus_mutex_t globus_i_gsi_gss_assist_mutex;
+
/**
* Module descriptor static initializer.
*/
@@ -80,6 +82,8 @@
globus_module_activate(GLOBUS_GSI_SYSCONFIG_MODULE);
globus_module_activate(GLOBUS_GSI_GSSAPI_MODULE);
+ globus_mutex_init(&globus_i_gsi_gss_assist_mutex, NULL);
+
exit:
GLOBUS_I_GSI_GSS_ASSIST_DEBUG_EXIT;
return GLOBUS_SUCCESS;
@@ -97,6 +101,8 @@
GLOBUS_I_GSI_GSS_ASSIST_DEBUG_ENTER;
+ globus_mutex_destroy(&globus_i_gsi_gss_assist_mutex);
+
globus_module_deactivate(GLOBUS_GSI_GSSAPI_MODULE);
globus_module_deactivate(GLOBUS_GSI_SYSCONFIG_MODULE);
globus_module_deactivate(GLOBUS_CALLOUT_MODULE);
--- packaging/source-trees/gt2-cvs/gsi/gss_assist/source/globus_i_gss_assist.h 16 Oct 2003 14:41:03 -0000 1.6
+++ packaging/source-trees/gt2-cvs/gsi/gss_assist/source/globus_i_gss_assist.h 23 Feb 2005 02:20:58 -0000
@@ -22,6 +22,8 @@
extern int globus_i_gsi_gss_assist_debug_level;
extern FILE * globus_i_gsi_gss_assist_debug_fstream;
+extern globus_mutex_t globus_i_gsi_gss_assist_mutex;
+
#ifdef BUILD_DEBUG
#define GLOBUS_I_GSI_GSS_ASSIST_DEBUG(_LEVEL_) \
--- packaging/source-trees/gt2-cvs/gsi/gss_assist/source/gridmap.c 14 Oct 2004 10:53:21 -0000 1.14
+++ packaging/source-trees/gt2-cvs/gsi/gss_assist/source/gridmap.c 23 Feb 2005 02:20:58 -0000
@@ -1384,63 +1384,83 @@
{
globus_object_t * error;
globus_result_t result = GLOBUS_SUCCESS;
- char * filename;
- globus_callout_handle_t authz_handle;
+ static globus_bool_t initialized = GLOBUS_FALSE;
+ static globus_callout_handle_t authz_handle = NULL;
static char * _function_name_ =
"globus_gss_assist_map_and_authorize";
- result = GLOBUS_GSI_SYSCONFIG_GET_AUTHZ_CONF_FILENAME(&filename);
-
- if(result != GLOBUS_SUCCESS)
+ globus_mutex_lock(&globus_i_gsi_gss_assist_mutex);
{
- error = globus_error_get(result);
-
- if(globus_error_match(
- error,
- GLOBUS_GSI_SYSCONFIG_MODULE,
- GLOBUS_GSI_SYSCONFIG_ERROR_GETTING_AUTHZ_FILENAME)
- == GLOBUS_TRUE)
+ if(initialized == GLOBUS_FALSE)
{
- globus_object_free(error);
- return globus_l_gss_assist_gridmap_lookup(
- context,
- service,
- desired_identity,
- identity_buffer,
- identity_buffer_length);
- }
- else
- {
- result = globus_error_put(error);
- return result;
- }
- }
- else
- {
- result = globus_callout_handle_init(&authz_handle);
+ char * filename;
+ result = GLOBUS_GSI_SYSCONFIG_GET_AUTHZ_CONF_FILENAME(&filename);
- if(result != GLOBUS_SUCCESS)
- {
- free(filename);
- GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
- result,
- GLOBUS_GSI_GSS_ASSIST_ERROR_WITH_CALLOUT_CONFIG);
- goto error;
- }
+ if(result != GLOBUS_SUCCESS)
+ {
+ error = globus_error_get(result);
+
+ if(globus_error_match(
+ error,
+ GLOBUS_GSI_SYSCONFIG_MODULE,
+ GLOBUS_GSI_SYSCONFIG_ERROR_GETTING_AUTHZ_FILENAME)
+ == GLOBUS_TRUE)
+ {
+ globus_object_free(error);
+ }
+ else
+ {
+ result = globus_error_put(error);
+ globus_mutex_unlock(&globus_i_gsi_gss_assist_mutex);
+ return result;
+ }
+ }
+ else
+ {
+ result = globus_callout_handle_init(&authz_handle);
+
+ if(result != GLOBUS_SUCCESS)
+ {
+ free(filename);
+ GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
+ result,
+ GLOBUS_GSI_GSS_ASSIST_ERROR_WITH_CALLOUT_CONFIG);
+ globus_mutex_unlock(&globus_i_gsi_gss_assist_mutex);
+ return result;
+ }
- result = globus_callout_read_config(authz_handle, filename);
+ result = globus_callout_read_config(authz_handle, filename);
- free(filename);
+ free(filename);
- if(result != GLOBUS_SUCCESS)
- {
- GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
- result,
- GLOBUS_GSI_GSS_ASSIST_ERROR_INITIALIZING_CALLOUT_HANDLE);
- goto destroy_handle;
+ if(result != GLOBUS_SUCCESS)
+ {
+ GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
+ result,
+ GLOBUS_GSI_GSS_ASSIST_ERROR_INITIALIZING_CALLOUT_HANDLE);
+ globus_callout_handle_destroy(authz_handle);
+ globus_mutex_unlock(&globus_i_gsi_gss_assist_mutex);
+ return result;
+ }
+ }
+ initialized = GLOBUS_TRUE;
}
-
+ }
+ globus_mutex_unlock(&globus_i_gsi_gss_assist_mutex);
+
+
+ if(authz_handle == NULL)
+ {
+ return globus_l_gss_assist_gridmap_lookup(
+ context,
+ service,
+ desired_identity,
+ identity_buffer,
+ identity_buffer_length);
+ }
+ else
+ {
result = globus_callout_call_type(authz_handle,
GLOBUS_GENERIC_MAPPING_TYPE,
context,
@@ -1466,7 +1486,7 @@
desired_identity,
identity_buffer,
identity_buffer_length);
- goto destroy_handle;
+ goto error;
}
else
{
@@ -1474,7 +1494,7 @@
GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
result,
GLOBUS_GSI_GSS_ASSIST_CALLOUT_ERROR);
- goto destroy_handle;
+ goto error;
}
}
@@ -1496,7 +1516,7 @@
GLOBUS_GSI_GSS_ASSIST_ERROR_CHAIN_RESULT(
result,
GLOBUS_GSI_GSS_ASSIST_CALLOUT_ERROR);
- goto destroy_handle;
+ goto error;
}
else
{
@@ -1507,8 +1527,7 @@
}
}
- destroy_handle:
- globus_callout_handle_destroy(authz_handle);
+
error:
return result;
}