Merge branch 'rewrite-node-impl'
This commit is contained in:
commit
ff3ae1ea77
|
@ -483,6 +483,9 @@ def parse_header(header_file):
|
|||
pass
|
||||
else:
|
||||
# TODO: Add parsing of OFTYPE
|
||||
# Transform struct to typedef
|
||||
# example: "struct _LassoAssertion" -> "LassoAssertion"
|
||||
line = re.sub('\s+struct _', ' ', line)
|
||||
member_match = re.match('\s+(\w+)\s+(\*?\w+)', line)
|
||||
if member_match:
|
||||
member_type, member_name = normalise_var(member_match.group(1), member_match.group(2))
|
||||
|
|
|
@ -452,8 +452,8 @@ class AttributeAuthorityTestCase(unittest.TestCase):
|
|||
class LogoutTestCase(unittest.TestCase):
|
||||
def test01(self):
|
||||
'''Test parsing of a logout request with more than one session index'''
|
||||
content = '''<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="xxxx" Version="2.0" IssueInstant="2010-06-14T22:00:00">
|
||||
<samlp:Issuer>me</samlp:Issuer>
|
||||
content = '''<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="xxxx" Version="2.0" IssueInstant="2010-06-14T22:00:00">
|
||||
<saml:Issuer>me</saml:Issuer>
|
||||
<samlp:SessionIndex>id1</samlp:SessionIndex>
|
||||
<samlp:SessionIndex>id2</samlp:SessionIndex>
|
||||
<samlp:SessionIndex>id3</samlp:SessionIndex>
|
||||
|
@ -461,8 +461,8 @@ class LogoutTestCase(unittest.TestCase):
|
|||
|
||||
node = lasso.Samlp2LogoutRequest.newFromXmlNode(content)
|
||||
assert isinstance(node, lasso.Samlp2LogoutRequest)
|
||||
assert node.sessionIndex == 'id3'
|
||||
assert node.sessionIndexes == ('id1', 'id2', 'id3')
|
||||
assert node.sessionIndex == 'id1'
|
||||
assert node.sessionIndexes == ('id2', 'id3', 'id1')
|
||||
|
||||
serverSuite = unittest.makeSuite(ServerTestCase, 'test')
|
||||
loginSuite = unittest.makeSuite(LoginTestCase, 'test')
|
||||
|
|
|
@ -840,6 +840,7 @@ lasso/xml/saml-2.0/Makefile
|
|||
lasso/xml/soap-1.1/Makefile
|
||||
lasso/xml/id-wsf-2.0/Makefile
|
||||
lasso/xml/ws/Makefile
|
||||
lasso/xml/dsig/Makefile
|
||||
tests/Makefile
|
||||
tests/data/Makefile
|
||||
lasso.pc
|
||||
|
|
|
@ -57,6 +57,8 @@ if MINGW
|
|||
liblasso_la_LIBADD = \
|
||||
$(top_builddir)/lasso/xml/liblasso-xml.la \
|
||||
$(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \
|
||||
$(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \
|
||||
$(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \
|
||||
$(top_builddir)/lasso/id-ff/liblasso-id-ff.la \
|
||||
$(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \
|
||||
$(WSF_LIB_FILE) \
|
||||
|
@ -73,6 +75,7 @@ liblasso_la_LIBADD = \
|
|||
$(top_builddir)/lasso/xml/liblasso-xml.la \
|
||||
$(top_builddir)/lasso/xml/saml-2.0/liblasso-xml-saml2.la \
|
||||
$(top_builddir)/lasso/xml/soap-1.1/liblasso-xml-soap11.la \
|
||||
$(top_builddir)/lasso/xml/dsig/liblasso-xml-dsig.la \
|
||||
$(top_builddir)/lasso/id-ff/liblasso-id-ff.la \
|
||||
$(top_builddir)/lasso/saml-2.0/liblasso-saml-20.la \
|
||||
$(WSF_LIB_FILE) \
|
||||
|
|
|
@ -456,6 +456,15 @@ lasso_defederation_validate_notification(LassoDefederation *defederation)
|
|||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
class_init(LassoDefederationClass *klass)
|
||||
{
|
||||
LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
|
||||
|
||||
nclass->node_data = NULL;
|
||||
}
|
||||
|
||||
|
||||
GType
|
||||
lasso_defederation_get_type()
|
||||
{
|
||||
|
@ -464,11 +473,11 @@ lasso_defederation_get_type()
|
|||
if (!this_type) {
|
||||
static const GTypeInfo this_info = {
|
||||
sizeof (LassoDefederationClass),
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, (GClassInitFunc) class_init, NULL, NULL,
|
||||
sizeof(LassoDefederation),
|
||||
0,
|
||||
NULL,
|
||||
NULL
|
||||
NULL,
|
||||
};
|
||||
|
||||
this_type = g_type_register_static(LASSO_TYPE_PROFILE,
|
||||
|
|
|
@ -167,6 +167,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
G_STRUCT_OFFSET(LassoFederation, remote_nameIdentifier), NULL, NULL, NULL},
|
||||
{ "RemoteProviderID", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoFederation, remote_providerID), NULL, NULL, NULL},
|
||||
{ "FederationDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -274,6 +274,9 @@
|
|||
#include "../id-wsf/id_ff_extensions_private.h"
|
||||
#endif
|
||||
|
||||
#define LASSO_LOGIN_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_LOGIN, LassoLoginPrivate))
|
||||
|
||||
|
||||
static void lasso_login_build_assertion_artifact(LassoLogin *login);
|
||||
|
||||
|
@ -338,6 +341,7 @@ lasso_login_build_assertion(LassoLogin *login,
|
|||
LassoProvider *provider = NULL;
|
||||
LassoSaml2EncryptedElement *encrypted_element = NULL;
|
||||
LassoSamlSubjectStatementAbstract *ss;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
|
||||
|
@ -400,14 +404,9 @@ lasso_login_build_assertion(LassoLogin *login,
|
|||
assertion->AuthenticationStatement = LASSO_SAML_AUTHENTICATION_STATEMENT(as);
|
||||
|
||||
/* Save signing material in assertion private datas to be able to sign later */
|
||||
if (profile->server->certificate) {
|
||||
assertion->sign_type = LASSO_SIGNATURE_TYPE_WITHX509;
|
||||
} else {
|
||||
assertion->sign_type = LASSO_SIGNATURE_TYPE_SIMPLE;
|
||||
}
|
||||
assertion->sign_method = profile->server->signature_method;
|
||||
lasso_assign_string(assertion->private_key_file, profile->server->private_key);
|
||||
lasso_assign_string(assertion->certificate_file, profile->server->certificate);
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(login->parent.server,
|
||||
profile->remote_providerID, (LassoNode*)assertion));
|
||||
|
||||
|
||||
if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_POST || \
|
||||
login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_LECP) {
|
||||
|
@ -424,7 +423,7 @@ lasso_login_build_assertion(LassoLogin *login,
|
|||
if (profile->session == NULL) {
|
||||
profile->session = lasso_session_new();
|
||||
}
|
||||
lasso_assign_new_gobject(login->assertion, LASSO_SAML_ASSERTION(assertion));
|
||||
lasso_assign_gobject(login->assertion, LASSO_SAML_ASSERTION(assertion));
|
||||
lasso_session_add_assertion(profile->session, profile->remote_providerID,
|
||||
LASSO_NODE(assertion));
|
||||
|
||||
|
@ -454,7 +453,9 @@ lasso_login_build_assertion(LassoLogin *login,
|
|||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
cleanup:
|
||||
lasso_release_gobject(assertion);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1078,15 +1079,15 @@ lasso_login_build_artifact_msg(LassoLogin *login, LassoHttpMethod http_method)
|
|||
* </para></listitem>
|
||||
* </itemizedlist>
|
||||
**/
|
||||
gint
|
||||
lasso_error_t
|
||||
lasso_login_build_authn_request_msg(LassoLogin *login)
|
||||
{
|
||||
LassoProvider *provider, *remote_provider;
|
||||
LassoProfile *profile;
|
||||
char *md_authnRequestsSigned, *url, *query, *lareq, *protocolProfile;
|
||||
char *md_authnRequestsSigned, *url, *query = NULL, *lareq, *protocolProfile;
|
||||
LassoProviderRole role, remote_role;
|
||||
gboolean must_sign;
|
||||
gint ret = 0;
|
||||
gint rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
profile = LASSO_PROFILE(login);
|
||||
|
@ -1132,20 +1133,14 @@ lasso_login_build_authn_request_msg(LassoLogin *login)
|
|||
provider->role = role;
|
||||
remote_provider->role = remote_role;
|
||||
|
||||
if (!must_sign)
|
||||
LASSO_SAMLP_REQUEST_ABSTRACT(
|
||||
profile->request)->sign_type = LASSO_SIGNATURE_TYPE_NONE;
|
||||
|
||||
if (login->http_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
/* REDIRECT -> query */
|
||||
if (must_sign) {
|
||||
query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->request),
|
||||
profile->server->signature_method,
|
||||
profile->server->private_key,
|
||||
profile->server->private_key_password);
|
||||
lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server,
|
||||
profile->remote_providerID,
|
||||
profile->request, &query));
|
||||
} else {
|
||||
query = lasso_node_export_to_query_with_password(
|
||||
LASSO_NODE(profile->request), 0, NULL, NULL);
|
||||
query = lasso_node_build_query(LASSO_NODE(profile->request));
|
||||
}
|
||||
if (query == NULL) {
|
||||
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
|
@ -1164,14 +1159,9 @@ lasso_login_build_authn_request_msg(LassoLogin *login)
|
|||
}
|
||||
if (login->http_method == LASSO_HTTP_METHOD_POST) {
|
||||
if (must_sign) {
|
||||
/* XXX: private_key_file is not declared within request
|
||||
* snippets so it is not freed on destroy, so it is
|
||||
* normal to not strdup() it; nevertheless it would
|
||||
* probably be more clean not to to it this way */
|
||||
LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file =
|
||||
profile->server->private_key;
|
||||
LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file =
|
||||
profile->server->certificate;
|
||||
lasso_server_set_signature_for_provider_by_name(profile->server,
|
||||
profile->remote_providerID,
|
||||
profile->request);
|
||||
}
|
||||
lareq = lasso_node_export_to_base64(profile->request);
|
||||
|
||||
|
@ -1184,7 +1174,8 @@ lasso_login_build_authn_request_msg(LassoLogin *login)
|
|||
lasso_assign_new_string(profile->msg_body, lareq);
|
||||
}
|
||||
|
||||
return ret;
|
||||
cleanup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1244,8 +1235,9 @@ lasso_login_build_authn_request_msg(LassoLogin *login)
|
|||
gint
|
||||
lasso_login_build_authn_response_msg(LassoLogin *login)
|
||||
{
|
||||
LassoProvider *remote_provider;
|
||||
LassoProfile *profile;
|
||||
LassoProvider *remote_provider = NULL;
|
||||
LassoProfile *profile = NULL;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
|
||||
|
@ -1274,22 +1266,14 @@ lasso_login_build_authn_response_msg(LassoLogin *login)
|
|||
|
||||
/* Countermeasure: The issuer should sign <lib:AuthnResponse> messages.
|
||||
* (binding and profiles (1.2errata2, page 65) */
|
||||
if (profile->server->certificate) {
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_type =
|
||||
LASSO_SIGNATURE_TYPE_WITHX509;
|
||||
} else {
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_type =
|
||||
LASSO_SIGNATURE_TYPE_SIMPLE;
|
||||
}
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_method =
|
||||
LASSO_SIGNATURE_METHOD_RSA_SHA1;
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->private_key_file =
|
||||
profile->server->private_key;
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->certificate_file =
|
||||
profile->server->certificate;
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(
|
||||
profile->server,
|
||||
profile->remote_providerID,
|
||||
profile->response));
|
||||
|
||||
/* build an lib:AuthnResponse base64 encoded */
|
||||
lasso_assign_new_string(profile->msg_body, lasso_node_export_to_base64(LASSO_NODE(profile->response)));
|
||||
lasso_assign_new_string(profile->msg_body,
|
||||
lasso_node_export_to_base64(LASSO_NODE(profile->response)));
|
||||
|
||||
remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
if (LASSO_IS_PROVIDER(remote_provider) == FALSE)
|
||||
|
@ -1299,8 +1283,8 @@ lasso_login_build_authn_response_msg(LassoLogin *login)
|
|||
if (profile->msg_url == NULL) {
|
||||
return LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
cleanup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1327,6 +1311,7 @@ lasso_login_build_request_msg(LassoLogin *login)
|
|||
{
|
||||
LassoProvider *remote_provider;
|
||||
LassoProfile *profile;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
|
||||
|
@ -1342,10 +1327,10 @@ lasso_login_build_request_msg(LassoLogin *login)
|
|||
return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID);
|
||||
}
|
||||
|
||||
LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file =
|
||||
profile->server->private_key;
|
||||
LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file =
|
||||
profile->server->certificate;
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(
|
||||
profile->server,
|
||||
profile->remote_providerID,
|
||||
profile->request));
|
||||
lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->request));
|
||||
|
||||
remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
|
@ -1353,7 +1338,8 @@ lasso_login_build_request_msg(LassoLogin *login)
|
|||
return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
}
|
||||
lasso_assign_new_string(profile->msg_url, lasso_provider_get_metadata_one(remote_provider, "SoapEndpoint"));
|
||||
return 0;
|
||||
cleanup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1379,7 +1365,7 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
|
|||
{
|
||||
LassoProvider *remote_provider;
|
||||
LassoProfile *profile;
|
||||
gint ret = 0;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGIN(login), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
profile = LASSO_PROFILE(login);
|
||||
|
@ -1398,38 +1384,28 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
|
|||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->MinorVersion = 0;
|
||||
}
|
||||
|
||||
if (profile->server->certificate) {
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_type =
|
||||
LASSO_SIGNATURE_TYPE_WITHX509;
|
||||
} else {
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_type =
|
||||
LASSO_SIGNATURE_TYPE_SIMPLE;
|
||||
}
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->sign_method =
|
||||
LASSO_SIGNATURE_METHOD_RSA_SHA1;
|
||||
|
||||
if (remote_providerID != NULL) {
|
||||
lasso_assign_string(profile->remote_providerID, remote_providerID);
|
||||
remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
ret = lasso_provider_verify_signature(remote_provider,
|
||||
rc = lasso_provider_verify_signature(remote_provider,
|
||||
login->private_data->soap_request_msg,
|
||||
"RequestID", LASSO_MESSAGE_FORMAT_SOAP);
|
||||
lasso_release_string(login->private_data->soap_request_msg);
|
||||
|
||||
/* lasso_profile_set_session_from_dump has not been called */
|
||||
if (profile->session == NULL) {
|
||||
ret = LASSO_PROFILE_ERROR_SESSION_NOT_FOUND;
|
||||
rc = LASSO_PROFILE_ERROR_SESSION_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* change status code into RequestDenied if signature is
|
||||
* invalid or not found or if an error occurs during
|
||||
* verification */
|
||||
if (ret != 0) {
|
||||
if (rc != 0) {
|
||||
lasso_profile_set_response_status(profile,
|
||||
LASSO_SAML_STATUS_CODE_REQUEST_DENIED);
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
if (rc == 0) {
|
||||
/* get assertion in session and add it in response */
|
||||
LassoSamlAssertion *assertion;
|
||||
LassoSamlpStatus *status;
|
||||
|
@ -1456,13 +1432,14 @@ lasso_login_build_response_msg(LassoLogin *login, gchar *remote_providerID)
|
|||
lasso_profile_set_response_status(profile, LASSO_SAML_STATUS_CODE_REQUEST_DENIED);
|
||||
}
|
||||
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->private_key_file =
|
||||
profile->server->private_key;
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->certificate_file =
|
||||
profile->server->certificate;
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(
|
||||
profile->server,
|
||||
profile->remote_providerID,
|
||||
profile->response));
|
||||
lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->response));
|
||||
|
||||
return ret;
|
||||
cleanup:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1567,15 +1544,6 @@ lasso_login_init_authn_request(LassoLogin *login, const gchar *remote_providerID
|
|||
lasso_assign_string(LASSO_LIB_AUTHN_REQUEST(profile->request)->RelayState,
|
||||
profile->msg_relayState);
|
||||
|
||||
if (http_method == LASSO_HTTP_METHOD_POST) {
|
||||
request->sign_method = LASSO_SIGNATURE_METHOD_RSA_SHA1;
|
||||
if (profile->server->certificate) {
|
||||
request->sign_type = LASSO_SIGNATURE_TYPE_WITHX509;
|
||||
} else {
|
||||
request->sign_type = LASSO_SIGNATURE_TYPE_SIMPLE;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1709,15 +1677,7 @@ lasso_login_init_request(LassoLogin *login, gchar *response_msg,
|
|||
request->MajorVersion = LASSO_SAML_MAJOR_VERSION_N;
|
||||
request->MinorVersion = LASSO_SAML_MINOR_VERSION_N;
|
||||
lasso_assign_new_string(request->IssueInstant, lasso_get_current_time());
|
||||
|
||||
LASSO_SAMLP_REQUEST(request)->AssertionArtifact = artifact_b64;
|
||||
if (profile->server->certificate) {
|
||||
request->sign_type = LASSO_SIGNATURE_TYPE_WITHX509;
|
||||
} else {
|
||||
request->sign_type = LASSO_SIGNATURE_TYPE_SIMPLE;
|
||||
}
|
||||
request->sign_method = LASSO_SIGNATURE_METHOD_RSA_SHA1;
|
||||
|
||||
lasso_assign_new_gobject(profile->request, LASSO_NODE(request));
|
||||
|
||||
return ret;
|
||||
|
@ -2329,6 +2289,10 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "AssertionArtifact", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLogin, assertionArtifact), NULL, NULL, NULL},
|
||||
{ "NameIDPolicy", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLogin, nameIDPolicy), NULL, NULL, NULL},
|
||||
{ "Assertion", SNIPPET_NODE_IN_CHILD, G_STRUCT_OFFSET(LassoLogin, assertion), NULL, NULL, NULL},
|
||||
{ "RequestID", SNIPPET_CONTENT | SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(LassoLoginPrivate, request_id), NULL, NULL, NULL},
|
||||
{ "LoginDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL},
|
||||
{ "ProtocolProfile", SNIPPET_CONTENT, 0, NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -2342,7 +2306,6 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
|
|||
|
||||
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
|
||||
xmlSetProp(xmlnode, (xmlChar*)"LoginDumpVersion", (xmlChar*)"2");
|
||||
xmlSetProp(xmlnode, (xmlChar*)"RequestID", (xmlChar*)LASSO_LOGIN(node)->private_data->request_id);
|
||||
|
||||
if (login->protocolProfile == LASSO_LOGIN_PROTOCOL_PROFILE_BRWS_ART)
|
||||
xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ProtocolProfile", (xmlChar*)"Artifact");
|
||||
|
@ -2364,9 +2327,6 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
|
|||
rc = parent_class->init_from_xml(node, xmlnode);
|
||||
if (rc) return rc;
|
||||
|
||||
lasso_assign_new_string(LASSO_LOGIN(node)->private_data->request_id, (char*)xmlGetProp(xmlnode,
|
||||
(xmlChar*)"RequestID"));
|
||||
|
||||
t = xmlnode->children;
|
||||
while (t) {
|
||||
if (t->type != XML_ELEMENT_NODE) {
|
||||
|
@ -2410,14 +2370,6 @@ dispose(GObject *object)
|
|||
G_OBJECT_CLASS(parent_class)->dispose(object);
|
||||
}
|
||||
|
||||
static void
|
||||
finalize(GObject *object)
|
||||
{
|
||||
LassoLogin *login = LASSO_LOGIN(object);
|
||||
lasso_release(login->private_data);
|
||||
G_OBJECT_CLASS(parent_class)->finalize(object);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
@ -2425,8 +2377,7 @@ finalize(GObject *object)
|
|||
static void
|
||||
instance_init(LassoLogin *login)
|
||||
{
|
||||
login->private_data = g_new0(LassoLoginPrivate, 1);
|
||||
|
||||
login->private_data = LASSO_LOGIN_GET_PRIVATE(login);
|
||||
login->protocolProfile = 0;
|
||||
login->assertionArtifact = NULL;
|
||||
login->nameIDPolicy = NULL;
|
||||
|
@ -2445,9 +2396,9 @@ class_init(LassoLoginClass *klass)
|
|||
lasso_node_class_set_nodename(nclass, "Login");
|
||||
lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
g_type_class_add_private(klass, sizeof(LassoLoginPrivate));
|
||||
|
||||
G_OBJECT_CLASS(klass)->dispose = dispose;
|
||||
G_OBJECT_CLASS(klass)->finalize = finalize;
|
||||
}
|
||||
|
||||
GType
|
||||
|
|
|
@ -277,14 +277,16 @@ static void check_soap_support(gchar *key, LassoProvider *provider, LassoProfile
|
|||
*
|
||||
* Return value: 0 on success; or a negative value otherwise.
|
||||
**/
|
||||
gint
|
||||
lasso_error_t
|
||||
lasso_logout_build_request_msg(LassoLogout *logout)
|
||||
{
|
||||
LassoProfile *profile;
|
||||
LassoProvider *remote_provider;
|
||||
char *url, *query;
|
||||
LassoProfile *profile = NULL;
|
||||
LassoProvider *remote_provider = NULL;
|
||||
char *url = NULL;
|
||||
char *query = NULL;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
lasso_bad_param(LOGOUT, logout);
|
||||
|
||||
profile = LASSO_PROFILE(logout);
|
||||
lasso_profile_clean_msg_info(profile);
|
||||
|
@ -294,14 +296,14 @@ lasso_logout_build_request_msg(LassoLogout *logout)
|
|||
}
|
||||
|
||||
if (profile->remote_providerID == NULL) {
|
||||
/* this means lasso_logout_init_request was not called before */
|
||||
return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID);
|
||||
/* it means lasso_logout_init_request was not called before */
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID);
|
||||
}
|
||||
|
||||
/* get remote provider */
|
||||
remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
if (LASSO_IS_PROVIDER(remote_provider) == FALSE) {
|
||||
return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
}
|
||||
|
||||
/* build the logout request message */
|
||||
|
@ -311,38 +313,30 @@ lasso_logout_build_request_msg(LassoLogout *logout)
|
|||
remote_provider, "SoapEndpoint"));
|
||||
/* FIXME: private key file is not owned by the request ? That is potentially a
|
||||
* problem if the server life does not exceed the request */
|
||||
lasso_assign_new_string(LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->private_key_file,
|
||||
profile->server->private_key);
|
||||
lasso_assign_new_string(LASSO_SAMLP_REQUEST_ABSTRACT(profile->request)->certificate_file,
|
||||
profile->server->certificate);
|
||||
lasso_assign_new_string(profile->msg_body, lasso_node_export_to_soap(profile->request));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (logout->initial_http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(logout->parent.server,
|
||||
profile->remote_providerID, profile->request));
|
||||
lasso_assign_new_string(profile->msg_body,
|
||||
lasso_node_export_to_soap(profile->request));
|
||||
} else if (logout->initial_http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
/* build and optionally sign the logout request QUERY message */
|
||||
url = lasso_provider_get_metadata_one(remote_provider,
|
||||
"SingleLogoutServiceURL");
|
||||
if (url == NULL) {
|
||||
return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
}
|
||||
query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->request),
|
||||
profile->server->signature_method,
|
||||
profile->server->private_key,
|
||||
profile->server->private_key_password);
|
||||
if (query == NULL) {
|
||||
lasso_release(url);
|
||||
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
}
|
||||
if (url == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server,
|
||||
profile->remote_providerID, profile->request, &query));
|
||||
if (query == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
/* build the msg_url */
|
||||
lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query));
|
||||
lasso_release(url);
|
||||
lasso_release(query);
|
||||
lasso_release_string(profile->msg_body);
|
||||
return 0;
|
||||
} else {
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD);
|
||||
}
|
||||
|
||||
return critical_error(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD);
|
||||
cleanup:
|
||||
lasso_release(url);
|
||||
lasso_release(query);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
@ -372,16 +366,17 @@ lasso_logout_build_request_msg(LassoLogout *logout)
|
|||
*
|
||||
* Return value: 0 on success; or a negative value otherwise.
|
||||
**/
|
||||
gint
|
||||
lasso_error_t
|
||||
lasso_logout_build_response_msg(LassoLogout *logout)
|
||||
{
|
||||
LassoProfile *profile;
|
||||
LassoProvider *provider;
|
||||
gchar *url, *query;
|
||||
LassoProfile *profile = NULL;
|
||||
LassoProvider *provider = NULL;
|
||||
gchar *url = NULL;
|
||||
gchar *query = NULL;
|
||||
lasso_error_t rc = 0;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
|
||||
profile = LASSO_PROFILE(logout);
|
||||
lasso_bad_param(LOGOUT, logout);
|
||||
profile = &logout->parent;
|
||||
lasso_profile_clean_msg_info(profile);
|
||||
|
||||
if (! profile->private_data || ! logout->private_data) {
|
||||
|
@ -403,8 +398,7 @@ lasso_logout_build_response_msg(LassoLogout *logout)
|
|||
LASSO_SIGNATURE_TYPE_WITHX509 :
|
||||
LASSO_SIGNATURE_TYPE_SIMPLE,
|
||||
LASSO_SIGNATURE_METHOD_RSA_SHA1));
|
||||
}
|
||||
if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
} else if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
lasso_assign_new_gobject(profile->response,
|
||||
lasso_lib_logout_response_new_full(
|
||||
LASSO_PROVIDER(profile->server)->ProviderID,
|
||||
|
@ -419,7 +413,7 @@ lasso_logout_build_response_msg(LassoLogout *logout)
|
|||
/* no remote provider id set or no response set, this means
|
||||
* this function got called before validate_request, probably
|
||||
* because there were no active session */
|
||||
return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
}
|
||||
|
||||
/* Set the RelayState */
|
||||
|
@ -428,47 +422,33 @@ lasso_logout_build_response_msg(LassoLogout *logout)
|
|||
|
||||
/* build logout response message */
|
||||
if (profile->http_request_method == LASSO_HTTP_METHOD_SOAP) {
|
||||
lasso_release(profile->msg_url);
|
||||
lasso_assign_string(
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->private_key_file,
|
||||
profile->server->private_key);
|
||||
lasso_assign_string(
|
||||
LASSO_SAMLP_RESPONSE_ABSTRACT(profile->response)->certificate_file,
|
||||
profile->server->certificate);
|
||||
lasso_release_string(profile->msg_url);
|
||||
lasso_check_good_rc(lasso_server_set_signature_for_provider_by_name(logout->parent.server,
|
||||
profile->remote_providerID, profile->response));
|
||||
lasso_assign_new_string(profile->msg_body,
|
||||
lasso_node_export_to_soap(profile->response));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
/* get the provider */
|
||||
} else if (profile->http_request_method == LASSO_HTTP_METHOD_REDIRECT) {
|
||||
lasso_release_string(profile->msg_body);
|
||||
provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
if (provider == NULL) {
|
||||
return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
}
|
||||
if (provider == NULL)
|
||||
goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
|
||||
url = lasso_provider_get_metadata_one(provider, "SingleLogoutServiceReturnURL");
|
||||
if (url == NULL) {
|
||||
/* XXX: but wouldn't it be nice to provide a fallback msgUrl,
|
||||
* something like the document root of the other site ? */
|
||||
return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
}
|
||||
query = lasso_node_export_to_query_with_password(profile->response,
|
||||
profile->server->signature_method,
|
||||
profile->server->private_key,
|
||||
profile->server->private_key_password);
|
||||
if (query == NULL) {
|
||||
lasso_release(url);
|
||||
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
}
|
||||
if (url == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server,
|
||||
profile->remote_providerID, profile->response, &query));
|
||||
if (query == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query));
|
||||
lasso_release(profile->msg_body);
|
||||
lasso_release(url);
|
||||
lasso_release(query);
|
||||
return 0;
|
||||
} else {
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_HTTP_METHOD);
|
||||
}
|
||||
|
||||
return LASSO_PROFILE_ERROR_MISSING_REQUEST;
|
||||
cleanup:
|
||||
lasso_release_string(url);
|
||||
lasso_release_string(query);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -804,21 +784,23 @@ lasso_logout_process_request_msg(LassoLogout *logout, char *request_msg)
|
|||
*
|
||||
* Return value: 0 on success; or a negative value otherwise.
|
||||
**/
|
||||
gint
|
||||
lasso_error_t
|
||||
lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
|
||||
{
|
||||
LassoProfile *profile;
|
||||
LassoProvider *remote_provider;
|
||||
char *statusCodeValue;
|
||||
LassoProfile *profile = NULL;
|
||||
LassoProvider *remote_provider = NULL;
|
||||
char *statusCodeValue = NULL;
|
||||
LassoHttpMethod response_method;
|
||||
LassoMessageFormat format;
|
||||
LassoLibStatusResponse *response;
|
||||
int rc = 0;
|
||||
LassoLibStatusResponse *response = NULL;
|
||||
lasso_error_t rc = 0;
|
||||
gchar *url = NULL;
|
||||
gchar *query = NULL;
|
||||
|
||||
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
||||
g_return_val_if_fail(response_msg != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
|
||||
|
||||
profile = LASSO_PROFILE(logout);
|
||||
lasso_bad_param(LOGOUT, logout);
|
||||
lasso_null_param(response_msg);
|
||||
profile = &logout->parent;
|
||||
|
||||
IF_SAML2(profile) {
|
||||
return lasso_saml20_logout_process_response_msg(logout, response_msg);
|
||||
|
@ -835,24 +817,20 @@ lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
|
|||
response_method = LASSO_HTTP_METHOD_REDIRECT;
|
||||
break;
|
||||
default:
|
||||
return critical_error(LASSO_PROFILE_ERROR_INVALID_MSG);
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_INVALID_MSG);
|
||||
}
|
||||
|
||||
/* get the RelayState */
|
||||
lasso_assign_string(profile->msg_relayState,
|
||||
LASSO_LIB_STATUS_RESPONSE(profile->response)->RelayState);
|
||||
|
||||
/* get provider */
|
||||
lasso_assign_string(profile->remote_providerID,
|
||||
LASSO_LIB_STATUS_RESPONSE(profile->response)->ProviderID);
|
||||
if (profile->remote_providerID == NULL) {
|
||||
return critical_error(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID);
|
||||
}
|
||||
|
||||
if (profile->remote_providerID == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_REMOTE_PROVIDERID);
|
||||
remote_provider = lasso_server_get_provider(profile->server, profile->remote_providerID);
|
||||
if (LASSO_IS_PROVIDER(remote_provider) == FALSE) {
|
||||
return critical_error(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
}
|
||||
if (LASSO_IS_PROVIDER(remote_provider) == FALSE)
|
||||
goto_cleanup_with_rc(LASSO_SERVER_ERROR_PROVIDER_NOT_FOUND);
|
||||
|
||||
/* verify signature */
|
||||
rc = lasso_provider_verify_signature(remote_provider, response_msg, "ResponseID", format);
|
||||
|
@ -860,15 +838,17 @@ lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
|
|||
/* This message SHOULD be signed.
|
||||
* -- draft-liberty-idff-protocols-schema-1.2-errata-v2.0.pdf - p38
|
||||
*/
|
||||
message(G_LOG_LEVEL_WARNING, "No signature on response");
|
||||
debug("No signature on logout response");
|
||||
rc = 0;
|
||||
} else {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
response = LASSO_LIB_STATUS_RESPONSE(profile->response);
|
||||
|
||||
if (response->Status == NULL || response->Status->StatusCode == NULL
|
||||
|| response->Status->StatusCode->Value == NULL) {
|
||||
return critical_error(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE);
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_MISSING_STATUS_CODE);
|
||||
}
|
||||
statusCodeValue = response->Status->StatusCode->Value;
|
||||
|
||||
|
@ -880,70 +860,51 @@ lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
|
|||
if (response->Status->StatusCode && response->Status->StatusCode->StatusCode)
|
||||
statusCodeValue = response->Status->StatusCode->StatusCode->Value;
|
||||
|
||||
if (strcmp(statusCodeValue, LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE) == 0 &&
|
||||
if (lasso_strisequal(statusCodeValue, LASSO_LIB_STATUS_CODE_UNSUPPORTED_PROFILE) &&
|
||||
remote_provider->role == LASSO_PROVIDER_ROLE_IDP &&
|
||||
logout->initial_http_request_method == LASSO_HTTP_METHOD_SOAP) {
|
||||
gchar *url, *query;
|
||||
|
||||
/* Build and optionally sign the logout request QUERY message */
|
||||
lasso_release(profile->msg_body);
|
||||
url = lasso_provider_get_metadata_one(remote_provider,
|
||||
"SingleLogoutServiceURL");
|
||||
if (url == NULL) {
|
||||
return critical_error(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
}
|
||||
query = lasso_node_export_to_query_with_password(LASSO_NODE(profile->request),
|
||||
profile->server->signature_method,
|
||||
profile->server->private_key,
|
||||
profile->server->private_key_password);
|
||||
if (query == NULL) {
|
||||
lasso_release(url);
|
||||
return critical_error(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
}
|
||||
if (url == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_UNKNOWN_PROFILE_URL);
|
||||
|
||||
lasso_check_good_rc(lasso_server_export_to_query_for_provider_by_name(profile->server,
|
||||
profile->remote_providerID, profile->request,
|
||||
&query));
|
||||
if (query == NULL)
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_BUILDING_QUERY_FAILED);
|
||||
lasso_assign_new_string(profile->msg_url, lasso_concat_url_query(url, query));
|
||||
lasso_release(url);
|
||||
lasso_release(query);
|
||||
lasso_release(profile->msg_body);
|
||||
|
||||
/* send a HTTP Redirect / GET method, so first remove session */
|
||||
lasso_session_remove_assertion(
|
||||
profile->session, profile->remote_providerID);
|
||||
|
||||
return LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE;
|
||||
}
|
||||
if (strcmp(statusCodeValue, LASSO_SAML_STATUS_CODE_REQUEST_DENIED) == 0) {
|
||||
goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE);
|
||||
} else if (lasso_strisequal(statusCodeValue, LASSO_SAML_STATUS_CODE_REQUEST_DENIED)) {
|
||||
/* assertion no longer on idp so removing it locally too */
|
||||
message(G_LOG_LEVEL_WARNING, "SP answer is request denied");
|
||||
lasso_session_remove_assertion(
|
||||
profile->session, profile->remote_providerID);
|
||||
return LASSO_LOGOUT_ERROR_REQUEST_DENIED;
|
||||
}
|
||||
if (strcmp(statusCodeValue,
|
||||
LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST) == 0) {
|
||||
goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_REQUEST_DENIED);
|
||||
} else if (lasso_strisequal(statusCodeValue,
|
||||
LASSO_LIB_STATUS_CODE_FEDERATION_DOES_NOT_EXIST)) {
|
||||
/* how could this happen ? probably error in SP */
|
||||
/* let's remove the assertion nevertheless */
|
||||
message(G_LOG_LEVEL_WARNING, "SP answer is federation does not exist");
|
||||
lasso_session_remove_assertion(
|
||||
profile->session, profile->remote_providerID);
|
||||
return LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND;
|
||||
goto_cleanup_with_rc(LASSO_LOGOUT_ERROR_FEDERATION_NOT_FOUND);
|
||||
}
|
||||
message(G_LOG_LEVEL_CRITICAL, "Status code is not success : %s", statusCodeValue);
|
||||
return LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS;
|
||||
error("Status code is not success : %s", statusCodeValue);
|
||||
goto_cleanup_with_rc(LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS);
|
||||
}
|
||||
|
||||
/* LogoutResponse status code value is ok */
|
||||
|
||||
|
||||
/* if SOAP method or, if IDP provider type and HTTP Redirect, then remove assertion */
|
||||
if ( response_method == LASSO_HTTP_METHOD_SOAP ||
|
||||
(remote_provider->role == LASSO_PROVIDER_ROLE_SP &&
|
||||
response_method == LASSO_HTTP_METHOD_REDIRECT) ) {
|
||||
lasso_session_remove_assertion(profile->session, profile->remote_providerID);
|
||||
#if 0 /* ? */
|
||||
if (remote_provider->role == LASSO_PROVIDER_ROLE_SP &&
|
||||
logout->providerID_index >= 0) {
|
||||
logout->providerID_index--;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* If at IDP and if there is no more assertion, IDP has logged out
|
||||
|
@ -963,7 +924,9 @@ lasso_logout_process_response_msg(LassoLogout *logout, gchar *response_msg)
|
|||
lasso_transfer_gobject(profile->response, logout->initial_response);
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
lasso_release_string(url);
|
||||
lasso_release_string(query);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1199,6 +1162,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
G_STRUCT_OFFSET(LassoLogout, initial_remote_providerID), NULL, NULL, NULL},
|
||||
{ "InitialHttpRequestMethod", SNIPPET_CONTENT | SNIPPET_INTEGER,
|
||||
G_STRUCT_OFFSET(LassoLogout, initial_http_request_method), NULL, NULL, NULL},
|
||||
{ "LogoutDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
|
||||
/* "ProviderIdIndex" must not be dumped (since apps assume to get
|
||||
* it back to 0 after a restore from dump) (maybe this behaviour should
|
||||
* be fixed)
|
||||
|
|
|
@ -645,6 +645,7 @@ lasso_name_registration_validate_request(LassoNameRegistration *name_registratio
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "OldNameIdentifier", SNIPPET_NODE_IN_CHILD,
|
||||
G_STRUCT_OFFSET(LassoNameRegistration, oldNameIdentifier), NULL, NULL, NULL},
|
||||
{ "NameRegistrationDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -539,69 +539,15 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
NULL, NULL},
|
||||
{ "HttpRequestMethod", SNIPPET_CONTENT | SNIPPET_INTEGER,
|
||||
G_STRUCT_OFFSET(LassoProfile, http_request_method), NULL, NULL, NULL},
|
||||
{ "Artifact", SNIPPET_CONTENT | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoProfilePrivate,
|
||||
artifact), NULL, NULL, NULL },
|
||||
{ "ArtifactMessage", SNIPPET_CONTENT | SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoProfilePrivate,
|
||||
artifact_message), NULL, NULL, NULL },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
static LassoNodeClass *parent_class = NULL;
|
||||
|
||||
static xmlNode*
|
||||
get_xmlNode(LassoNode *node, gboolean lasso_dump)
|
||||
{
|
||||
xmlNode *xmlnode;
|
||||
LassoProfile *profile = LASSO_PROFILE(node);
|
||||
|
||||
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
|
||||
|
||||
if (profile->private_data->artifact) {
|
||||
xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Artifact",
|
||||
(xmlChar*)profile->private_data->artifact);
|
||||
}
|
||||
|
||||
if (profile->private_data->artifact_message) {
|
||||
xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ArtifactMessage",
|
||||
(xmlChar*)profile->private_data->artifact_message);
|
||||
}
|
||||
|
||||
return xmlnode;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
init_from_xml(LassoNode *node, xmlNode *xmlnode)
|
||||
{
|
||||
LassoProfile *profile = LASSO_PROFILE(node);
|
||||
xmlNode *t;
|
||||
|
||||
parent_class->init_from_xml(node, xmlnode);
|
||||
|
||||
if (xmlnode == NULL)
|
||||
return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED;
|
||||
|
||||
t = xmlnode->children;
|
||||
while (t) {
|
||||
xmlChar *s;
|
||||
|
||||
if (t->type != XML_ELEMENT_NODE) {
|
||||
t = t->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcmp((char*)t->name, "Artifact") == 0) {
|
||||
s = xmlNodeGetContent(t);
|
||||
lasso_assign_string(profile->private_data->artifact, (char*)s);
|
||||
xmlFree(s);
|
||||
} else if (strcmp((char*)t->name, "ArtifactMessage") == 0) {
|
||||
s = xmlNodeGetContent(t);
|
||||
lasso_assign_string(profile->private_data->artifact_message, (char*)s);
|
||||
xmlFree(s);
|
||||
}
|
||||
|
||||
t = t->next;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_profile_set_signature_hint:
|
||||
* @profile: a #LassoProfile object
|
||||
|
@ -819,14 +765,6 @@ dispose(GObject *object)
|
|||
G_OBJECT_CLASS(parent_class)->dispose(G_OBJECT(profile));
|
||||
}
|
||||
|
||||
static void
|
||||
finalize(GObject *object)
|
||||
{
|
||||
LassoProfile *profile = LASSO_PROFILE(object);
|
||||
lasso_release(profile->private_data);
|
||||
G_OBJECT_CLASS(parent_class)->finalize(object);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
@ -834,7 +772,7 @@ finalize(GObject *object)
|
|||
static void
|
||||
instance_init(LassoProfile *profile)
|
||||
{
|
||||
profile->private_data = g_new0(LassoProfilePrivate, 1);
|
||||
profile->private_data = LASSO_PROFILE_GET_PRIVATE(profile);
|
||||
profile->private_data->dispose_has_run = FALSE;
|
||||
profile->private_data->artifact = NULL;
|
||||
profile->private_data->artifact_message = NULL;
|
||||
|
@ -864,11 +802,9 @@ class_init(LassoProfileClass *klass)
|
|||
lasso_node_class_set_nodename(nclass, "Profile");
|
||||
lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
nclass->get_xmlNode = get_xmlNode;
|
||||
nclass->init_from_xml = init_from_xml;
|
||||
g_type_class_add_private(klass, sizeof(LassoProfilePrivate));
|
||||
|
||||
G_OBJECT_CLASS(klass)->dispose = dispose;
|
||||
G_OBJECT_CLASS(klass)->finalize = finalize;
|
||||
}
|
||||
|
||||
GType
|
||||
|
|
|
@ -44,6 +44,9 @@ struct _LassoProfilePrivate
|
|||
void lasso_profile_set_response_status(LassoProfile *profile, const gchar *statusCodeValue);
|
||||
void lasso_profile_clean_msg_info(LassoProfile *profile);
|
||||
|
||||
#define LASSO_PROFILE_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_PROFILE, LassoProfilePrivate))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
|
|
@ -516,6 +516,9 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "CaCertChainFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, ca_cert_chain), NULL, NULL, NULL},
|
||||
{ "MetadataFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProvider, metadata_filename), NULL, NULL, NULL},
|
||||
{ "ProviderID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoProvider, ProviderID), NULL, NULL, NULL},
|
||||
{ "ProviderRole", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL},
|
||||
{ "EncryptionMode", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL},
|
||||
{ "ProviderDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -1756,10 +1759,9 @@ cleanup:
|
|||
* @key: a #LassoKey object
|
||||
* @after:(default FALSE): add the key at the end of the list, not on front.
|
||||
*
|
||||
* Add a new signature key for validating message received from @provider.
|
||||
* If the key is used to improve verification time add it first with @after as true, it the key is
|
||||
* ther for coninuitý of service (when doing a key rollover for example) at it last with @after as
|
||||
* false.
|
||||
* Add a new signature key for validating message received from @provider. If the key is used to
|
||||
* improve verification time add it first with @after as true, it the key is ther for continuity of
|
||||
* service (when doing a key rollover for example) at it last with @after as false.
|
||||
*
|
||||
* Return value: 0 if successful, an error code otherwise.
|
||||
*/
|
||||
|
|
|
@ -254,10 +254,20 @@ cleanup:
|
|||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "PrivateKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, private_key), NULL, NULL, NULL},
|
||||
{ "PrivateKeyFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, private_key), NULL,
|
||||
NULL, NULL},
|
||||
{ "PrivateKeyPassword", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoServer, private_key_password), NULL, NULL, NULL},
|
||||
{ "CertificateFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, certificate), NULL, NULL, NULL},
|
||||
{ "CertificateFilePath", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoServer, certificate), NULL,
|
||||
NULL, NULL},
|
||||
{ "SignatureMethod", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
|
||||
{ "Providers", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
|
||||
{ "ServerDumpVersion", SNIPPET_ATTRIBUTE, 0, NULL, NULL, NULL },
|
||||
#ifdef LASSO_WSF_ENABLED
|
||||
{ "Services", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
|
||||
{ "SvcMDs", SNIPPET_LIST_NODES, 0, NULL, NULL, NULL },
|
||||
#endif
|
||||
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@ typedef enum _LassoKeyType {
|
|||
|
||||
struct _LassoKey {
|
||||
LassoNode parent;
|
||||
/*< private >*/
|
||||
LassoKeyPrivate *private_data;
|
||||
};
|
||||
|
||||
|
|
|
@ -125,6 +125,23 @@ static inline void critical(const char *format, ...)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__)
|
||||
# define error(format, args...) \
|
||||
message(G_LOG_LEVEL_DEBUG, format, ##args)
|
||||
#elif defined(HAVE_VARIADIC_MACROS)
|
||||
# define error(...) message(G_LOG_LEVEL_DEBUG, __VA_ARGS__)
|
||||
#else
|
||||
static inline void error(const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char s[1024];
|
||||
va_start(ap, format);
|
||||
g_vsnprintf(s, 1024, format, ap);
|
||||
va_end(ap);
|
||||
message(G_LOG_LEVEL_ERROR, "%s", s);
|
||||
}
|
||||
#endif
|
||||
|
||||
#define critical_error(rc) (critical("%s", lasso_strerror(rc)), rc)
|
||||
|
||||
#endif /* __LASSO_LOGGING_H_ */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
MAINTAINERCLEANFILES = Makefile.in
|
||||
SUBDIRS = saml-2.0 soap-1.1
|
||||
SUBDIRS = saml-2.0 soap-1.1 dsig
|
||||
if WSF_ENABLED
|
||||
SUBDIRS += id-wsf-2.0 ws
|
||||
endif
|
||||
|
@ -140,9 +140,6 @@ endif
|
|||
liblasso_xml_la_SOURCES = \
|
||||
tools.c \
|
||||
xml.c \
|
||||
ds_key_info.c \
|
||||
ds_key_value.c \
|
||||
ds_rsa_key_value.c \
|
||||
lib_assertion.c \
|
||||
lib_authentication_statement.c \
|
||||
lib_authn_context.c \
|
||||
|
@ -194,9 +191,6 @@ liblasso_xml_la_SOURCES = \
|
|||
liblassoinclude_HEADERS = \
|
||||
strings.h \
|
||||
xml.h \
|
||||
ds_key_info.h \
|
||||
ds_key_value.h \
|
||||
ds_rsa_key_value.h \
|
||||
lib_assertion.h \
|
||||
lib_authentication_statement.h \
|
||||
lib_authn_context.h \
|
||||
|
|
|
@ -50,9 +50,11 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "EncryptedData", SNIPPET_XMLNODE,
|
||||
G_STRUCT_OFFSET(LassoDiscoEncryptedResourceID, EncryptedData), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoDiscoEncryptedResourceID, EncryptedData), NULL,
|
||||
LASSO_XMLENC_PREFIX, LASSO_XMLENC_HREF},
|
||||
{ "EncryptedKey", SNIPPET_LIST_XMLNODES,
|
||||
G_STRUCT_OFFSET(LassoDiscoEncryptedResourceID, EncryptedKey), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoDiscoEncryptedResourceID, EncryptedKey), NULL,
|
||||
LASSO_XMLENC_PREFIX, LASSO_XMLENC_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
EXTRA_DIST = xml_saml2.h
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
liblassoincludedir = $(includedir)/lasso/xml/dsig
|
||||
|
||||
INCLUDES = \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_srcdir) \
|
||||
$(LASSO_CORE_CFLAGS) \
|
||||
-DG_LOG_DOMAIN=\"lasso\"
|
||||
|
||||
noinst_LTLIBRARIES = liblasso-xml-dsig.la
|
||||
|
||||
liblasso_xml_dsig_la_SOURCES = \
|
||||
ds_key_info.c \
|
||||
ds_key_value.c \
|
||||
ds_rsa_key_value.c \
|
||||
ds_x509_data.c
|
||||
|
||||
liblassoinclude_HEADERS = \
|
||||
ds_key_info.h \
|
||||
ds_key_value.h \
|
||||
ds_rsa_key_value.h \
|
||||
ds_x509_data.h
|
|
@ -22,8 +22,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "private.h"
|
||||
#include "ds_key_info.h"
|
||||
#include "../private.h"
|
||||
#include "./ds_key_info.h"
|
||||
|
||||
/**
|
||||
* SECTION:ds_key_info
|
|
@ -29,8 +29,8 @@
|
|||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "xml.h"
|
||||
#include "ds_key_value.h"
|
||||
#include "../xml.h"
|
||||
#include "./ds_key_value.h"
|
||||
|
||||
#define LASSO_TYPE_DS_KEY_INFO (lasso_ds_key_info_get_type())
|
||||
#define LASSO_DS_KEY_INFO(obj) \
|
|
@ -22,8 +22,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "private.h"
|
||||
#include "ds_key_value.h"
|
||||
#include "../private.h"
|
||||
#include "./ds_key_value.h"
|
||||
|
||||
/**
|
||||
* SECTION:ds_key_value
|
||||
|
@ -31,12 +31,22 @@
|
|||
*
|
||||
*/
|
||||
|
||||
struct _LassoDsKeyValuePrivate {
|
||||
LassoDsX509Data *X509Data;
|
||||
};
|
||||
|
||||
typedef struct _LassoDsKeyValuePrivate LassoDsKeyValuePrivate;
|
||||
|
||||
#define LASSO_DS_KEY_VALUE_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_DS_KEY_VALUE, LassoDsKeyValuePrivate))
|
||||
|
||||
/*****************************************************************************/
|
||||
/* private methods */
|
||||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "RSAKeyValue", SNIPPET_NODE, G_STRUCT_OFFSET(LassoDsKeyValue, RSAKeyValue), NULL, NULL, NULL},
|
||||
{ "X509Data", SNIPPET_NODE|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsKeyValuePrivate, X509Data), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -54,6 +64,7 @@ class_init(LassoDsKeyValueClass *klass)
|
|||
lasso_node_class_set_nodename(nclass, "KeyValue");
|
||||
lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
g_type_class_add_private(klass, sizeof(LassoDsKeyValuePrivate));
|
||||
}
|
||||
|
||||
GType
|
||||
|
@ -93,3 +104,32 @@ lasso_ds_key_value_new()
|
|||
{
|
||||
return g_object_new(LASSO_TYPE_DS_KEY_VALUE, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_key_value_get_x509_data:
|
||||
*
|
||||
* Get the X509 Data node if there is one.
|
||||
*
|
||||
* Return value:(transfer none): the internal value of the X509Data field
|
||||
*/
|
||||
LassoDsX509Data*
|
||||
lasso_ds_key_value_get_x509_data(LassoDsKeyValue *key_value)
|
||||
{
|
||||
lasso_return_val_if_fail(LASSO_IS_DS_KEY_VALUE(key_value), NULL);
|
||||
|
||||
return LASSO_DS_KEY_VALUE_GET_PRIVATE(key_value)->X509Data;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_key_value_set_x509_data:
|
||||
*
|
||||
* Set the X509 Data node.
|
||||
*
|
||||
*/
|
||||
void
|
||||
lasso_ds_key_value_set_x509_data(LassoDsKeyValue *key_value, LassoDsX509Data *x509_data)
|
||||
{
|
||||
lasso_return_if_fail(LASSO_IS_DS_KEY_VALUE(key_value));
|
||||
|
||||
lasso_assign_gobject(LASSO_DS_KEY_VALUE_GET_PRIVATE(key_value)->X509Data, x509_data);
|
||||
}
|
|
@ -29,8 +29,9 @@
|
|||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "xml.h"
|
||||
#include "ds_rsa_key_value.h"
|
||||
#include "../xml.h"
|
||||
#include "./ds_rsa_key_value.h"
|
||||
#include "./ds_x509_data.h"
|
||||
|
||||
#define LASSO_TYPE_DS_KEY_VALUE (lasso_ds_key_value_get_type())
|
||||
#define LASSO_DS_KEY_VALUE(obj) \
|
||||
|
@ -62,6 +63,9 @@ struct _LassoDsKeyValueClass {
|
|||
|
||||
LASSO_EXPORT GType lasso_ds_key_value_get_type(void);
|
||||
LASSO_EXPORT LassoDsKeyValue* lasso_ds_key_value_new(void);
|
||||
LASSO_EXPORT LassoDsX509Data *lasso_ds_key_value_get_x509_data(LassoDsKeyValue *key_value);
|
||||
LASSO_EXPORT void lasso_ds_key_value_set_x509_data(LassoDsKeyValue *key_value, LassoDsX509Data
|
||||
*x509_data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
|
@ -22,8 +22,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "private.h"
|
||||
#include "ds_rsa_key_value.h"
|
||||
#include "../private.h"
|
||||
#include "./ds_rsa_key_value.h"
|
||||
|
||||
/*
|
||||
* SECTION:ds_rsa_key_value
|
|
@ -29,7 +29,7 @@
|
|||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "xml.h"
|
||||
#include "../xml.h"
|
||||
|
||||
#define LASSO_TYPE_DS_RSA_KEY_VALUE (lasso_ds_rsa_key_value_get_type())
|
||||
#define LASSO_DS_RSA_KEY_VALUE(obj) \
|
|
@ -0,0 +1,204 @@
|
|||
/* $Id$
|
||||
*
|
||||
* Lasso - A free implementation of the Liberty Alliance specifications.
|
||||
*
|
||||
* Copyright (C) 2004-2007 Entr'ouvert
|
||||
* http://lasso.entrouvert.org
|
||||
*
|
||||
* Authors: See AUTHORS file in top-level directory.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "../private.h"
|
||||
#include "./ds_x509_data.h"
|
||||
|
||||
/**
|
||||
* SECTION:ds_x509_data
|
||||
* @short_description: object mapping for an XML DSIG KeyValue element
|
||||
*
|
||||
*/
|
||||
|
||||
struct _LassoDsX509DataPrivate {
|
||||
char *X509Certificate;
|
||||
char *X509SubjectName;
|
||||
char *X509CRL;
|
||||
};
|
||||
#define LASSO_DS_X509_DATA_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_DS_X509_DATA, LassoDsX509DataPrivate))
|
||||
|
||||
/*****************************************************************************/
|
||||
/* private methods */
|
||||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "X509Certificate", SNIPPET_CONTENT|SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(LassoDsX509DataPrivate, X509Certificate), NULL, NULL, NULL},
|
||||
{ "X509SubjectName", SNIPPET_CONTENT|SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(LassoDsX509DataPrivate, X509SubjectName), NULL, NULL, NULL},
|
||||
{ "X509CRL", SNIPPET_CONTENT|SNIPPET_PRIVATE, G_STRUCT_OFFSET(LassoDsX509DataPrivate,
|
||||
X509CRL), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
static LassoNodeClass *parent_class = NULL;
|
||||
|
||||
/*****************************************************************************/
|
||||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
static void
|
||||
instance_init(LassoDsX509Data *x509_data)
|
||||
{
|
||||
x509_data->private_data = LASSO_DS_X509_DATA_GET_PRIVATE(x509_data);
|
||||
}
|
||||
|
||||
static void
|
||||
class_init(LassoDsX509DataClass *klass)
|
||||
{
|
||||
LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
|
||||
|
||||
parent_class = g_type_class_peek_parent(klass);
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
lasso_node_class_set_nodename(nclass, "X509Data");
|
||||
lasso_node_class_set_ns(nclass, LASSO_DS_HREF, LASSO_DS_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
g_type_class_add_private(klass, sizeof(LassoDsX509DataPrivate));
|
||||
}
|
||||
|
||||
GType
|
||||
lasso_ds_x509_data_get_type()
|
||||
{
|
||||
static GType this_type = 0;
|
||||
|
||||
if (!this_type) {
|
||||
static const GTypeInfo this_info = {
|
||||
sizeof (LassoDsX509DataClass),
|
||||
NULL,
|
||||
NULL,
|
||||
(GClassInitFunc) class_init,
|
||||
NULL,
|
||||
NULL,
|
||||
sizeof(LassoDsX509Data),
|
||||
0,
|
||||
(GInstanceInitFunc)instance_init,
|
||||
NULL
|
||||
};
|
||||
|
||||
this_type = g_type_register_static(LASSO_TYPE_NODE,
|
||||
"LassoDsX509Data", &this_info, 0);
|
||||
}
|
||||
return this_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_new:
|
||||
*
|
||||
* Creates a new #LassoDsX509Data object.
|
||||
*
|
||||
* Return value: a newly created #LassoDsX509Data object
|
||||
**/
|
||||
LassoDsX509Data*
|
||||
lasso_ds_x509_data_new()
|
||||
{
|
||||
return g_object_new(LASSO_TYPE_DS_X509_DATA, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_get_certificate:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
*
|
||||
* Return the content of the X509Certificate sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
* Return value:(transfer none): the string currently set in the X509Certificate private field of
|
||||
* the #LassoDsX509Data structure.
|
||||
*/
|
||||
const char*
|
||||
lasso_ds_x509_data_get_certificate(LassoDsX509Data *x509_data) {
|
||||
lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL);
|
||||
return x509_data->private_data->X509Certificate;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_set_certificate:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
* @certificate: a base64 encoded string of the DER representation of the X509 certificate
|
||||
*
|
||||
* Set the content of the X509Certificate sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
*/
|
||||
void
|
||||
lasso_ds_x509_data_set_certificate(LassoDsX509Data *x509_data, const char *certificate) {
|
||||
lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data));
|
||||
lasso_assign_string(x509_data->private_data->X509Certificate, certificate);
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_get_subject_name:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
*
|
||||
* Return the content of the X509SubjectName sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
* Return value:(transfer none): the string currently set in the X509SubjectName private field of
|
||||
* the #LassoDsX509Data structure.
|
||||
*/
|
||||
const char*
|
||||
lasso_ds_x509_data_get_subject_name(LassoDsX509Data *x509_data) {
|
||||
lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL);
|
||||
return x509_data->private_data->X509SubjectName;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_set_subject_name:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
* @subject_name: a base64 encoded string of the DER representation of the X509 subject_name
|
||||
*
|
||||
* Set the content of the X509SubjectName sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
*/
|
||||
void
|
||||
lasso_ds_x509_data_set_subject_name(LassoDsX509Data *x509_data, const char *subject_name) {
|
||||
lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data));
|
||||
lasso_assign_string(x509_data->private_data->X509SubjectName, subject_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_get_crl:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
*
|
||||
* Return the content of the X509CRL sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
* Return value:(transfer none): the string currently set in the X509CRL private field of
|
||||
* the #LassoDsX509Data structure.
|
||||
*/
|
||||
const char*
|
||||
lasso_ds_x509_data_get_crl(LassoDsX509Data *x509_data) {
|
||||
lasso_return_val_if_fail(LASSO_IS_DS_X509_DATA(x509_data), NULL);
|
||||
return x509_data->private_data->X509CRL;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_ds_x509_data_set_crl:
|
||||
* @x509_data: a #LassoDsX509Data object
|
||||
* @crl: a base64 encoded string of the DER representation of the X509 CRL
|
||||
*
|
||||
* Set the content of the X509CRL sub-element, it should be a base64 encoded string.
|
||||
*
|
||||
*/
|
||||
void
|
||||
lasso_ds_x509_data_set_crl(LassoDsX509Data *x509_data, const char *crl) {
|
||||
lasso_return_if_fail(LASSO_IS_DS_X509_DATA(x509_data));
|
||||
lasso_assign_string(x509_data->private_data->X509CRL, crl);
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
/* $Id
|
||||
*
|
||||
* Lasso - A free implementation of the Liberty Alliance specifications.
|
||||
*
|
||||
* Copyright (C) 2004-2007 Entr'ouvert
|
||||
* http://lasso.entrouvert.org
|
||||
*
|
||||
* Authors: See AUTHORS file in top-level directory.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __LASSO_DS_X509_DATA_H__
|
||||
#define __LASSO_DS_X509_DATA_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include "../xml.h"
|
||||
|
||||
#define LASSO_TYPE_DS_X509_DATA (lasso_ds_x509_data_get_type())
|
||||
#define LASSO_DS_X509_DATA(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_DS_X509_DATA, \
|
||||
LassoDsX509Data))
|
||||
#define LASSO_DS_X509_DATA_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST((klass), LASSO_TYPE_DS_X509_DATA, \
|
||||
LassoDsX509DataClass))
|
||||
#define LASSO_IS_DS_X509_DATA(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE((obj), LASSO_TYPE_DS_X509_DATA))
|
||||
#define LASSO_IS_DS_X509_DATA_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE ((klass), LASSO_TYPE_DS_X509_DATA))
|
||||
#define LASSO_DS_X509_DATA_GET_CLASS(o) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((o), LASSO_TYPE_DS_X509_DATA, \
|
||||
LassoDsX509DataClass))
|
||||
|
||||
typedef struct _LassoDsX509Data LassoDsX509Data;
|
||||
typedef struct _LassoDsX509DataClass LassoDsX509DataClass;
|
||||
typedef struct _LassoDsX509DataPrivate LassoDsX509DataPrivate;
|
||||
|
||||
struct _LassoDsX509Data {
|
||||
LassoNode parent;
|
||||
/*< private >*/
|
||||
LassoDsX509DataPrivate *private_data;
|
||||
};
|
||||
|
||||
struct _LassoDsX509DataClass {
|
||||
LassoNodeClass parent;
|
||||
};
|
||||
|
||||
LASSO_EXPORT GType lasso_ds_x509_data_get_type(void);
|
||||
LASSO_EXPORT LassoDsX509Data* lasso_ds_x509_data_new(void);
|
||||
LASSO_EXPORT const char *lasso_ds_x509_data_get_certificate(LassoDsX509Data *x509_data);
|
||||
LASSO_EXPORT void lasso_ds_x509_data_set_certificate(LassoDsX509Data *x509_data, const char *certificate);
|
||||
LASSO_EXPORT const char *lasso_ds_x509_data_get_subject_name(LassoDsX509Data *x509_data);
|
||||
LASSO_EXPORT void lasso_ds_x509_data_set_subject_name(LassoDsX509Data *x509_data, const char *subject_name);
|
||||
LASSO_EXPORT const char *lasso_ds_x509_data_get_crl(LassoDsX509Data *x509_data);
|
||||
LASSO_EXPORT void lasso_ds_x509_data_set_crl(LassoDsX509Data *x509_data, const char *crl);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __LASSO_DS_X509_DATA_H__ */
|
|
@ -0,0 +1,61 @@
|
|||
/* $Id$
|
||||
*
|
||||
* Lasso - A free implementation of the Liberty Alliance specifications.
|
||||
*
|
||||
* Copyright (C) 2004-2007 Entr'ouvert
|
||||
* http://lasso.entrouvert.org
|
||||
*
|
||||
* Authors: See AUTHORS file in top-level directory.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This header file copy part of the SOAP 1.1 specification you can found there:
|
||||
* http://www.w3.org/TR/soap12-part1/
|
||||
* whom copyright is:
|
||||
* Copyright © 2007 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and
|
||||
* document use rules apply.
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* SECTION:dsig_strings
|
||||
* @short_description: General strings constants for XMLDsig
|
||||
* @include: lasso/xml/dsig/strings.h
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef __LASSO_DSIG_STRINGS_H__
|
||||
#define __LASSO_DSIG_STRINGS_H__
|
||||
|
||||
/* xmldsig prefix & href */
|
||||
/**
|
||||
* LASSO_DS_HREF:
|
||||
*
|
||||
* Namespace for FIXME
|
||||
*
|
||||
*/
|
||||
#define LASSO_DS_HREF "http://www.w3.org/2000/09/xmldsig#"
|
||||
/**
|
||||
* LASSO_DS_PREFIX:
|
||||
*
|
||||
* Preferred prefix for namespace of FIXME
|
||||
*
|
||||
*/
|
||||
#define LASSO_DS_PREFIX "ds"
|
||||
|
||||
#endif /* __LASSO_DSIG_STRINGS_H__ */
|
|
@ -56,7 +56,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Address", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoEndpointContext, Address), NULL, NULL, NULL},
|
||||
{ "Framework", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoEndpointContext, Framework), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoEndpointContext, Framework), NULL,
|
||||
LASSO_IDWSF2_SBF_PREFIX, LASSO_IDWSF2_SBF_HREF},
|
||||
{ "SecurityMechID", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoEndpointContext, SecurityMechID), NULL, NULL, NULL},
|
||||
{ "Action", SNIPPET_LIST_CONTENT,
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "KeyDescriptor", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoKeys, KeyDescriptor), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoKeys, KeyDescriptor), NULL, LASSO_METADATA_PREFIX,
|
||||
LASSO_METADATA_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -55,10 +55,10 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoQueryResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_DISCOVERY_HREF},
|
||||
{ "EndpointReference", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoQueryResponse, EndpointReference),
|
||||
"LassoWsAddrEndpointReference", NULL, NULL },
|
||||
"LassoWsAddrEndpointReference", LASSO_WSA_PREFIX, LASSO_WSA_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoQueryResponse, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -59,7 +59,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "SecurityMechID", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSecurityContext, SecurityMechID), NULL, NULL, NULL},
|
||||
{ "Token", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSecurityContext, Token), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSecurityContext, Token), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationAddResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationAddResponse, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationDeleteResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationDeleteResponse, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationQueryResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "SvcMDID", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDAssociationQueryResponse, SvcMDID), NULL, NULL, NULL},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDDeleteResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDDeleteResponse, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDQueryResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "SvcMD", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDQueryResponse, SvcMD),
|
||||
"LassoIdWsf2DiscoSvcMetadata", NULL, NULL },
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDRegisterResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_PREFIX},
|
||||
{ "SvcMDID", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDRegisterResponse, SvcMDID), NULL, NULL, NULL},
|
||||
{ "Keys", SNIPPET_LIST_NODES,
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDReplaceResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DiscoSvcMDReplaceResponse, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Extension", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DstRequest, Extension),
|
||||
"LassoIdWsf2Utilextension", NULL, NULL },
|
||||
"LassoIdWsf2Utilextension", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "itemID", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DstRequest, itemID), NULL, NULL, NULL},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
|
|
|
@ -54,7 +54,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "TestResult", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DstRefQueryResponse, TestResult), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DstRefQueryResponse, TestResult), NULL,
|
||||
LASSO_IDWSF2_DST_PREFIX, LASSO_IDWSF2_DST_HREF},
|
||||
{ "Data", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2DstRefQueryResponse, Data),
|
||||
"LassoIdWsf2DstRefData", NULL, NULL },
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsIdentityMappingResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "MappingOutput", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsIdentityMappingResponse, MappingOutput), NULL, NULL, NULL},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
|
|
|
@ -51,9 +51,11 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "TokenPolicy", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingInput, TokenPolicy), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingInput, TokenPolicy), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{ "Token", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingInput, Token), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingInput, Token), NULL, LASSO_IDWSF2_SEC_PREFIX,
|
||||
LASSO_IDWSF2_SEC_HREF},
|
||||
{ "reqID", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingInput, reqID), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Token", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingOutput, Token), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingOutput, Token), NULL, LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{ "reqRef", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2ImsMappingOutput, reqRef), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -56,7 +56,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Inquiry", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionRequest, Inquiry), NULL, NULL, NULL},
|
||||
{ "KeyInfo", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionRequest, KeyInfo), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionRequest, KeyInfo), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "id", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionRequest, id), NULL, NULL, NULL},
|
||||
{ "language", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionResponse, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "InteractionStatement", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionResponse, InteractionStatement), NULL, NULL, NULL},
|
||||
{ "Parameter", SNIPPET_LIST_NODES,
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Inquiry", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2IsInteractionStatement, Inquiry), NULL, NULL, NULL},
|
||||
{ "Signature", SNIPPET_SIGNATURE, 0, NULL, NULL, NULL },
|
||||
{ "Signature", SNIPPET_SIGNATURE, 0, NULL, LASSO_DS_PREFIX, LASSO_DS_HREF },
|
||||
|
||||
/* hidden fields; used in lasso dumps */
|
||||
{ "SignType", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER | SNIPPET_LASSO_DUMP,
|
||||
|
|
|
@ -65,7 +65,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Subscription", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddEntityRequest, Subscription), NULL, NULL, NULL},
|
||||
{ "TokenPolicy", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddEntityRequest, TokenPolicy), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddEntityRequest, TokenPolicy), NULL,
|
||||
LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -59,13 +59,15 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Object", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, Object), NULL, NULL, NULL},
|
||||
{ "Token", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, Token), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, Token), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{ "CreatePSObject", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, CreatePSObject), NULL, NULL, NULL},
|
||||
{ "Subscription", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, Subscription), NULL, NULL, NULL},
|
||||
{ "TokenPolicy", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, TokenPolicy), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsAddKnownEntityRequest, TokenPolicy), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsResponseAbstract, Status),
|
||||
"LassoIdWsf2UtilStatus", NULL, NULL },
|
||||
"LassoIdWsf2UtilStatus", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsResponseAbstract, attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -57,7 +57,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "TargetObjectID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsTestMembershipRequest, TargetObjectID), NULL, NULL, NULL},
|
||||
{ "Token", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsTestMembershipRequest, Token), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsTestMembershipRequest, Token), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_TOKEN},
|
||||
{ "Subscription", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2PsTestMembershipRequest, Subscription), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "RequestedAuthnContext", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2Sb2CredentialsContext, RequestedAuthnContext),
|
||||
"LassoSamlp2RequestedAuthnContext", NULL, NULL },
|
||||
"LassoSamlp2RequestedAuthnContext", LASSO_SAML_PROTOCOL_PREFIX, LASSO_SAML_PROTOCOL_HREF},
|
||||
{ "SecurityMechID", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2Sb2CredentialsContext, SecurityMechID), NULL, NULL, NULL},
|
||||
{ "attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY,
|
||||
|
|
|
@ -50,7 +50,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "TransitedProvider", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SecTransitedProviderPath, TransitedProvider), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SecTransitedProviderPath, TransitedProvider), NULL,
|
||||
LASSO_IDWSF2_SEC_PREFIX, LASSO_IDWSF2_SEC_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "TestResult", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsNotification, TestResult),
|
||||
"LassoIdWsf2UtilTestResult", NULL, NULL },
|
||||
"LassoIdWsf2UtilTestResult", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "id", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsNotification, id), NULL, NULL, NULL},
|
||||
{ "subscriptionID", SNIPPET_ATTRIBUTE,
|
||||
|
|
|
@ -68,7 +68,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
G_STRUCT_OFFSET(LassoIdWsf2SubsSubscription, RefItem), NULL, NULL, NULL},
|
||||
{ "Extension", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsSubscription, Extension),
|
||||
"LassoIdWsf2Utilextension", NULL, NULL },
|
||||
"LassoIdWsf2Utilextension", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "subscriptionID", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsSubscription, subscriptionID), NULL, NULL, NULL},
|
||||
{ "notifyToRef", SNIPPET_ATTRIBUTE,
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "TestResult", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsRefQueryResponse, TestResult),
|
||||
"LassoIdWsf2UtilTestResult", NULL, NULL },
|
||||
"LassoIdWsf2UtilTestResult", LASSO_IDWSF2_UTIL_PREFIX, LASSO_IDWSF2_UTIL_HREF},
|
||||
{ "Data", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIdWsf2SubsRefQueryResponse, Data), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -55,19 +55,23 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "ResourceID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, ResourceID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, ResourceID), NULL,
|
||||
LASSO_DISCO_PREFIX, LASSO_DISCO_HREF},
|
||||
{ "EncryptedResourceID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, EncryptedResourceID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, EncryptedResourceID), NULL,
|
||||
LASSO_DISCO_PREFIX, LASSO_DISCO_HREF},
|
||||
{ "Inquiry", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, Inquiry), NULL, NULL, NULL},
|
||||
/* TODO : KeyInfo */
|
||||
{ "id", SNIPPET_ATTRIBUTE,
|
||||
{ "KeyInfo", SNIPPET_NODE, G_STRUCT_OFFSET(LassoIsInteractionRequest, KeyInfo), NULL,
|
||||
LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "id", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, id), NULL, NULL, NULL},
|
||||
{ "language", SNIPPET_ATTRIBUTE,
|
||||
{ "language", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, language), NULL, NULL, NULL},
|
||||
{ "maxInteractTime", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, maxInteractTime), NULL, NULL, NULL},
|
||||
/* TODO : signed */
|
||||
{ "signed", SNIPPET_ATTRIBUTE | SNIPPET_OPTIONAL,
|
||||
G_STRUCT_OFFSET(LassoIsInteractionRequest, signed_attribute), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -60,11 +60,12 @@ struct _LassoIsInteractionRequest {
|
|||
LassoDiscoEncryptedResourceID *EncryptedResourceID;
|
||||
GList *Inquiry; /* of LassoNode */
|
||||
/* TODO : ds:KeyInfo */
|
||||
LassoDsKeyInfo *KeyInfo;
|
||||
|
||||
char *id;
|
||||
char *language;
|
||||
int maxInteractTime;
|
||||
/* TODO : signed */
|
||||
char *signed_attribute;
|
||||
};
|
||||
|
||||
struct _LassoIsInteractionRequestClass {
|
||||
|
|
|
@ -49,8 +49,9 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Inquiry", SNIPPET_NODE, G_STRUCT_OFFSET(LassoIsInteractionStatement, Inquiry), NULL, NULL, NULL},
|
||||
/* TODO : Signature */
|
||||
{ "Inquiry", SNIPPET_NODE, G_STRUCT_OFFSET(LassoIsInteractionStatement, Inquiry), NULL,
|
||||
NULL, NULL},
|
||||
{ "Signature", SNIPPET_SIGNATURE, 0, NULL, LASSO_DS_PREFIX, LASSO_DS_HREF },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -79,7 +79,8 @@ class_init(LassoLibAssertionClass *klass)
|
|||
LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
|
||||
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
lasso_node_class_set_nodename(nclass, "Assertion");
|
||||
nclass->node_data->xsi_sub_type = TRUE;
|
||||
lasso_node_class_set_nodename(nclass, "AssertionType");
|
||||
lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
}
|
||||
|
|
|
@ -74,7 +74,8 @@ class_init(LassoLibAuthenticationStatementClass *klass)
|
|||
LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
|
||||
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
lasso_node_class_set_nodename(nclass, "AuthenticationStatement");
|
||||
nclass->node_data->xsi_sub_type = TRUE;
|
||||
lasso_node_class_set_nodename(nclass, "AuthenticationStatementType");
|
||||
lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
}
|
||||
|
|
|
@ -58,13 +58,17 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Extension", SNIPPET_EXTENSION,
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, Extension), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, Extension), NULL, NULL,
|
||||
NULL},
|
||||
{ "ProviderID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, ProviderID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, ProviderID), NULL, NULL,
|
||||
NULL},
|
||||
{ "NameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, NameIdentifier), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, NameIdentifier), NULL,
|
||||
LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF},
|
||||
{ "consent", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, consent), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibFederationTerminationNotification, consent), NULL, NULL,
|
||||
NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -63,7 +63,8 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Extension", SNIPPET_EXTENSION, G_STRUCT_OFFSET(LassoLibLogoutRequest, Extension), NULL, NULL, NULL},
|
||||
{ "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, ProviderID), NULL, NULL, NULL},
|
||||
{ "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibLogoutRequest, NameIdentifier), NULL, NULL, NULL},
|
||||
{ "NameIdentifier", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibLogoutRequest, NameIdentifier),
|
||||
NULL, LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF},
|
||||
{ "SessionIndex", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, SessionIndex), NULL, NULL, NULL},
|
||||
{ "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibLogoutRequest, RelayState), NULL, NULL, NULL},
|
||||
{ "consent", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoLibLogoutRequest, consent), NULL, NULL, NULL},
|
||||
|
|
|
@ -61,7 +61,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "ProviderID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, ProviderID), NULL, NULL, NULL},
|
||||
{ "NameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, NameIdentifier), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, NameIdentifier), NULL,
|
||||
LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF},
|
||||
{ "TargetNamespace", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingRequest, TargetNamespace), NULL, NULL, NULL},
|
||||
{ "consent", SNIPPET_ATTRIBUTE,
|
||||
|
|
|
@ -58,9 +58,11 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "ProviderID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, ProviderID), NULL, NULL, NULL},
|
||||
{ "Status", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, Status), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, Status), NULL,
|
||||
LASSO_SAML_PROTOCOL_PREFIX, LASSO_SAML_PROTOCOL_HREF},
|
||||
{ "NameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, NameIdentifier), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoLibNameIdentifierMappingResponse, NameIdentifier), NULL,
|
||||
LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -66,12 +66,15 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, Extension), NULL, NULL, NULL},
|
||||
{ "ProviderID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, ProviderID), NULL, NULL, NULL},
|
||||
{ "IDPProvidedNameIdentifier", SNIPPET_NAME_IDENTIFIER,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, IDPProvidedNameIdentifier), NULL, NULL, NULL},
|
||||
{ "SPProvidedNameIdentifier", SNIPPET_NAME_IDENTIFIER,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, SPProvidedNameIdentifier), NULL, NULL, NULL},
|
||||
{ "OldProvidedNameIdentifier", SNIPPET_NAME_IDENTIFIER,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, OldProvidedNameIdentifier), NULL, NULL, NULL},
|
||||
{ "IDPProvidedNameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, IDPProvidedNameIdentifier),
|
||||
"LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF},
|
||||
{ "SPProvidedNameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, SPProvidedNameIdentifier),
|
||||
"LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF},
|
||||
{ "OldProvidedNameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, OldProvidedNameIdentifier),
|
||||
"LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF},
|
||||
{ "RelayState", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoLibRegisterNameIdentifierRequest, RelayState), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -60,7 +60,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Extension", SNIPPET_EXTENSION,
|
||||
G_STRUCT_OFFSET(LassoLibStatusResponse, Extension), NULL, NULL, NULL},
|
||||
{ "ProviderID", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibStatusResponse, ProviderID), NULL, NULL, NULL},
|
||||
{ "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibStatusResponse, Status), NULL, NULL, NULL},
|
||||
{ "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoLibStatusResponse, Status), NULL,
|
||||
LASSO_SAML_PROTOCOL_PREFIX, LASSO_SAML_PROTOCOL_HREF},
|
||||
{ "RelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoLibStatusResponse, RelayState), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
|
|
@ -50,8 +50,9 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "IDPProvidedNameIdentifier", SNIPPET_NAME_IDENTIFIER,
|
||||
G_STRUCT_OFFSET(LassoLibSubject, IDPProvidedNameIdentifier), NULL, NULL, NULL},
|
||||
{ "IDPProvidedNameIdentifier", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoLibSubject, IDPProvidedNameIdentifier),
|
||||
"LassoSamlNameIdentifier", LASSO_LIB_PREFIX, LASSO_LIB_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -66,7 +67,8 @@ class_init(LassoLibSubjectClass *klass)
|
|||
LassoNodeClass *nclass = LASSO_NODE_CLASS(klass);
|
||||
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
lasso_node_class_set_nodename(nclass, "Subject");
|
||||
nclass->node_data->xsi_sub_type = TRUE;
|
||||
lasso_node_class_set_nodename(nclass, "SubjectType");
|
||||
lasso_node_class_set_ns(nclass, LASSO_LIB_HREF, LASSO_LIB_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
|
||||
typedef struct {
|
||||
xmlNode *xml_content;
|
||||
GHashTable *any_attributes;
|
||||
} LassoMiscTextNodePrivate;
|
||||
|
||||
#define LASSO_MISC_TEXT_NODE_GET_PRIVATE(o) \
|
||||
|
@ -41,30 +42,19 @@ typedef struct {
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "content", SNIPPET_TEXT_CHILD,
|
||||
G_STRUCT_OFFSET(LassoMiscTextNode, content), NULL, NULL, NULL},
|
||||
{ "any_attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(LassoMiscTextNodePrivate, any_attributes), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
static LassoNodeClass *parent_class = NULL;
|
||||
|
||||
|
||||
static void
|
||||
insure_namespace(xmlNode *xmlnode, xmlNs *ns)
|
||||
{
|
||||
xmlNode *t = xmlnode->children;
|
||||
|
||||
xmlSetNs(xmlnode, ns);
|
||||
while (t) {
|
||||
if (t->type == XML_ELEMENT_NODE && t->ns == NULL)
|
||||
insure_namespace(t, ns);
|
||||
t = t->next;
|
||||
}
|
||||
}
|
||||
|
||||
static xmlNode*
|
||||
get_xmlNode(LassoNode *node, gboolean lasso_dump)
|
||||
{
|
||||
xmlNode *xmlnode;
|
||||
xmlNs *ns;
|
||||
LassoMiscTextNode *mtnode = (LassoMiscTextNode*)node;
|
||||
LassoMiscTextNodePrivate *private;
|
||||
|
||||
private = LASSO_MISC_TEXT_NODE_GET_PRIVATE(node);
|
||||
|
@ -77,10 +67,12 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
|
|||
}
|
||||
|
||||
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
|
||||
xmlNodeSetName(xmlnode, (xmlChar*)LASSO_MISC_TEXT_NODE(node)->name);
|
||||
ns = xmlNewNs(xmlnode, (xmlChar*)LASSO_MISC_TEXT_NODE(node)->ns_href,
|
||||
(xmlChar*)LASSO_MISC_TEXT_NODE(node)->ns_prefix);
|
||||
insure_namespace(xmlnode, ns);
|
||||
xmlNodeSetName(xmlnode, BAD_CAST mtnode->name);
|
||||
if (! lasso_strisempty(mtnode->ns_href) && ! lasso_strisempty(mtnode->ns_href)) {
|
||||
ns = xmlNewNs(xmlnode, BAD_CAST mtnode->ns_href,
|
||||
BAD_CAST mtnode->ns_prefix);
|
||||
xmlSetNs(xmlnode, ns);
|
||||
}
|
||||
|
||||
return xmlnode;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ typedef enum {
|
|||
SNIPPET_NODE,
|
||||
SNIPPET_CONTENT,
|
||||
SNIPPET_TEXT_CHILD,
|
||||
SNIPPET_NAME_IDENTIFIER,
|
||||
SNIPPET_UNUSED1,
|
||||
SNIPPET_ATTRIBUTE,
|
||||
SNIPPET_NODE_IN_CHILD,
|
||||
SNIPPET_LIST_NODES,
|
||||
|
@ -72,11 +72,15 @@ typedef enum {
|
|||
} SignatureVerificationOption;
|
||||
|
||||
struct XmlSnippet {
|
||||
char *name;
|
||||
SnippetType type;
|
||||
guint offset;
|
||||
char *class_name;
|
||||
char *ns_name;
|
||||
char *name; /* name of the node or attribute to match */
|
||||
SnippetType type; /* type of node to deserialize */
|
||||
guint offset; /* offset of the storage field relative to the public or private object (if
|
||||
using SNIPPET_PRIVATE). If 0, means that no storage must be done, it will
|
||||
be handled by the init_from_xml virtual method. */
|
||||
char *class_name; /* Force a certain LassoNode class for deserializing a node, usually
|
||||
useless. */
|
||||
char *ns_name; /* if the namespace is different from the one of the parent node, specify it
|
||||
there */
|
||||
char *ns_uri;
|
||||
};
|
||||
|
||||
|
@ -156,6 +160,7 @@ struct _LassoNodeClassData
|
|||
int private_key_file_offset;
|
||||
int certificate_file_offset;
|
||||
gboolean keep_xmlnode;
|
||||
gboolean xsi_sub_type;
|
||||
};
|
||||
|
||||
void lasso_node_class_set_nodename(LassoNodeClass *klass, char *name);
|
||||
|
@ -278,6 +283,22 @@ LassoSignatureContext lasso_make_signature_context_from_path_or_string(char *fil
|
|||
const char *password, LassoSignatureMethod signature_method,
|
||||
const char *certificate);
|
||||
|
||||
xmlNs * get_or_define_ns(xmlNode *xmlnode, const xmlChar *ns_uri, const xmlChar
|
||||
*advised_prefix);
|
||||
|
||||
void set_qname_attribute(xmlNode *node,
|
||||
const xmlChar *attribute_ns_prefix,
|
||||
const xmlChar *attribute_ns_href,
|
||||
const xmlChar *attribute_name,
|
||||
const xmlChar *prefix,
|
||||
const xmlChar *href,
|
||||
const xmlChar *name);
|
||||
|
||||
|
||||
void set_xsi_type(xmlNode *node,
|
||||
const xmlChar *type_ns_prefix,
|
||||
const xmlChar *type_ns_href,
|
||||
const xmlChar *type_name);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
|
|
@ -63,7 +63,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Data", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSaSASLRequest, Data), NULL, NULL, NULL},
|
||||
{ "RequestAuthnContext", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSaSASLRequest, RequestAuthnContext), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSaSASLRequest, RequestAuthnContext), NULL, LASSO_LIB_PREFIX,
|
||||
LASSO_LIB_HREF},
|
||||
{ "mechanism", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoSaSASLRequest, mechanism), NULL, NULL, NULL},
|
||||
{ "authzID", SNIPPET_ATTRIBUTE,
|
||||
|
|
|
@ -74,7 +74,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "Data", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSaSASLResponse, Data), NULL, NULL, NULL},
|
||||
{ "ResourceOffering", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoSaSASLResponse, ResourceOffering), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSaSASLResponse, ResourceOffering), NULL, LASSO_DISCO_PREFIX,
|
||||
LASSO_DISCO_HREF},
|
||||
{ "Credentials", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSaSASLResponse, Credentials), NULL, NULL, NULL},
|
||||
{ "serverMechanism", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoSaSASLResponse, serverMechanism), NULL, NULL, NULL},
|
||||
|
|
|
@ -70,7 +70,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
G_STRUCT_OFFSET(LassoSaml2Assertion, Issuer),
|
||||
"LassoSaml2NameID", NULL, NULL},
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSaml2Assertion, ID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSaml2Assertion, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "Subject", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSaml2Assertion, Subject), NULL, NULL, NULL},
|
||||
{ "Conditions", SNIPPET_NODE,
|
||||
|
|
|
@ -47,9 +47,16 @@
|
|||
/* private methods */
|
||||
/*****************************************************************************/
|
||||
|
||||
struct _LassoSaml2AttributeValuePrivate {
|
||||
GHashTable *any_attributes;
|
||||
};
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "", SNIPPET_LIST_NODES | SNIPPET_ANY,
|
||||
{ "any", SNIPPET_LIST_NODES | SNIPPET_ANY | SNIPPET_ALLOW_TEXT,
|
||||
G_STRUCT_OFFSET(LassoSaml2AttributeValue, any), NULL, NULL, NULL},
|
||||
{ "any_attributes", SNIPPET_ATTRIBUTE | SNIPPET_ANY | SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(struct _LassoSaml2AttributeValuePrivate, any_attributes), NULL,
|
||||
NULL, NULL },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -85,6 +92,7 @@ class_init(LassoSaml2AttributeValueClass *klass)
|
|||
lasso_node_class_set_nodename(nclass, "AttributeValue");
|
||||
lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
g_type_class_add_private(klass, sizeof(struct _LassoSaml2AttributeValuePrivate));
|
||||
}
|
||||
|
||||
GType
|
||||
|
|
|
@ -57,9 +57,11 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "EncryptedData", SNIPPET_XMLNODE,
|
||||
G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedData), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedData), NULL, "xmlenc",
|
||||
(char*) xmlSecEncNs},
|
||||
{ "EncryptedKey", SNIPPET_LIST_XMLNODES,
|
||||
G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedKey), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSaml2EncryptedElement, EncryptedKey), NULL, "xmlenc",
|
||||
(char*) xmlSecEncNs},
|
||||
{ "NameID", SNIPPET_NODE | SNIPPET_LASSO_DUMP,
|
||||
G_STRUCT_OFFSET(LassoSaml2EncryptedElement, original_data), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "../private.h"
|
||||
#include "saml2_key_info_confirmation_data_type.h"
|
||||
#include "../../registry.h"
|
||||
#include "../ds_key_info.h"
|
||||
#include "../dsig/ds_key_info.h"
|
||||
#include "../../utils.h"
|
||||
|
||||
/**
|
||||
|
@ -58,68 +58,33 @@
|
|||
/* private methods */
|
||||
/*****************************************************************************/
|
||||
|
||||
struct _LassoSaml2KeyInfoConfirmationDataTypePrivate {
|
||||
GList *KeyInfo;
|
||||
};
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "KeyInfo", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoSaml2KeyInfoConfirmationDataType, KeyInfo), NULL, NULL, NULL},
|
||||
{ "KeyInfo", SNIPPET_LIST_NODES|SNIPPET_PRIVATE,
|
||||
G_STRUCT_OFFSET(LassoSaml2KeyInfoConfirmationDataTypePrivate, KeyInfo), "LassoDsKeyInfo", NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
static LassoNodeClass *parent_class = NULL;
|
||||
|
||||
#define LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_GET_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, LassoSaml2KeyInfoConfirmationDataTypePrivate))
|
||||
|
||||
/*****************************************************************************/
|
||||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
static xmlNs *
|
||||
ensure_namespace(xmlNode *node, const xmlChar *href, const xmlChar *prefix)
|
||||
{
|
||||
xmlNs *ns;
|
||||
|
||||
ns = xmlSearchNsByHref(node->doc, node, href);
|
||||
if (! ns) {
|
||||
ns = xmlNewNs(node, href, prefix);
|
||||
xmlSetNs(node, ns);
|
||||
}
|
||||
return ns;
|
||||
}
|
||||
|
||||
static void
|
||||
set_qname_attribue(xmlNode *node, xmlChar *attribute_name, const xmlChar *name, const
|
||||
xmlChar *href, const xmlChar *prefix) {
|
||||
xmlNs *type_ns;
|
||||
xmlNs *xsi_ns;
|
||||
xmlChar *value;
|
||||
|
||||
xsi_ns = ensure_namespace(node, BAD_CAST LASSO_XSI_HREF, BAD_CAST LASSO_XSI_PREFIX);
|
||||
type_ns = ensure_namespace(node, href, prefix);
|
||||
value = BAD_CAST g_strdup_printf("%s:%s", type_ns->prefix, name);
|
||||
xmlSetNsProp(node, xsi_ns, attribute_name, value);
|
||||
lasso_release_string(value);
|
||||
}
|
||||
|
||||
static void
|
||||
set_xsi_type(xmlNode *node, const xmlChar *type, const xmlChar *href, const xmlChar *prefix) {
|
||||
set_qname_attribue(node, BAD_CAST "type", type, href, prefix);
|
||||
}
|
||||
|
||||
static xmlNode*
|
||||
get_xmlNode(LassoNode *node, gboolean lasso_dump)
|
||||
instance_init(LassoSaml2KeyInfoConfirmationDataType *saml2_key_info_confirmation_data_type)
|
||||
{
|
||||
xmlNode *xmlnode = NULL;
|
||||
|
||||
/* add xsi:type="KeyInfoConfirmationDataType" */
|
||||
xmlnode = parent_class->get_xmlNode(node, lasso_dump);
|
||||
set_xsi_type(xmlnode,
|
||||
BAD_CAST "KeyInfoConfirmationDataType",
|
||||
BAD_CAST LASSO_SAML2_ASSERTION_HREF,
|
||||
BAD_CAST LASSO_SAML2_ASSERTION_PREFIX);
|
||||
|
||||
return xmlnode;
|
||||
saml2_key_info_confirmation_data_type->private_data =
|
||||
LASSO_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE_GET_PRIVATE(
|
||||
saml2_key_info_confirmation_data_type);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
class_init(LassoSaml2KeyInfoConfirmationDataTypeClass *klass)
|
||||
{
|
||||
|
@ -127,8 +92,11 @@ class_init(LassoSaml2KeyInfoConfirmationDataTypeClass *klass)
|
|||
|
||||
parent_class = g_type_class_peek_parent(klass);
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
nclass->get_xmlNode = get_xmlNode;
|
||||
nclass->node_data->xsi_sub_type = TRUE;
|
||||
lasso_node_class_set_nodename(nclass, "KeyInfoConfirmationDataType");
|
||||
lasso_node_class_set_ns(nclass, LASSO_SAML2_ASSERTION_HREF, LASSO_SAML2_ASSERTION_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
g_type_class_add_private(klass, sizeof(LassoSaml2KeyInfoConfirmationDataTypePrivate));
|
||||
}
|
||||
|
||||
GType
|
||||
|
@ -146,7 +114,7 @@ lasso_saml2_key_info_confirmation_data_type_get_type()
|
|||
NULL,
|
||||
sizeof(LassoSaml2KeyInfoConfirmationDataType),
|
||||
0,
|
||||
NULL,
|
||||
(GInstanceInitFunc)instance_init,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -171,3 +139,41 @@ lasso_saml2_key_info_confirmation_data_type_new()
|
|||
{
|
||||
return g_object_new(LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_saml2_key_info_confirmation_data_type_get_key_info:
|
||||
* @kicdt: a #LassoSaml2KeyInfoConfirmationDataType object.
|
||||
*
|
||||
* Return the list of KeyInfo node contained in the saml2:SubjectConfirmationData of type
|
||||
* saml2:KeyInfoConfirmationDataType.
|
||||
*
|
||||
* Return value:(element-type LassoDsKeyInfo)(transfer none): a list of #LassoDsKeyInfo objects.
|
||||
*/
|
||||
GList*
|
||||
lasso_saml2_key_info_confirmation_data_type_get_key_info(
|
||||
LassoSaml2KeyInfoConfirmationDataType *kicdt)
|
||||
{
|
||||
lasso_return_val_if_fail(LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(kicdt), NULL);
|
||||
|
||||
return kicdt->private_data->KeyInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* lasso_saml2_key_info_confirmation_data_type_set_key_info:
|
||||
* @kicdt: a #LassoSaml2KeyInfoConfirmationDataType object.
|
||||
* @key_infos:(tranfer none)(element-type LassoDsKeyInfo): a list of #LassoDsKeyInfo object.
|
||||
*
|
||||
* Set the list of ds:KeyInfo nodes for the saml2:SubjectConfirmationData of type
|
||||
* saml2:KeyInfoConfirmationDataType.
|
||||
*/
|
||||
void
|
||||
lasso_saml2_key_info_confirmation_data_type_set_key_info(
|
||||
LassoSaml2KeyInfoConfirmationDataType *kicdt,
|
||||
GList *key_infos)
|
||||
{
|
||||
lasso_return_if_fail(LASSO_IS_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE(kicdt));
|
||||
|
||||
lasso_assign_list_of_gobjects(
|
||||
kicdt->private_data->KeyInfo,
|
||||
key_infos);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ extern "C" {
|
|||
#endif /* __cplusplus */
|
||||
|
||||
#include "../xml.h"
|
||||
#include "../ds_key_info.h"
|
||||
#include "../dsig/ds_key_info.h"
|
||||
#include "./saml2_subject_confirmation_data.h"
|
||||
|
||||
#define LASSO_TYPE_SAML2_KEY_INFO_CONFIRMATION_DATA_TYPE \
|
||||
|
@ -51,14 +51,13 @@ extern "C" {
|
|||
|
||||
typedef struct _LassoSaml2KeyInfoConfirmationDataType LassoSaml2KeyInfoConfirmationDataType;
|
||||
typedef struct _LassoSaml2KeyInfoConfirmationDataTypeClass LassoSaml2KeyInfoConfirmationDataTypeClass;
|
||||
|
||||
typedef struct _LassoSaml2KeyInfoConfirmationDataTypePrivate LassoSaml2KeyInfoConfirmationDataTypePrivate;
|
||||
|
||||
struct _LassoSaml2KeyInfoConfirmationDataType {
|
||||
LassoSaml2SubjectConfirmationData parent;
|
||||
|
||||
/*< public >*/
|
||||
/* attributes */
|
||||
GList *KeyInfo; /* of LassoDsKeyInfo */
|
||||
/*< private >*/
|
||||
LassoSaml2KeyInfoConfirmationDataTypePrivate *private_data;
|
||||
};
|
||||
|
||||
|
||||
|
@ -68,8 +67,11 @@ struct _LassoSaml2KeyInfoConfirmationDataTypeClass {
|
|||
|
||||
LASSO_EXPORT GType lasso_saml2_key_info_confirmation_data_type_get_type(void);
|
||||
LASSO_EXPORT LassoNode* lasso_saml2_key_info_confirmation_data_type_new(void);
|
||||
|
||||
|
||||
LASSO_EXPORT GList *lasso_saml2_key_info_confirmation_data_type_get_key_info(
|
||||
LassoSaml2KeyInfoConfirmationDataType *kicdt);
|
||||
LASSO_EXPORT void lasso_saml2_key_info_confirmation_data_type_set_key_info(
|
||||
LassoSaml2KeyInfoConfirmationDataType *kicdt,
|
||||
GList *key_infos);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
*/
|
||||
|
||||
struct _LassoSaml2SubjectConfirmationDataPrivate {
|
||||
GList *any; /* of LassoMiscTextNode */
|
||||
GList *any;
|
||||
GHashTable *attributes;
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "AssertionIDRef", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AssertionIDRequest, AssertionIDRef), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2AssertionIDRequest, AssertionIDRef), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -52,7 +52,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Attribute", SNIPPET_LIST_NODES ,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AttributeQuery, Attribute), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2AttributeQuery, Attribute), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -63,11 +63,13 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Subject", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Subject), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Subject), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "NameIDPolicy", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, NameIDPolicy), NULL, NULL, NULL},
|
||||
{ "Conditions", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Conditions), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, Conditions), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "RequestedAuthnContext", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthnRequest, RequestedAuthnContext), NULL, NULL, NULL},
|
||||
{ "Scoping", SNIPPET_NODE,
|
||||
|
|
|
@ -53,10 +53,10 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Action", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Action), NULL, NULL, NULL},
|
||||
{ "Evidence", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Evidence), NULL, NULL, NULL},
|
||||
{ "Action", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Action), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "Evidence", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Evidence), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "Resource", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2AuthzDecisionQuery, Resource), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -67,15 +67,16 @@ struct _LassoSamlp2LogoutRequestPrivate {
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "BaseID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, BaseID), NULL, NULL, NULL},
|
||||
{ "NameID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, NameID), NULL, NULL, NULL},
|
||||
{ "EncryptedID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, EncryptedID),
|
||||
"LassoSaml2EncryptedElement", NULL, NULL },
|
||||
{ "BaseID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, BaseID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "NameID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, NameID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, EncryptedID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "SessionIndex", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, SessionIndex), NULL, NULL, NULL},
|
||||
{ "SessionIndex", SNIPPET_LIST_NODES,
|
||||
0, NULL, NULL, NULL},
|
||||
{ "Reason", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2LogoutRequest, Reason), NULL, NULL, NULL},
|
||||
{ "NotOnOrAfter", SNIPPET_ATTRIBUTE,
|
||||
|
@ -141,7 +142,6 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
|
|||
|
||||
rc = parent_class->init_from_xml(node, xmlnode);
|
||||
if (rc == 0) {
|
||||
GList *last;
|
||||
|
||||
pv = GET_PRIVATE(node);
|
||||
child = xmlSecFindChild(xmlnode, BAD_CAST SESSION_INDEX,
|
||||
|
@ -153,11 +153,10 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode)
|
|||
lasso_release_xml_string(content);
|
||||
child = xmlSecGetNextElementNode(child->next);
|
||||
}
|
||||
/* remove the last one, since it is also stored in node->SessionIndex */
|
||||
last = g_list_last(pv->SessionIndex);
|
||||
if (last) {
|
||||
lasso_release_string(last->data);
|
||||
pv->SessionIndex = g_list_delete_link(pv->SessionIndex, last);
|
||||
/* remove the first one, since it is also stored in node->SessionIndex */
|
||||
if (pv->SessionIndex) {
|
||||
lasso_release_string(pv->SessionIndex->data);
|
||||
pv->SessionIndex = g_list_delete_link(pv->SessionIndex, pv->SessionIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,11 +59,11 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "NameID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NameID), NULL, NULL, NULL},
|
||||
{ "EncryptedID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, EncryptedID),
|
||||
"LassoSaml2EncryptedElement", NULL, NULL},
|
||||
{ "NameID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NameID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, EncryptedID),
|
||||
"LassoSaml2EncryptedElement", LASSO_SAML2_ASSERTION_PREFIX,
|
||||
LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "NewID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSamlp2ManageNameIDRequest, NewID), NULL, NULL, NULL},
|
||||
{ "NewEncryptedID", SNIPPET_NODE,
|
||||
|
|
|
@ -56,13 +56,13 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "BaseID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, BaseID), NULL, NULL, NULL},
|
||||
{ "NameID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, NameID), NULL, NULL, NULL},
|
||||
{ "EncryptedID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, EncryptedID),
|
||||
"LassoSaml2EncryptedElement", NULL, NULL },
|
||||
{ "BaseID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, BaseID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "NameID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, NameID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest,
|
||||
EncryptedID), NULL, LASSO_SAML2_ASSERTION_PREFIX,
|
||||
LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "NameIDPolicy", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingRequest, NameIDPolicy), NULL, NULL, NULL},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
|
|
|
@ -52,11 +52,11 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "NameID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse, NameID), NULL, NULL, NULL},
|
||||
{ "EncryptedID", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse, EncryptedID),
|
||||
"LassoSaml2EncryptedElement", NULL, NULL },
|
||||
{ "NameID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse, NameID), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "EncryptedID", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2NameIDMappingResponse,
|
||||
EncryptedID), NULL, LASSO_SAML2_ASSERTION_PREFIX,
|
||||
LASSO_SAML2_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -59,11 +59,10 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Issuer", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Issuer),
|
||||
"LassoSaml2NameID", NULL, NULL },
|
||||
{ "Issuer", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Issuer),
|
||||
"LassoSaml2NameID", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, ID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "Extensions", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2RequestAbstract, Extensions), NULL, NULL, NULL},
|
||||
{ "ID", SNIPPET_ATTRIBUTE,
|
||||
|
|
|
@ -56,10 +56,11 @@ extern LassoNode* lasso_assertion_encrypt(LassoSaml2Assertion *assertion, char *
|
|||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Assertion", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoSamlp2Response, Assertion), NULL, NULL, NULL},
|
||||
{ "EncryptedAssertion", SNIPPET_LIST_NODES,
|
||||
G_STRUCT_OFFSET(LassoSamlp2Response, EncryptedAssertion), NULL, NULL, NULL},
|
||||
{ "Assertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlp2Response, Assertion), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "EncryptedAssertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlp2Response,
|
||||
EncryptedAssertion), NULL, LASSO_SAML2_ASSERTION_PREFIX,
|
||||
LASSO_SAML2_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "../private.h"
|
||||
#include "../../utils.h"
|
||||
#include "./samlp2_status_response.h"
|
||||
#include "./saml2_strings.h"
|
||||
#include <xmlsec/xmldsig.h>
|
||||
#include <xmlsec/templates.h>
|
||||
|
||||
|
@ -62,9 +63,9 @@
|
|||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Issuer", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Issuer),
|
||||
"LassoSaml2NameID", NULL, NULL},
|
||||
"LassoSaml2NameID", LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF},
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2StatusResponse, ID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlp2StatusResponse, ID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "Extensions", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2StatusResponse, Extensions), NULL, NULL, NULL},
|
||||
{ "Status", SNIPPET_NODE,
|
||||
|
|
|
@ -51,8 +51,8 @@
|
|||
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Subject", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlp2SubjectQueryAbstract, Subject), NULL, NULL, NULL},
|
||||
{ "Subject", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlp2SubjectQueryAbstract, Subject), NULL,
|
||||
LASSO_SAML2_ASSERTION_PREFIX, LASSO_SAML2_ASSERTION_HREF },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -52,8 +52,7 @@ struct _LassoSamlAdvice {
|
|||
/* <element ref="saml:AssertionIDReference"/> */
|
||||
GList *AssertionIDReference; /* of LassoNode */
|
||||
/* <element ref="saml:Assertion"/> */
|
||||
LassoNode *Assertion; /* actually LassoSamlAssertion* but it recurses */
|
||||
|
||||
struct _LassoSamlAssertion *Assertion;
|
||||
};
|
||||
|
||||
struct _LassoSamlAdviceClass {
|
||||
|
|
|
@ -80,7 +80,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "AttributeStatement", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlAssertion, AttributeStatement), NULL, NULL, NULL},
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSamlAssertion, AssertionID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlAssertion, AssertionID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER,
|
||||
G_STRUCT_OFFSET(LassoSamlAssertion, MajorVersion), NULL, NULL, NULL},
|
||||
{ "MinorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER,
|
||||
|
|
|
@ -57,7 +57,8 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "SubjectConfirmationData", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, SubjectConfirmationData), NULL, NULL, NULL},
|
||||
{ "KeyInfo", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, KeyInfo), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlSubjectConfirmation, KeyInfo), NULL, LASSO_DS_PREFIX,
|
||||
LASSO_DS_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ extern "C" {
|
|||
#endif /* __cplusplus */
|
||||
|
||||
#include "xml.h"
|
||||
#include "ds_key_info.h"
|
||||
#include "./dsig/ds_key_info.h"
|
||||
|
||||
#define LASSO_TYPE_SAML_SUBJECT_CONFIRMATION (lasso_saml_subject_confirmation_get_type())
|
||||
#define LASSO_SAML_SUBJECT_CONFIRMATION(obj) \
|
||||
|
|
|
@ -65,7 +65,7 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
{ "RespondWith", SNIPPET_LIST_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RespondWith), NULL, NULL, NULL},
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID), NULL, LASSO_DS_PREFIX, LASSO_DS_HREF},
|
||||
{ "RequestID", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSamlpRequestAbstract, RequestID), NULL, NULL, NULL},
|
||||
{ "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER,
|
||||
G_STRUCT_OFFSET(LassoSamlpRequestAbstract, MajorVersion), NULL, NULL, NULL},
|
||||
|
|
|
@ -54,7 +54,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Status", SNIPPET_NODE, G_STRUCT_OFFSET(LassoSamlpResponse, Status), NULL, NULL, NULL},
|
||||
{ "Assertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlpResponse, Assertion), NULL, NULL, NULL},
|
||||
{ "Assertion", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSamlpResponse, Assertion), NULL,
|
||||
LASSO_SAML_ASSERTION_PREFIX, LASSO_SAML_ASSERTION_HREF},
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -65,7 +65,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "Signature", SNIPPET_SIGNATURE,
|
||||
G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID), NULL, LASSO_DS_PREFIX,
|
||||
LASSO_DS_HREF},
|
||||
{ "ResponseID", SNIPPET_ATTRIBUTE,
|
||||
G_STRUCT_OFFSET(LassoSamlpResponseAbstract, ResponseID), NULL, NULL, NULL},
|
||||
{ "MajorVersion", SNIPPET_ATTRIBUTE | SNIPPET_INTEGER,
|
||||
|
|
|
@ -54,7 +54,10 @@
|
|||
/*****************************************************************************/
|
||||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "", SNIPPET_LIST_NODES, G_STRUCT_OFFSET(LassoSoapBody, any), NULL, NULL, NULL},
|
||||
{ "any", SNIPPET_LIST_NODES | SNIPPET_ANY, G_STRUCT_OFFSET(LassoSoapBody, any), NULL, NULL,
|
||||
NULL},
|
||||
{ "Id", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSoapBody, Id), NULL, LASSO_WSUTIL1_PREFIX,
|
||||
LASSO_WSUTIL1_HREF },
|
||||
{NULL, 0, 0, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
@ -62,9 +65,6 @@ static struct XmlSnippet schema_snippets[] = {
|
|||
/* instance and class init functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
static xmlNode* get_xmlNode(LassoNode *node, gboolean lasso_dump);
|
||||
|
||||
|
||||
static LassoNodeClass *parent_class = NULL;
|
||||
|
||||
static void
|
||||
|
@ -74,28 +74,11 @@ class_init(LassoSoapBodyClass *klass)
|
|||
|
||||
parent_class = g_type_class_peek_parent(nclass);
|
||||
nclass->node_data = g_new0(LassoNodeClassData, 1);
|
||||
nclass->get_xmlNode = get_xmlNode;
|
||||
lasso_node_class_set_nodename(nclass, "Body");
|
||||
lasso_node_class_set_ns(nclass, LASSO_SOAP_ENV_HREF, LASSO_SOAP_ENV_PREFIX);
|
||||
lasso_node_class_add_snippets(nclass, schema_snippets);
|
||||
}
|
||||
|
||||
static xmlNode*
|
||||
get_xmlNode(LassoNode *node, gboolean lasso_dump) {
|
||||
xmlNodePtr ret;
|
||||
|
||||
/* Fix namespace of Id */
|
||||
ret = parent_class->get_xmlNode(node, lasso_dump);
|
||||
|
||||
{
|
||||
xmlNsPtr ns;
|
||||
ns = xmlNewNs(ret, (xmlChar*)LASSO_WSUTIL1_HREF, (xmlChar*)LASSO_WSUTIL1_PREFIX);
|
||||
xmlNewNsProp(ret, ns, (xmlChar*)"Id", (xmlChar*)LASSO_SOAP_BODY(node)->Id);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
GType
|
||||
lasso_soap_body_get_type()
|
||||
{
|
||||
|
|
|
@ -54,7 +54,8 @@
|
|||
|
||||
static struct XmlSnippet schema_snippets[] = {
|
||||
{ "RequestAuthnContext", SNIPPET_NODE,
|
||||
G_STRUCT_OFFSET(LassoSoapBindingExtCredentialsContext, RequestAuthnContext), NULL, NULL, NULL},
|
||||
G_STRUCT_OFFSET(LassoSoapBindingExtCredentialsContext, RequestAuthnContext), NULL,
|
||||
LASSO_LIB_PREFIX, LASSO_LIB_HREF},
|
||||
{ "SecurityMechID", SNIPPET_CONTENT,
|
||||
G_STRUCT_OFFSET(LassoSoapBindingExtCredentialsContext, SecurityMechID), NULL, NULL, NULL},
|
||||
{ "id", SNIPPET_ATTRIBUTE, G_STRUCT_OFFSET(LassoSoapBindingExtCredentialsContext, id), NULL, NULL, NULL},
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#define __LASSO_STRINGS_H__
|
||||
|
||||
#include "./saml-2.0/saml2_strings.h"
|
||||
#include "./dsig/strings.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/* SOAP 1.1 */
|
||||
|
@ -133,6 +134,20 @@
|
|||
*/
|
||||
#define LASSO_WSUTIL1_PREFIX "wsutil"
|
||||
|
||||
/**
|
||||
* LASSO_XMLENC_HREF
|
||||
*
|
||||
* Namespace for xmlenc-core
|
||||
*/
|
||||
#define LASSO_XMLENC_HREF "http://www.w3.org/2001/04/xmlenc#"
|
||||
|
||||
/**
|
||||
* LASSO_XMLENC_PREFIX
|
||||
*
|
||||
* Preferred prefix for namespace of xmlenc-core
|
||||
*/
|
||||
#define LASSO_XMLENC_PREFIX "xmlenc"
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Lasso */
|
||||
/*****************************************************************************/
|
||||
|
@ -955,22 +970,6 @@
|
|||
/* Others */
|
||||
/*****************************************************************************/
|
||||
|
||||
/* xmldsig prefix & href */
|
||||
/**
|
||||
* LASSO_DS_HREF:
|
||||
*
|
||||
* Namespace for FIXME
|
||||
*
|
||||
*/
|
||||
#define LASSO_DS_HREF "http://www.w3.org/2000/09/xmldsig#"
|
||||
/**
|
||||
* LASSO_DS_PREFIX:
|
||||
*
|
||||
* Preferred prefix for namespace of FIXME
|
||||
*
|
||||
*/
|
||||
#define LASSO_DS_PREFIX "ds"
|
||||
|
||||
/* xsi prefix & href */
|
||||
/**
|
||||
* LASSO_XSI_HREF:
|
||||
|
|
|
@ -1767,7 +1767,7 @@ lasso_xml_parse_file(const char *filepath)
|
|||
{
|
||||
char *file_content;
|
||||
size_t file_length;
|
||||
GError *error;
|
||||
GError *error = NULL;
|
||||
|
||||
if (g_file_get_contents(filepath, &file_content, &file_length, &error)) {
|
||||
xmlDocPtr ret;
|
||||
|
@ -2405,3 +2405,62 @@ lasso_make_signature_context_from_path_or_string(char *filename_or_buffer, const
|
|||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
xmlNs *
|
||||
get_or_define_ns(xmlNode *xmlnode, const xmlChar *ns_uri, const xmlChar *advised_prefix) {
|
||||
xmlNs *ns;
|
||||
char prefix[20];
|
||||
int i = 1;
|
||||
|
||||
ns = xmlSearchNsByHref(NULL, xmlnode, ns_uri);
|
||||
if (ns)
|
||||
return ns;
|
||||
/* Try with the advised prefix */
|
||||
if (advised_prefix) {
|
||||
ns = xmlSearchNs(NULL, xmlnode, BAD_CAST prefix);
|
||||
if (! ns) { /* If not taken, use it */
|
||||
return xmlNewNs(xmlnode, ns_uri, BAD_CAST advised_prefix);
|
||||
}
|
||||
}
|
||||
/* Create a prefix from scratch */
|
||||
do {
|
||||
sprintf(prefix, "ns%u", i);
|
||||
i++;
|
||||
ns = xmlSearchNs(NULL, xmlnode, BAD_CAST prefix);
|
||||
} while (ns);
|
||||
return xmlNewNs(xmlnode, ns_uri, BAD_CAST prefix);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
set_qname_attribute(xmlNode *node,
|
||||
const xmlChar *attribute_ns_prefix,
|
||||
const xmlChar *attribute_ns_href,
|
||||
const xmlChar *attribute_name,
|
||||
const xmlChar *prefix,
|
||||
const xmlChar *href,
|
||||
const xmlChar *name) {
|
||||
xmlNs *type_ns;
|
||||
xmlNs *xsi_ns;
|
||||
xmlChar *value;
|
||||
|
||||
xsi_ns = get_or_define_ns(node, attribute_ns_href, attribute_ns_prefix);
|
||||
type_ns = get_or_define_ns(node, href, prefix);
|
||||
value = BAD_CAST g_strdup_printf("%s:%s", type_ns->prefix, name);
|
||||
xmlSetNsProp(node, xsi_ns, attribute_name, value);
|
||||
lasso_release_string(value);
|
||||
}
|
||||
|
||||
void
|
||||
set_xsi_type(xmlNode *node,
|
||||
const xmlChar *type_ns_prefix,
|
||||
const xmlChar *type_ns_href,
|
||||
const xmlChar *type_name) {
|
||||
set_qname_attribute(node,
|
||||
BAD_CAST LASSO_XSI_PREFIX,
|
||||
BAD_CAST LASSO_XSI_HREF,
|
||||
BAD_CAST "type",
|
||||
type_ns_prefix,
|
||||
type_ns_href,
|
||||
type_name);
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue