void lasso_server_init_id_wsf_services(LassoServer *server, xmlNode *t) { xmlNode *t2 = t->children; /* Services */ if (strcmp((char*)t->name, "Services") == 0) { while (t2) { LassoDiscoServiceInstance *s; if (t2->type != XML_ELEMENT_NODE) { t2 = t2->next; continue; } s = g_object_new(LASSO_TYPE_DISCO_SERVICE_INSTANCE, NULL); LASSO_NODE_GET_CLASS(s)->init_from_xml(LASSO_NODE(s), t2); g_hash_table_insert(server->services, g_strdup(s->ServiceType), s); t2 = t2->next; } } }
void lasso_server_init_id_wsf20_svcmds(LassoServer *server, xmlNode *t) { xmlNode *t2 = t->children; if (strcmp((char*)t->name, "SvcMDs") == 0) { while (t2) { LassoIdWsf2DiscoSvcMetadata *svcMD; if (t2->type != XML_ELEMENT_NODE) { t2 = t2->next; continue; } svcMD = lasso_idwsf2_disco_svc_metadata_new(); LASSO_NODE_GET_CLASS(svcMD)->init_from_xml(LASSO_NODE(svcMD), t2); server->private_data->svc_metadatas = g_list_append( server->private_data->svc_metadatas, svcMD); t2 = t2->next; } } }
static int init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoServer *server = LASSO_SERVER(node); xmlNode *t; xmlChar *s; int rc = 0; rc = parent_class->init_from_xml(node, xmlnode); if (server->private_key) { server->private_data->encryption_private_key = lasso_xmlsec_load_private_key(server->private_key, server->private_key_password); } if (rc) return rc; s = xmlGetProp(xmlnode, (xmlChar*)"SignatureMethod"); if (s && strcmp((char*)s, "RSA_SHA1") == 0) server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; if (s && strcmp((char*)s, "DSA_SHA1") == 0) server->signature_method = LASSO_SIGNATURE_METHOD_DSA_SHA1; if (s) xmlFree(s); t = xmlnode->children; while (t) { xmlNode *t2 = t->children; if (t->type != XML_ELEMENT_NODE) { t = t->next; continue; } /* Providers */ if (strcmp((char*)t->name, "Providers") == 0) { while (t2) { LassoProvider *p; if (t2->type != XML_ELEMENT_NODE) { t2 = t2->next; continue; } p = g_object_new(LASSO_TYPE_PROVIDER, NULL); LASSO_NODE_GET_CLASS(p)->init_from_xml(LASSO_NODE(p), t2); if (lasso_provider_load_public_key(p, LASSO_PUBLIC_KEY_SIGNING)) { g_hash_table_insert(server->providers, g_strdup(p->ProviderID), p); } else { message(G_LOG_LEVEL_CRITICAL, "Failed to load signing public key for %s.", p->ProviderID); } t2 = t2->next; } } #ifdef LASSO_WSF_ENABLED lasso_server_init_id_wsf_services(server, t); lasso_server_init_id_wsf20_svcmds(server, t); #endif t = t->next; } return 0; }