[cwscore-commit] CVS update: MODIFIED: source, globus_handler_wsse.c ...
Joe Bester
commit at globus.org
Tue Oct 24 12:14:31 CDT 2006
User: bester
Date: 06/10/24 12:14:31
Modified: c/handlers/secure/message/source Makefile.am configure.in
globus_handler_wsse.c
Log:
Use Makefile.sources for handling enumeration of xsd-derived sources
Use element registration and a message-handle-scoped type registry to handle
deserializing the security elements.
Better error handling in activation.
Revision Changes Path
1.6 +14 -20 wsrf/c/handlers/secure/message/source/Makefile.am
http://viewcvs.globus.org/viewcvs.cgi/wsrf/c/handlers/secure/message/source/Makefile.am.diff?r1=1.5&r2=1.6
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Makefile.am
===================================================================
RCS file: /home/globdev/CVS/globus-packages/wsrf/c/handlers/secure/message/source/Makefile.am,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- Makefile.am 15 Aug 2005 13:24:01 -0000 1.5
+++ Makefile.am 24 Oct 2006 17:14:31 -0000 1.6
@@ -9,37 +9,31 @@
CGEN = $(GLOBUS_LOCATION)/bin/globus-wsrf-cgen
-nodist_noinst_HEADERS = \
- exc_c14n_InclusiveNamespaces.h \
- exc_c14n_InclusiveNamespacesType.h \
- exc_c14n_InclusiveNamespacesType_array.h \
- exc_c14n_PrefixListType.h
-
-EXC_C14N_GENSOURCES = \
- exc_c14n_InclusiveNamespaces.c \
- exc_c14n_InclusiveNamespacesType.c \
- exc_c14n_PrefixListType.c
+noinst_LTLIBRARIES=libglobus_exc_c14n_types_$(GLOBUS_FLAVOR_NAME).la
-$(EXC_C14N_GENSOURCES):
+Types_Sources =
+nodist_libglobus_exc_c14n_types___GLOBUS_FLAVOR_NAME__la_SOURCES = $(Types_Sources)
+libglobus_exc_c14n_types___GLOBUS_FLAVOR_NAME__la_LIBADD = @GPT_LIB_LINKS@
+libglobus_exc_c14n_types___GLOBUS_FLAVOR_NAME__la_LDFLAGS = @GPT_LDFLAGS@
+
+ at INCLUDE_MAKEFILE_SOURCES@
+
+BUILT_SOURCES=Makefile.sources $(Types_Sources) $(nodist_globus_exc_c14ninclude_HEADERS)
+
+$(BUILT_SOURCES): exc_c14n.xsd
$(CGEN) -P "http://www.w3.org/2001/10/xml-exc-c14n#=exc_c14n_" \
- -np -ns -nc \
+ -np -ns -nc -s globus_exc_c14n \
exc_c14n.xsd
-BUILT_SOURCES = \
- $(EXC_C14N_GENSOURCES)
-
lib_LTLIBRARIES=libglobus_handler_ws_secure_message_$(GLOBUS_FLAVOR_NAME).la
-nodist_libglobus_handler_ws_secure_message___GLOBUS_FLAVOR_NAME__la_SOURCES = \
- $(EXC_C14N_GENSOURCES)
-
libglobus_handler_ws_secure_message___GLOBUS_FLAVOR_NAME__la_SOURCES = \
globus_handler_wsse.c \
globus_handler_wsse_cred.c \
globus_i_handler_wsse_cred.h
libglobus_handler_ws_secure_message___GLOBUS_FLAVOR_NAME__la_LIBADD = \
- $(GPT_LIB_LINKS)
+ ./libglobus_exc_c14n_types_$(GLOBUS_FLAVOR_NAME).la $(GPT_LIB_LINKS)
libglobus_handler_ws_secure_message___GLOBUS_FLAVOR_NAME__la_LDFLAGS = \
$(GPT_LDFLAGS) -module -rpath $(GLOBUS_LOCATION)/lib
@@ -49,7 +43,7 @@
#libglobus_handler_ws_secure_message___GLOBUS_FLAVOR_NAME__la_CFLAGS = \
# -DGLOBUS_HANDLER_WSSE_INLINED_C14N
-DISTCLEANFILES=$(EXC_C14N_GENSOURCES) $(nodist_noinst_HEADERS)
+CLEANFILES=$(BUILT_SOURCES)
include $(top_srcdir)/globus_automake_post
include $(top_srcdir)/globus_automake_post_top
1.2 +7 -1 wsrf/c/handlers/secure/message/source/configure.in
http://viewcvs.globus.org/viewcvs.cgi/wsrf/c/handlers/secure/message/source/configure.in.diff?r1=1.1&r2=1.2
(In the diff below, changes in quantity of whitespace are not shown.)
Index: configure.in
===================================================================
RCS file: /home/globdev/CVS/globus-packages/wsrf/c/handlers/secure/message/source/configure.in,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- configure.in 31 Jan 2005 17:14:51 -0000 1.1
+++ configure.in 24 Oct 2006 17:14:31 -0000 1.2
@@ -1,6 +1,6 @@
dnl
-AC_REVISION($Revision: 1.1 $)
+AC_REVISION($Revision: 1.2 $)
AC_INIT(Makefile.am)
GLOBUS_INIT
@@ -10,6 +10,12 @@
dnl Initialize the automake rules the last argument
AM_INIT_AUTOMAKE($GPT_NAME, $GPT_VERSION)
+if test "$GPT_IGNORE_DEPS" = ""; then
+ INCLUDE_MAKEFILE_SOURCES="include Makefile.sources"
+fi
+AC_SUBST(INCLUDE_MAKEFILE_SOURCES)
+
+
GLOBUS_FINALIZE
AC_OUTPUT(
1.10 +146 -59 wsrf/c/handlers/secure/message/source/globus_handler_wsse.c
http://viewcvs.globus.org/viewcvs.cgi/wsrf/c/handlers/secure/message/source/globus_handler_wsse.c.diff?r1=1.9&r2=1.10
(In the diff below, changes in quantity of whitespace are not shown.)
Index: globus_handler_wsse.c
===================================================================
RCS file: /home/globdev/CVS/globus-packages/wsrf/c/handlers/secure/message/source/globus_handler_wsse.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- globus_handler_wsse.c 19 Jan 2006 05:58:29 -0000 1.9
+++ globus_handler_wsse.c 24 Oct 2006 17:14:31 -0000 1.10
@@ -131,6 +131,9 @@
int
globus_l_handler_ws_security_deactivate(void);
+static
+globus_xsd_type_registry_t globus_l_wsse_type_registry;
+
GlobusExtensionDeclareModule(globus_handler_ws_secure_message);
GlobusDebugDefine(GLOBUS_HANDLER_WS_SECURE_MESSAGE);
@@ -147,17 +150,22 @@
"Id"
};
-static
-globus_xsd_type_info_t
+
+static struct
+{
+ globus_xsd_type_info_t type;
+ xsd_QName * element;
+}
globus_l_handler_ws_security_types[] =
{
- &wsse_BinarySecurityToken_info,
- &ds_Signature_info,
- &wsseu_Timestamp_info,
- &wsse_SecurityTokenReference_info,
- &ds_Reference_info,
- &exc_c14n_InclusiveNamespaces_info,
- NULL
+ { &wsse_BinarySecurityTokenType_info, &wsse_BinarySecurityToken_qname },
+ { &ds_SignatureType_info, &ds_Signature_qname },
+ { &wsseu_TimestampType_info, &wsseu_Timestamp_qname },
+ { &wsse_SecurityTokenReferenceType_info,
+ &wsse_SecurityTokenReferenceType_qname },
+ { &ds_ReferenceType_info, &ds_Reference_qname },
+ { &exc_c14n_InclusiveNamespaces_info, &exc_c14n_InclusiveNamespaces_qname },
+ { NULL, NULL }
};
#define CERT_ID_PREFIX "CertId-"
@@ -916,6 +924,7 @@
size_t c14n_signed_info_buff_length = 0;
globus_result_t result = GLOBUS_SUCCESS;
int index = 0;
+ globus_xsd_type_registry_t old_registry = NULL;
wsseu_TimestampType * Timestamp = NULL;
ds_SignatureType * Signature = NULL;
wsse_SecurityHeaderType * SecurityHeader = NULL;
@@ -949,11 +958,21 @@
goto remove_callout_exit;
}
+ globus_soap_message_handle_get_registry(
+ message_handle,
+ &old_registry);
+ globus_soap_message_handle_set_registry(
+ message_handle,
+ globus_l_wsse_type_registry);
+
result = wsse_SecurityHeaderType_deserialize(
&wsse_Security_qname,
SecurityHeader,
message_handle,
0);
+ globus_soap_message_handle_set_registry(
+ message_handle,
+ old_registry);
if(result != GLOBUS_SUCCESS)
{
result = GlobusWSSEErrorDeserializeFailed(
@@ -968,8 +987,8 @@
{
wsse_BinarySecurityTokenType * bst;
- if(SecurityHeader->any.elements[index].any_info !=
- &wsse_BinarySecurityToken_info)
+ if(SecurityHeader->any.elements[index].any_info->serialize !=
+ wsse_BinarySecurityToken_info.serialize)
{
result = GlobusWSSEErrorFailedBinarySecurityToken(
"<BinarySecurityToken> element did not get "
@@ -981,7 +1000,7 @@
SecurityHeader->any.elements[index].value;
result = globus_ws_security_get_credential(
- bst->base_value,
+ (const unsigned char *) bst->base_value,
strlen(bst->base_value),
&peer_cred);
if(result != GLOBUS_SUCCESS)
@@ -995,8 +1014,8 @@
SecurityHeader->any.elements[index].element,
&ds_Signature_qname))
{
- if(SecurityHeader->any.elements[index].any_info !=
- &ds_Signature_info)
+ if(SecurityHeader->any.elements[index].any_info->serialize !=
+ ds_Signature_info.serialize)
{
result = GlobusWSSEErrorFailedVerify(
GLOBUS_SUCCESS,
@@ -1012,8 +1031,8 @@
SecurityHeader->any.elements[index].element,
&wsseu_Timestamp_qname))
{
- if(SecurityHeader->any.elements[index].any_info !=
- &wsseu_Timestamp_info)
+ if(SecurityHeader->any.elements[index].any_info->serialize !=
+ wsseu_Timestamp_info.serialize)
{
result = GlobusWSSEErrorFailedVerify(
GLOBUS_SUCCESS,
@@ -1117,9 +1136,9 @@
/* verify SignedInfo with what's in SignatureValue */
result = globus_i_handler_ws_security_verify_signature(
peer_cred,
- signed_info_buff,
+ (unsigned char *) signed_info_buff,
signed_info_buff_length,
- Signature->SignatureValue.base_value.value,
+ (unsigned char *) Signature->SignatureValue.base_value.value,
Signature->SignatureValue.base_value.length);
if(result != GLOBUS_SUCCESS)
{
@@ -1188,9 +1207,9 @@
result = globus_i_handler_ws_security_verify_signature(
peer_cred,
- c14n_signed_info_buff,
+ (unsigned char *) c14n_signed_info_buff,
c14n_signed_info_buff_length,
- Signature->SignatureValue.base_value.value,
+ (unsigned char *) Signature->SignatureValue.base_value.value,
Signature->SignatureValue.base_value.length);
if(result != GLOBUS_SUCCESS)
{
@@ -1776,8 +1795,8 @@
message_handle, wsseu_Id_qname.Namespace, &created);
ns = xmlNewNs(doc->children,
- wsseu_Id_qname.Namespace,
- prefix);
+ (xmlChar *) wsseu_Id_qname.Namespace,
+ (xmlChar *) prefix);
xmlUnsetNsProp(doc->children,
ns,
@@ -1785,8 +1804,8 @@
xmlNewNsProp(doc->children,
ns,
- wsseu_Id_qname.local,
- idval);
+ (xmlChar *) wsseu_Id_qname.local,
+ (xmlChar *) idval);
new_length = xmlC14NDocDumpMemory(
doc, NULL, 1, NULL, 0, (xmlChar **)&new_buff);
if(new_length < 0)
@@ -2247,6 +2266,7 @@
{
int res = 0;
int i = 0;
+ int rc = 0;
GlobusFuncName(globus_l_handler_ws_security_activate);
@@ -2259,9 +2279,15 @@
globus_i_handler_wsse_cred_pkipath_table_init();
- globus_list_insert(
+ rc = globus_list_insert(
&globus_l_handler_ws_security_client_descriptor.trigger_list,
&globus_l_handler_ws_security_client_trigger);
+ if (rc != 0)
+ {
+ res = GlobusSoapMessageErrorOutOfMemory;
+
+ goto exit;
+ }
res = globus_extension_registry_add(
GLOBUS_HANDLER_REGISTRY,
@@ -2270,46 +2296,101 @@
&globus_l_handler_ws_security_client_descriptor);
if(res != GLOBUS_SUCCESS)
{
- goto exit;
+ goto remove_client_trigger_exit;
}
- globus_list_insert(
+ rc = globus_list_insert(
&globus_l_handler_ws_security_server_descriptor.trigger_list,
&globus_l_handler_ws_security_server_trigger);
+ if (rc != GLOBUS_SUCCESS)
+ {
+ res = GlobusSoapMessageErrorOutOfMemory;
+
+ goto remove_client_extension_exit;
+ }
+
res = globus_extension_registry_add(
GLOBUS_HANDLER_REGISTRY,
GLOBUS_HANDLER_WS_SECMESS_SERVER,
GlobusExtensionMyModule(globus_handler_ws_secure_message),
&globus_l_handler_ws_security_server_descriptor);
+ if (res != GLOBUS_SUCCESS)
+ {
+ goto remove_server_trigger_exit;
+ }
+
+ res = globus_xsd_type_registry_init(&globus_l_wsse_type_registry);
+ if (res != GLOBUS_SUCCESS)
+ {
+ goto remove_server_extension_exit;
+ }
- for (i = 0; globus_l_handler_ws_security_types[i] != NULL; i++)
+ for (i = 0; globus_l_handler_ws_security_types[i].element != NULL; i++)
{
res = globus_xsd_type_registry_insert(
- GLOBUS_GLOBAL_TYPE_REGISTRY,
- globus_l_handler_ws_security_types[i],
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].type,
NULL);
if(res != GLOBUS_SUCCESS)
{
- goto exit;
+ goto remove_types_exit;
}
- }
-
+ res = globus_xsd_type_registry_insert_element(
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].element,
+ globus_l_handler_ws_security_types[i].type->type);
+ if(res != GLOBUS_SUCCESS)
+ {
+ globus_xsd_type_registry_remove(
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].type->type,
+ NULL);
-exit:
+ goto remove_types_exit;
+ }
+ }
- if (res != GLOBUS_SUCCESS && i > 0)
+remove_types_exit:
+ if (res != GLOBUS_SUCCESS)
+ {
+ if (i > 0)
{
for (--i; i >= 0; i--)
{
+ globus_xsd_type_registry_remove_element(
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].element);
globus_xsd_type_registry_remove(
- GLOBUS_GLOBAL_TYPE_REGISTRY,
- globus_l_handler_ws_security_types[i]->type,
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].type->type,
NULL);
}
}
-
+ globus_xsd_type_registry_destroy(globus_l_wsse_type_registry);
+remove_server_extension_exit:
+ globus_extension_registry_remove(
+ GLOBUS_HANDLER_REGISTRY,
+ GLOBUS_HANDLER_WS_SECMESS_SERVER);
+remove_server_trigger_exit:
+ globus_list_remove(
+ &globus_l_handler_ws_security_server_descriptor.trigger_list,
+ globus_list_search(
+ globus_l_handler_ws_security_server_descriptor.trigger_list,
+ &globus_l_handler_ws_security_server_trigger));
+remove_client_extension_exit:
+ globus_extension_registry_remove(
+ GLOBUS_HANDLER_REGISTRY,
+ GLOBUS_HANDLER_WS_SECMESS_CLIENT);
+remove_client_trigger_exit:
+ globus_list_remove(
+ &globus_l_handler_ws_security_client_descriptor.trigger_list,
+ globus_list_search(
+ globus_l_handler_ws_security_client_descriptor.trigger_list,
+ &globus_l_handler_ws_security_client_trigger));
+ }
+exit:
GlobusWSSEDebugExit();
return res;
}
@@ -2321,13 +2402,17 @@
GlobusFuncName(globus_l_handler_ws_security_deactivate);
GlobusWSSEDebugEnter();
- for (i = 0; globus_l_handler_ws_security_types[i] != NULL; i++)
+ for (i = 0; globus_l_handler_ws_security_types[i].element != NULL; i++)
{
+ globus_xsd_type_registry_remove_element(
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].element);
globus_xsd_type_registry_remove(
- GLOBUS_GLOBAL_TYPE_REGISTRY,
- globus_l_handler_ws_security_types[i]->type,
+ globus_l_wsse_type_registry,
+ globus_l_handler_ws_security_types[i].type->type,
NULL);
}
+ globus_xsd_type_registry_destroy(globus_l_wsse_type_registry);
globus_extension_registry_remove(
GLOBUS_HANDLER_REGISTRY,
GLOBUS_HANDLER_WS_SECMESS_CLIENT);
@@ -2395,13 +2480,14 @@
goto exit;
}
- if(SHA1(c14n_buff, c14n_buff_length,
- digest) == NULL)
+ if(SHA1((unsigned char *) c14n_buff,
+ c14n_buff_length,
+ (unsigned char *) digest) == NULL)
{
result = GlobusWSSEErrorOpenSSL(
"Failed to compute SHA1 digest");
- globus_free(digest);
- globus_free(c14n_buff);
+ free(digest);
+ free(c14n_buff);
goto exit;
}
@@ -2450,8 +2536,9 @@
digest = globus_malloc(SHA_DIGEST_LENGTH);
memset(digest, 0, SHA_DIGEST_LENGTH);
- if(SHA1(buff, buff_length,
- digest) == NULL)
+ if(SHA1((unsigned char *) buff,
+ buff_length,
+ (unsigned char *) digest) == NULL)
{
result = GlobusWSSEErrorOpenSSL(
"Could not compute SHA1 digest");
@@ -2634,8 +2721,8 @@
signature_value_buff = globus_malloc(EVP_PKEY_size(user_key));
if(EVP_SignFinal(&rsa_sha1_evp,
- signature_value_buff,
- (unsigned int *)&signature_value_buff_length,
+ (unsigned char *) signature_value_buff,
+ &signature_value_buff_length,
user_key) == 0)
{
result = GlobusWSSEErrorOpenSSL(
@@ -2724,7 +2811,7 @@
char * output_buff = NULL;
int res = 0;
char * soap_message_buff = NULL;
- int soap_message_buff_length = 0;
+ size_t soap_message_buff_length = 0;
GlobusWSSEDebugPrintf(
GLOBUS_L_WS_SECURITY_DEBUG_VERIFY,
@@ -2803,7 +2890,7 @@
for(; ind < prefixes->length; ++ind)
{
inc_ns_prefixes[ind] = xmlStrdup(
- prefixes->elements[ind]);
+ (xmlChar *) prefixes->elements[ind]);
}
}
@@ -3141,7 +3228,7 @@
for(; ind < prefixes->length; ++ind)
{
inc_ns_prefixes[ind] = xmlStrdup(
- prefixes->elements[ind]);
+ (xmlChar *) prefixes->elements[ind]);
}
}
@@ -3266,11 +3353,11 @@
iter = doc->children;
while(iter)
{
- if(iter->type == XML_ELEMENT_NODE && xmlHasProp(iter, "Id"))
+ if(iter->type == XML_ELEMENT_NODE && xmlHasProp(iter, (xmlChar *) "Id"))
{
xmlChar * idvalue;
- idvalue = xmlGetProp(iter, "Id");
- if(idvalue && !xmlStrcmp(idvalue, id))
+ idvalue = xmlGetProp(iter, (xmlChar *) "Id");
+ if(idvalue && !xmlStrcmp(idvalue, (xmlChar*) id))
{
xmlFree(idvalue);
break;
More information about the cwscore-commit
mailing list