Merge branch 'rewrite-node-impl'

This commit is contained in:
Benjamin Dauvergne 2011-12-16 12:18:52 +01:00
commit ff3ae1ea77
108 changed files with 1635 additions and 992 deletions

View File

@ -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))

View File

@ -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')

View File

@ -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

View File

@ -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) \

View 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,

View File

@ -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}
};

View File

@ -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

View File

@ -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)

View File

@ -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}
};

View File

@ -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

View File

@ -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 */

View File

@ -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.
*/

View File

@ -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}
};

View File

@ -55,6 +55,7 @@ typedef enum _LassoKeyType {
struct _LassoKey {
LassoNode parent;
/*< private >*/
LassoKeyPrivate *private_data;
};

View File

@ -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_ */

View File

@ -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 \

View File

@ -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}
};

View File

@ -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

View File

@ -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

View File

@ -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) \

View File

@ -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);
}

View File

@ -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
}

View File

@ -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

View File

@ -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) \

View File

@ -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);
}

View File

@ -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__ */

61
lasso/xml/dsig/strings.h Normal file
View File

@ -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__ */

View File

@ -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,

View File

@ -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}
};

View File

@ -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}

View File

@ -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}
};

View File

@ -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}

View File

@ -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}

View File

@ -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,

View File

@ -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}

View File

@ -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 },

View File

@ -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,

View File

@ -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}

View File

@ -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,

View File

@ -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 },

View File

@ -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,

View File

@ -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}

View File

@ -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}

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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}
};

View File

@ -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}
};

View File

@ -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}

View File

@ -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}

View File

@ -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,

View File

@ -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}
};

View File

@ -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,

View File

@ -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,

View File

@ -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}

View File

@ -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}
};

View File

@ -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 {

View File

@ -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}
};

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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}
};

View File

@ -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},

View File

@ -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,

View File

@ -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}
};

View File

@ -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}

View File

@ -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}
};

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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 */

View File

@ -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,

View File

@ -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},

View File

@ -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,

View File

@ -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

View File

@ -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}

View File

@ -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);
}

View File

@ -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
}

View File

@ -52,7 +52,7 @@
*/
struct _LassoSaml2SubjectConfirmationDataPrivate {
GList *any; /* of LassoMiscTextNode */
GList *any;
GHashTable *attributes;
};

View File

@ -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}
};

View File

@ -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}
};

View File

@ -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,

View File

@ -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}

View File

@ -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);
}
}

View File

@ -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,

View File

@ -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}

View File

@ -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}
};

View File

@ -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,

View File

@ -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}
};

View File

@ -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,

View File

@ -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}
};

View File

@ -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 {

View File

@ -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,

View File

@ -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}
};

View File

@ -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) \

View File

@ -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},

View File

@ -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}
};

View File

@ -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,

View File

@ -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()
{

View File

@ -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},

View File

@ -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:

View File

@ -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