[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