Ticket #12: assertion_query_metadata.patch
| File assertion_query_metadata.patch, 23.2 kB (added by bdauvergne, 8 months ago) |
|---|
-
a/lasso/id-ff/defederation.c
old new 175 175 if (remote_providerID != NULL) { 176 176 profile->remote_providerID = g_strdup(remote_providerID); 177 177 } else { 178 profile->remote_providerID = lasso_server_get_first_providerID(profile->server); 178 LassoProvider *my_provider = LASSO_PROVIDER(profile->server); 179 LassoProviderRole role = LASSO_PROVIDER_ROLE_IDP; 180 if (my_provider->role == LASSO_PROVIDER_ROLE_IDP) { 181 role = LASSO_PROVIDER_ROLE_SP; 182 } 183 profile->remote_providerID = lasso_server_get_first_providerID_by_role(profile->server, role); 179 184 if (profile->remote_providerID == NULL) { 180 185 return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); 181 186 } -
a/lasso/id-ff/login.c
old new 1244 1244 if (remote_providerID != NULL) { 1245 1245 profile->remote_providerID = g_strdup(remote_providerID); 1246 1246 } else { 1247 profile->remote_providerID = lasso_server_get_first_providerID (profile->server);1247 profile->remote_providerID = lasso_server_get_first_providerID_by_role(profile->server, LASSO_PROVIDER_ROLE_IDP); 1248 1248 if (profile->remote_providerID == NULL) { 1249 1249 return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); 1250 1250 } -
a/lasso/id-ff/provider.c
old new 36 36 37 37 #include <lasso/saml-2.0/providerprivate.h> 38 38 39 static char *protocol_uris[ ] = {39 static char *protocol_uris[LASSO_MD_PROTOCOL_TYPE_LAST] = { 40 40 "http://projectliberty.org/profiles/fedterm", 41 41 "http://projectliberty.org/profiles/nim", 42 42 "http://projectliberty.org/profiles/rni", 43 43 "http://projectliberty.org/profiles/slo", 44 44 NULL /* none for single sign on */ 45 45 }; 46 static char *protocol_md_nodename[ ] = {46 static char *protocol_md_nodename[LASSO_MD_PROTOCOL_TYPE_LAST] = { 47 47 "FederationTerminationNotificationProtocolProfile", 48 48 "NameIdentifierMappingProtocolProfile", 49 49 "RegisterNameIdentifierProtocolProfile", 50 50 "SingleLogoutProtocolProfile", 51 51 "SingleSignOnProtocolProfile" 52 52 }; 53 static char *protocol_roles[] = { NULL, "sp", "idp"}; 54 char *protocol_methods[] = {"", "", "", "", "", "-http", "-soap"}; 53 static char *protocol_roles[LASSO_PROVIDER_ROLE_LAST] = { 54 NULL, "sp", "idp", 55 "authn-authority", "pdp", "attribute-authority" 56 }; 57 char *protocol_methods[LASSO_HTTP_METHOD_LAST] = { 58 "", "", "", "", 59 "", "-http", "-soap" 60 }; 55 61 56 62 /*****************************************************************************/ 57 63 /* public methods */ … … 80 86 if (sid == NULL) 81 87 sid = provider->private_data->default_assertion_consumer; 82 88 83 descriptor = provider->private_data-> SPDescriptor;89 descriptor = provider->private_data->Descriptors; 84 90 if (descriptor == NULL) 85 91 return NULL; 86 92 … … 110 116 GHashTable *descriptor; 111 117 112 118 g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); 113 descriptor = provider->private_data->SPDescriptor; /* default to SP */ 114 if (provider->role == LASSO_PROVIDER_ROLE_IDP) 115 descriptor = provider->private_data->IDPDescriptor; 119 descriptor = provider->private_data->Descriptors; /* default to SP */ 116 120 if (descriptor == NULL) 117 121 return NULL; 118 122 … … 141 145 GHashTable *descriptor; 142 146 143 147 g_return_val_if_fail(LASSO_IS_PROVIDER(provider), NULL); 144 descriptor = provider->private_data->SPDescriptor; /* default to SP */ 145 if (provider->role == LASSO_PROVIDER_ROLE_IDP) 146 descriptor = provider->private_data->IDPDescriptor; 148 descriptor = provider->private_data->Descriptors; 147 149 148 150 return g_hash_table_lookup(descriptor, name); 149 151 } … … 424 426 { 425 427 xmlNode *xmlnode; 426 428 LassoProvider *provider = LASSO_PROVIDER(node); 427 char *roles[ ] = { "None", "SP", "IdP"};429 char *roles[LASSO_PROVIDER_ROLE_LAST] = { "None", "SP", "IdP", "AuthnAuthority", "PDP", "AttributeAuthority"}; 428 430 char *encryption_mode[] = { "None", "NameId", "Assertion", "Both" }; 429 431 430 432 xmlnode = parent_class->get_xmlNode(node, lasso_dump); … … 447 449 init_from_xml(LassoNode *node, xmlNode *xmlnode) 448 450 { 449 451 LassoProvider *provider = LASSO_PROVIDER(node); 452 char *roles[LASSO_PROVIDER_ROLE_LAST] = { "None", "SP", "IdP", "AuthnAuthority", "PDP", "AttributeAuthority"}; 450 453 xmlChar *s; 454 int i; 451 455 452 456 parent_class->init_from_xml(node, xmlnode); 453 457 … … 457 461 458 462 /* Load provider role */ 459 463 s = xmlGetProp(xmlnode, (xmlChar*)"ProviderRole"); 460 if (s != NULL && strcmp((char*)s, "SP") == 0) { 461 provider->role = LASSO_PROVIDER_ROLE_SP; 462 } else if (s != NULL && strcmp((char*)s, "IdP") == 0) { 463 provider->role = LASSO_PROVIDER_ROLE_IDP; 464 provider->role = LASSO_PROVIDER_ROLE_NONE; 465 i = LASSO_PROVIDER_ROLE_NONE; 466 while (i < LASSO_PROVIDER_ROLE_LAST) { 467 if (strcmp((char*)s, roles[i]) == 0) { 468 provider->role = i; 469 break; 470 } 471 i++; 464 472 } 465 473 if (s != NULL) { 466 474 xmlFree(s); … … 519 527 } 520 528 provider->private_data->dispose_has_run = TRUE; 521 529 522 if (provider->private_data->IDPDescriptor) { 523 g_hash_table_foreach(provider->private_data->IDPDescriptor, 524 (GHFunc)free_list_strings, NULL); 525 g_hash_table_destroy(provider->private_data->IDPDescriptor); 526 } 527 provider->private_data->IDPDescriptor = NULL; 528 529 if (provider->private_data->SPDescriptor) { 530 g_hash_table_foreach(provider->private_data->SPDescriptor, 530 if (provider->private_data->Descriptors) { 531 g_hash_table_foreach(provider->private_data->Descriptors, 531 532 (GHFunc)free_list_strings, NULL); 532 g_hash_table_destroy(provider->private_data-> SPDescriptor);533 g_hash_table_destroy(provider->private_data->Descriptors); 533 534 } 534 provider->private_data-> SPDescriptor= NULL;535 provider->private_data->Descriptors = NULL; 535 536 536 537 if (provider->private_data->organization) { 537 538 xmlFreeNode(provider->private_data->organization); … … 614 615 provider->private_data->encryption_mode = LASSO_ENCRYPTION_MODE_NONE; 615 616 616 617 /* no value_destroy_func since it shouldn't destroy the GList on insert */ 617 provider->private_data->IDPDescriptor = g_hash_table_new_full( 618 g_str_hash, g_str_equal, g_free, NULL); 619 provider->private_data->SPDescriptor = g_hash_table_new_full( 618 provider->private_data->Descriptors = g_hash_table_new_full( 620 619 g_str_hash, g_str_equal, g_free, NULL); 620 provider->private_data->attributes = NULL; 621 621 } 622 622 623 623 static void … … 729 729 xpathObj = xmlXPathEvalExpression((xmlChar*)xpath_idp, xpathCtx); 730 730 if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { 731 731 load_descriptor(xpathObj->nodesetval->nodeTab[0], 732 provider->private_data-> IDPDescriptor, provider);732 provider->private_data->Descriptors, provider); 733 733 if (provider->private_data->conformance < LASSO_PROTOCOL_LIBERTY_1_2) { 734 734 /* lookup ProviderID */ 735 735 node = xpathObj->nodesetval->nodeTab[0]->children; … … 747 747 xpathObj = xmlXPathEvalExpression((xmlChar*)xpath_sp, xpathCtx); 748 748 if (xpathObj && xpathObj->nodesetval && xpathObj->nodesetval->nodeNr == 1) { 749 749 load_descriptor(xpathObj->nodesetval->nodeTab[0], 750 provider->private_data-> SPDescriptor, provider);750 provider->private_data->Descriptors, provider); 751 751 if (provider->private_data->conformance < LASSO_PROTOCOL_LIBERTY_1_2) { 752 752 /* lookup ProviderID */ 753 753 node = xpathObj->nodesetval->nodeTab[0]->children; -
a/lasso/id-ff/provider.h
old new 70 70 LASSO_HTTP_METHOD_REDIRECT, 71 71 LASSO_HTTP_METHOD_SOAP, 72 72 LASSO_HTTP_METHOD_ARTIFACT_GET, 73 LASSO_HTTP_METHOD_ARTIFACT_POST 73 LASSO_HTTP_METHOD_ARTIFACT_POST, 74 LASSO_HTTP_METHOD_LAST 74 75 } LassoHttpMethod; 75 76 76 77 … … 95 96 LASSO_MD_PROTOCOL_TYPE_SINGLE_SIGN_ON, 96 97 LASSO_MD_PROTOCOL_TYPE_ARTIFACT_RESOLUTION, 97 98 LASSO_MD_PROTOCOL_TYPE_MANAGE_NAME_ID, 98 LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST 99 LASSO_MD_PROTOCOL_TYPE_ASSERTION_ID_REQUEST, 100 LASSO_MD_PROTOCOL_TYPE_AUTHN_QUERY, 101 LASSO_MD_PROTOCOL_TYPE_AUTHZ, 102 LASSO_MD_PROTOCOL_TYPE_ATTRIBUTE, 103 LASSO_MD_PROTOCOL_TYPE_LAST 99 104 } LassoMdProtocolType; 100 105 101 106 … … 108 113 * Provider Role. 109 114 **/ 110 115 typedef enum { 116 LASSO_PROVIDER_ROLE_ANY = -1, 111 117 LASSO_PROVIDER_ROLE_NONE = 0, 118 LASSO_PROVIDER_ROLE_IDP, 112 119 LASSO_PROVIDER_ROLE_SP, 113 LASSO_PROVIDER_ROLE_IDP 120 LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY, 121 LASSO_PROVIDER_ROLE_PDP, 122 LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY, 123 LASSO_PROVIDER_ROLE_LAST 114 124 } LassoProviderRole; 115 125 116 126 -
a/lasso/id-ff/providerprivate.h
old new 47 47 gboolean dispose_has_run; 48 48 49 49 LassoProtocolConformance conformance; 50 GHashTable *SPDescriptor; 50 GHashTable *Descriptors; 51 GList *attributes; /* of LassoSaml2Attribute */ 51 52 char *default_assertion_consumer; 52 GHashTable *IDPDescriptor;53 53 xmlNode *organization; 54 54 55 55 char *affiliation_owner_id; -
a/lasso/saml-2.0/assertion_query.c
old new 30 30 #include <lasso/id-ff/identityprivate.h> 31 31 #include <lasso/id-ff/serverprivate.h> 32 32 #include <lasso/xml/xml_enc.h> 33 #include <lasso/xml/saml-2.0/saml2_assertion.h> 33 34 #include <lasso/xml/saml-2.0/samlp2_assertion_id_request.h> 34 35 #include <lasso/xml/saml-2.0/samlp2_authn_query.h> 35 36 #include <lasso/xml/saml-2.0/samlp2_attribute_query.h> … … 70 71 LassoFederation *federation; 71 72 LassoSamlp2RequestAbstract *request; 72 73 74 g_return_val_if_fail(http_method == LASSO_HTTP_METHOD_ANY || 75 http_method == LASSO_HTTP_METHOD_SOAP, 76 LASSO_PARAM_ERROR_INVALID_VALUE); 73 77 g_return_val_if_fail(LASSO_IS_ASSERTION_QUERY(assertion_query), 74 78 LASSO_PARAM_ERROR_INVALID_VALUE); 75 g_return_val_if_fail(remote_provider_id != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);76 79 77 80 profile = LASSO_PROFILE(assertion_query); 78 81 … … 82 85 } 83 86 84 87 /* set the remote provider id */ 85 profile->remote_providerID = g_strdup(remote_provider_id); 88 profile->remote_providerID = NULL; 89 if (remote_provider_id) { 90 profile->remote_providerID = g_strdup(remote_provider_id); 91 } else { 92 LassoProviderRole role = LASSO_PROVIDER_ROLE_NONE; 93 switch (query_request_type) { 94 case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN: 95 role = LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY; 96 break; 97 case LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE: 98 role = LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY; 99 break; 100 case LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION: 101 role = LASSO_PROVIDER_ROLE_PDP; 102 break; 103 } 104 profile->remote_providerID = 105 lasso_server_get_first_providerID_by_role(profile->server, 106 role); 107 } 108 g_return_val_if_fail(profile->remote_providerID != NULL, 109 LASSO_PARAM_ERROR_INVALID_VALUE); 86 110 111 /* Lookup the remote provider */ 87 112 remote_provider = g_hash_table_lookup(profile->server->providers, 88 113 profile->remote_providerID); 89 114 if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { 90 115 return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); 91 116 } 92 93 /* XXX: check HTTP method is supported */ 94 117 95 118 assertion_query->private_data->query_request_type = query_request_type; 96 119 switch (query_request_type) { 97 120 case LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID: … … 111 134 } 112 135 113 136 if (query_request_type != LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID) { 137 LassoSaml2NameID *nameID = NULL; 114 138 /* fill <Subject> */ 115 139 LassoSamlp2SubjectQueryAbstract *subject_query; 116 140 117 141 /* Get federation */ 118 federation = g_hash_table_lookup(profile->identity->federations, 119 profile->remote_providerID); 120 if (LASSO_IS_FEDERATION(federation) == FALSE) { 121 return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); 122 } /* XXX: should support looking up transient id */ 123 142 if (profile->session) { 143 LassoSaml2Assertion *assertion; 144 assertion = LASSO_SAML2_ASSERTION(lasso_session_get_assertion( 145 profile->session, (gchar*)profile->remote_providerID)); 146 if (assertion && assertion->Subject) { 147 nameID = assertion->Subject->NameID; 148 } 149 } 150 if (nameID == NULL) { 151 federation = g_hash_table_lookup(profile->identity->federations, 152 profile->remote_providerID); 153 if (LASSO_IS_FEDERATION(federation) == FALSE) { 154 return critical_error(LASSO_PROFILE_ERROR_FEDERATION_NOT_FOUND); 155 } /* XXX: should support looking up transient id */ 156 nameID = LASSO_SAML2_NAME_ID(lasso_profile_get_nameIdentifier(profile)); 157 } 124 158 subject_query = LASSO_SAMLP2_SUBJECT_QUERY_ABSTRACT(profile->request); 125 159 subject_query->Subject = LASSO_SAML2_SUBJECT(lasso_saml2_subject_new()); 126 subject_query->Subject->NameID =LASSO_SAML2_NAME_ID( 127 lasso_profile_get_nameIdentifier(profile)); 128 160 subject_query->Subject->NameID = g_object_ref(nameID); 129 161 } 130 162 /* Setup usual request attributes */ 131 163 request = LASSO_SAMLP2_REQUEST_ABSTRACT(profile->request); 132 164 request->ID = lasso_build_unique_id(32); 133 165 request->Version = g_strdup("2.0"); … … 135 167 LASSO_PROVIDER(profile->server)->ProviderID)); 136 168 request->IssueInstant = lasso_get_current_time(); 137 169 170 request->sign_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; 171 if (profile->server->certificate) { 172 request->sign_type = LASSO_SIGNATURE_TYPE_WITHX509; 173 } else { 174 request->sign_type = LASSO_SIGNATURE_TYPE_SIMPLE; 175 } 176 request->private_key_file = g_strdup(profile->server->private_key); 177 request->certificate_file = g_strdup(profile->server->certificate); 178 138 179 profile->http_request_method = http_method; 139 180 140 181 return 0; … … 166 207 if (LASSO_IS_PROVIDER(remote_provider) == FALSE) { 167 208 return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); 168 209 } 169 170 210 if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) { 171 if (assertion_query->private_data->query_request_type == \ 172 LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID) { 173 profile->msg_url = lasso_provider_get_metadata_one(remote_provider, 174 "AssertionIDRequestService SOAP"); 175 } else { 176 profile->msg_url = lasso_provider_get_metadata_one(remote_provider, 177 "AttributeService SOAP"); 211 LassoAssertionQueryRequestType type; 212 /* XXX: support only SOAP */ 213 static const gchar *servicepoints[LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST] = { 214 "AssertionIDRequestService SOAP", 215 "AuthnQueryService SOAP", 216 "AuthzService SOAP", 217 "AttributeService SOAP" 218 }; 219 type = assertion_query->private_data->query_request_type; 220 if (type <= LASSO_ASSERTION_QUERY_REQUEST_TYPE_ASSERTION_ID || 221 type >= LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION) { 222 return LASSO_PARAM_ERROR_INVALID_VALUE; 178 223 } 179 /* XXX set private key so message is signed */ 224 profile->msg_url = lasso_provider_get_metadata_one(remote_provider, 225 servicepoints[type]); 226 227 /* XXX set private key so message is signed */ 180 228 profile->msg_body = lasso_node_export_to_soap(profile->request); 181 229 return 0; 182 230 } … … 228 276 /* verify signatures */ 229 277 profile->signature_status = lasso_provider_verify_signature( 230 278 remote_provider, request_msg, "ID", LASSO_MESSAGE_FORMAT_SOAP); 231 profile->signature_status = 0; /* XXX: signature check disabled for zxid */ 279 280 // profile->signature_status = 0; /* XXX: signature check disabled for zxid */ 232 281 233 282 profile->http_request_method = LASSO_HTTP_METHOD_SOAP; 234 283 -
a/lasso/saml-2.0/assertion_query.h
old new 67 67 LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHN, 68 68 LASSO_ASSERTION_QUERY_REQUEST_TYPE_ATTRIBUTE, 69 69 LASSO_ASSERTION_QUERY_REQUEST_TYPE_AUTHZ_DECISION, 70 LASSO_ASSERTION_QUERY_REQUEST_TYPE_LAST 70 71 } LassoAssertionQueryRequestType; 71 72 72 73 struct _LassoAssertionQuery { -
a/lasso/saml-2.0/ecp.c
old new 170 170 xmlOutputBufferClose(buf); 171 171 xmlFreeDoc(doc); 172 172 173 profile->remote_providerID = lasso_server_get_first_providerID (profile->server);173 profile->remote_providerID = lasso_server_get_first_providerID_by_role(profile->server, LASSO_PROVIDER_ROLE_IDP); 174 174 if (profile->remote_providerID == NULL) { 175 175 return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND); 176 176 } -
a/lasso/saml-2.0/provider.c
old new 26 26 27 27 #include <lasso/saml-2.0/providerprivate.h> 28 28 #include <lasso/id-ff/providerprivate.h> 29 #include <lasso/xml/saml-2.0/saml2_attribute.h> 29 30 30 const char *profile_names[ ] = {31 const char *profile_names[LASSO_MD_PROTOCOL_TYPE_LAST] = { 31 32 "", /* No fedterm in SAML 2.0 */ 32 "NameIDMappingService", 33 "NameIDMappingService", /*IDPSSODescriptor*/ 33 34 "", /* No rni in SAML 2.0 */ 34 "SingleLogoutService", 35 "SingleSignOnService", 36 "ArtifactResolutionService", 37 "ManageNameIDService", 38 "AssertionIDRequestService", 39 NULL 35 "SingleLogoutService", /*SSODescriptor*/ 36 "SingleSignOnService", /*IDPSSODescriptor*/ 37 "ArtifactResolutionService", /*SSODescriptor*/ 38 "ManageNameIDService", /*SSODescriptor*/ 39 "AssertionIDRequestService", /* IDPSSODescriptor, 40 AuthnAuhtorityDescriptor, 41 PDPDescriptor, 42 AttributeAuthorityDescriptor */ 43 "AuthnQueryService", /*AuthnAuthorityDescriptor*/ 44 "AuthzService", /*PDPDescriptor*/ 45 "AttributeService" /*AttributeAuthorityDescriptor*/ 40 46 }; 41 47 42 48 static void … … 72 78 t = t->next; 73 79 continue; 74 80 } 81 if (strcmp((char*)t->name, "Attribute") == 0) { 82 LassoSaml2Attribute *attribute; 83 attribute = LASSO_SAML2_ATTRIBUTE(lasso_node_new_from_xmlNode(t)); 84 if (attribute) { 85 provider->private_data->attributes = 86 g_list_append(provider->private_data->attributes, attribute); 87 } 88 continue; 89 } 75 90 binding = (char*)xmlGetProp(t, (xmlChar*)"Binding"); 76 91 if (binding) { 77 92 /* Endpoint type */ … … 109 124 name = g_strdup_printf("%s %s %s", t->name, binding_s, index); 110 125 xmlFree(index); 111 126 xmlFree(is_default); 112 } else { 127 } 128 else { 113 129 name = g_strdup_printf("%s %s", t->name, binding_s); 114 130 } 115 131 xmlFree(binding); … … 179 195 180 196 if (strcmp((char*)descriptor_node->name, "IDPSSODescriptor") == 0) { 181 197 load_descriptor(descriptor_node, 182 provider->private_data-> IDPDescriptor, provider);198 provider->private_data->Descriptors, provider); 183 199 provider->role = LASSO_PROVIDER_ROLE_IDP; 184 200 continue; 185 201 } 186 202 187 203 if (strcmp((char*)descriptor_node->name, "SPSSODescriptor") == 0) { 188 204 load_descriptor(descriptor_node, 189 provider->private_data-> SPDescriptor, provider);205 provider->private_data->Descriptors, provider); 190 206 provider->role = LASSO_PROVIDER_ROLE_SP; 191 207 continue; 192 208 } 193 209 210 if (strcmp((char*)descriptor_node->name, "AttributeAuthorityDescriptor") == 0) { 211 load_descriptor(descriptor_node, 212 provider->private_data->Descriptors, provider); 213 provider->role = LASSO_PROVIDER_ROLE_ATTRIBUTE_AUTHORITY; 214 continue; 215 } 216 217 if (strcmp((char*)descriptor_node->name, "PDPDescriptor") == 0) { 218 load_descriptor(descriptor_node, 219 provider->private_data->Descriptors, provider); 220 provider->role = LASSO_PROVIDER_ROLE_PDP; 221 continue; 222 } 223 224 if (strcmp((char*)descriptor_node->name, "AuthnAuthorityDescriptor") == 0) { 225 load_descriptor(descriptor_node, 226 provider->private_data->Descriptors, provider); 227 provider->role = LASSO_PROVIDER_ROLE_AUTHN_AUTHORITY; 228 continue; 229 } 230 194 231 if (strcmp((char*)descriptor_node->name, "Organization") == 0) { 195 232 provider->private_data->organization = xmlCopyNode( 196 233 descriptor_node, 1); … … 216 253 LASSO_HTTP_METHOD_SOAP, LASSO_HTTP_METHOD_REDIRECT, LASSO_HTTP_METHOD_POST 217 254 }; 218 255 219 if (remote_provider->role == LASSO_PROVIDER_ROLE_SP)220 provider->role = LASSO_PROVIDER_ROLE_IDP;221 if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP)222 provider->role = LASSO_PROVIDER_ROLE_SP;223 224 256 for (i=0; possible_bindings[i] && method == LASSO_HTTP_METHOD_NONE; i++) { 225 257 char *s; 226 258 GList *l1, *l2; … … 255 287 sid = g_strdup_printf("%d", service_id); 256 288 } 257 289 258 descriptor = provider->private_data-> SPDescriptor;290 descriptor = provider->private_data->Descriptors; 259 291 if (descriptor == NULL) 260 292 return NULL; 261 293 … … 292 324 char *binding_s = NULL; 293 325 int lname; 294 326 295 descriptor = provider->private_data-> SPDescriptor;327 descriptor = provider->private_data->Descriptors; 296 328 if (descriptor == NULL) 297 329 return NULL; 298 330 … … 355 387 sid = g_strdup_printf("%d", service_id); 356 388 } 357 389 358 descriptor = provider->private_data-> SPDescriptor;390 descriptor = provider->private_data->Descriptors; 359 391 if (descriptor == NULL) 360 392 return NULL; 361 393 … … 380 412 LassoMdProtocolType protocol_type, LassoHttpMethod http_method, 381 413 gboolean initiate_profile) 382 414 { 383 LassoProviderRole initiating_role;384 415 char *protocol_profile; 385 416 char *http_methods[] = { 386 417 NULL, … … 394 425 NULL 395 426 }; 396 427 397 398 initiating_role = remote_provider->role;399 if (remote_provider->role == LASSO_PROVIDER_ROLE_SP) {400 provider->role = LASSO_PROVIDER_ROLE_IDP;401 }402 if (remote_provider->role == LASSO_PROVIDER_ROLE_IDP) {403 provider->role = LASSO_PROVIDER_ROLE_SP;404 }405 if (initiate_profile)406 initiating_role = provider->role;407 408 428 protocol_profile = g_strdup_printf("%s %s", profile_names[protocol_type], 409 429 http_methods[http_method+1]); 410 430
