forked lasso branch for adeline

This commit is contained in:
Benjamin Dauvergne 2008-08-01 14:08:54 +00:00
parent 51b572d574
commit 76d9fce5d5
31 changed files with 210 additions and 118 deletions

View File

@ -1,5 +1,5 @@
#include <lasso/lasso.h>
#include <lasso_config.h>
#include <config.h>
#include <jni.h>
#include "com_entrouvert_lasso_LassoJNI.h"
#include <string.h>

View File

@ -1,7 +1,7 @@
#include <Python.h>
#include <structmember.h>
#include <lasso/lasso.h>
#include <lasso_config.h>
#include <config.h>
#include "../ghashtable.h"
GQuark lasso_wrapper_key;

View File

@ -129,6 +129,8 @@
<param name="item_id" optional="true"/>
</func>
<!-- LassoDiscovery -->
<func name="lasso_discovery_register_constructor_for_service_type" skip="true"/>
<func name="lasso_discovery_unregister_constructor_for_service_type" skip="true"/>
<func name="lasso_discovery_init_insert">
<param name="new_offering"/>
<param name="security_mech_id" optional="true"/>
@ -153,6 +155,7 @@
</func>
<func name="lasso_discovery_get_description_auto" return_owner="false"/>
<!-- LassoDataService -->
<func name="lasso_data_service_new_full" rename="lasso_data_service_new_full_data_service"/>
<func name="lasso_data_service_init_query">
<param name="select" optional="true"/>
<param name="item_id" optional="true"/>

View File

@ -29,7 +29,7 @@ AC_REVISION($Revision$)
dnl Run many macros mostly needed by configure.ac.
AM_INIT_AUTOMAKE(lasso, 2.2.1)
dnl Create rules to automaticaly regenerate the config header.
AM_CONFIG_HEADER(lasso/lasso_config.h)
AM_CONFIG_HEADER([config.h lasso/lasso_config.h])
dnl Add --enable-maintainer-mode option to configure.
AM_MAINTAINER_MODE

View File

@ -13,13 +13,12 @@ LTRCCOMPILE = $(LIBTOOL) --tag=RC --mode=compile $(RC) \
lasso.rc.lo: $(top_srcdir)/win32/lasso.rc
$(LTRCCOMPILE) -i $< -o $@
lib_LTLIBRARIES = liblasso.la
liblassoinclude_HEADERS = export.h lasso.h lasso_config.h errors.h soap_binding.h
liblassoinclude_HEADERS = export.h lasso.h lasso_config.h errors.h
BUILT_SOURCES = types.c errors.c symbols.sym
liblasso_la_SOURCES = lasso.c errors.c soap_binding.c
liblasso_la_SOURCES = lasso.c errors.c
if WSF_ENABLED
SYMBOLS_ARGS = -wsf
@ -80,7 +79,7 @@ liblasso_la_LDFLAGS = -no-undefined -version-info @LASSO_VERSION_INFO@ \
endif
errors.c: errors.h
python build_strerror.py >$(srcdir)/.errors.c.new
python $(srcdir)/build_strerror.py $(srcdir) >$(srcdir)/.errors.c.new
if ! cmp -s $(srcdir)/errors.c $(srcdir)/.errors.c.new; then \
mv -f $(srcdir)/.errors.c.new $(srcdir)/errors.c; else \
rm $(srcdir)/.errors.c.new; fi

View File

@ -6,7 +6,9 @@ import re
import sys
import os
hlines = file('errors.h','r').readlines()
srcdir = sys.argv[1]
hlines = file('%s/errors.h' % srcdir,'r').readlines()
messages = dict()
for line in hlines:
@ -18,7 +20,7 @@ for line in hlines:
if m:
messages[m.group(1)] = m.group(1)
clines = file('errors.c.in','r').readlines()
clines = file('%s/errors.c.in' % srcdir,'r').readlines()
for line in clines:
if '@ERROR_CASES@' in line:
for k in messages:

View File

@ -28,7 +28,7 @@
*
**/
#include <lasso/lasso_config.h>
#include <config.h>
#include <lasso/id-ff/identity.h>
#ifdef LASSO_WSF_ENABLED

View File

@ -145,7 +145,7 @@
#include <xmlsec/base64.h>
#include <lasso/lasso_config.h>
#include <config.h>
#include <lasso/xml/lib_authentication_statement.h>
#include <lasso/xml/lib_subject.h>
#include <lasso/xml/saml_advice.h>

View File

@ -30,7 +30,7 @@ extern "C" {
#endif /* __cplusplus */
#include <lasso/lasso_config.h>
#include <config.h>
#include <lasso/xml/saml-2.0/saml2_assertion.h>
#ifdef LASSO_WSF_ENABLED

View File

@ -32,7 +32,7 @@
#include <xmlsec/base64.h>
#include <lasso/lasso_config.h>
#include <config.h>
#include <lasso/id-ff/server.h>
#include <lasso/id-ff/providerprivate.h>

View File

@ -59,7 +59,7 @@
* Return value: 0 on success; or a negative value otherwise.
**/
gint
lasso_session_add_assertion(LassoSession *session, char *providerID, LassoNode *assertion)
lasso_session_add_assertion(LassoSession *session, const char *providerID, LassoNode *assertion)
{
gint ret = 0;
gchar *id = NULL;
@ -68,8 +68,7 @@ lasso_session_add_assertion(LassoSession *session, char *providerID, LassoNode *
g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(assertion != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
g_hash_table_insert(session->assertions, g_strdup(providerID),
g_object_ref(assertion));
g_hash_table_insert(session->assertions, g_strdup(providerID), g_object_ref(assertion));
if (LASSO_IS_SAML_ASSERTION(assertion)) {
id = LASSO_SAML_ASSERTION(assertion)->AssertionID;
@ -96,11 +95,13 @@ lasso_session_add_assertion(LassoSession *session, char *providerID, LassoNode *
* Returns: 0 if the assertion was added to the dictionnary.
*/
gint
lasso_session_add_assertion_with_id(LassoSession *session, char *assertionID, LassoNode *assertion)
lasso_session_add_assertion_with_id(LassoSession *session, const char *assertionID,
LassoNode *assertion)
{
g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(assertionID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(assertion != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
g_hash_table_insert(session->private_data->assertions_by_id,
g_strdup(assertionID),
g_object_ref(assertion));
@ -121,7 +122,7 @@ lasso_session_add_assertion_with_id(LassoSession *session, char *assertionID, La
* Return value: 0 on success; or a negative value otherwise.
**/
gint
lasso_session_add_status(LassoSession *session, char *providerID, LassoNode *status)
lasso_session_add_status(LassoSession *session, const char *providerID, LassoNode *status)
{
g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
@ -147,7 +148,7 @@ lasso_session_add_status(LassoSession *session, char *providerID, LassoNode *sta
* the caller.
**/
LassoNode*
lasso_session_get_assertion(LassoSession *session, gchar *providerID)
lasso_session_get_assertion(LassoSession *session, const gchar *providerID)
{
g_return_val_if_fail(LASSO_IS_SESSION(session), NULL);
@ -166,7 +167,7 @@ lasso_session_get_assertion(LassoSession *session, gchar *providerID)
* the caller.
*/
LassoNode*
lasso_session_get_assertion_by_id(LassoSession *session, gchar *assertionID)
lasso_session_get_assertion_by_id(LassoSession *session, const gchar *assertionID)
{
g_return_val_if_fail(LASSO_IS_SESSION(session), NULL);
@ -221,7 +222,7 @@ lasso_session_get_assertions(LassoSession *session, const char *provider_id)
* is internally allocated and must not be freed by the caller.
**/
LassoNode*
lasso_session_get_status(LassoSession *session, gchar *providerID)
lasso_session_get_status(LassoSession *session, const gchar *providerID)
{
if (session == NULL) {
return NULL;
@ -330,7 +331,7 @@ lasso_session_is_empty(LassoSession *session)
* Return value: 0 on success; or a negative value otherwise.
**/
gint
lasso_session_remove_assertion(LassoSession *session, gchar *providerID)
lasso_session_remove_assertion(LassoSession *session, const gchar *providerID)
{
g_return_val_if_fail(LASSO_IS_SESSION(session), LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
@ -353,7 +354,7 @@ lasso_session_remove_assertion(LassoSession *session, gchar *providerID)
* Return value: 0 on success; or a negative value otherwise.
**/
gint
lasso_session_remove_status(LassoSession *session, gchar *providerID)
lasso_session_remove_status(LassoSession *session, const gchar *providerID)
{
g_return_val_if_fail(session != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
g_return_val_if_fail(providerID != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);

View File

@ -46,21 +46,21 @@ struct _LassoSessionPrivate
};
gint lasso_session_add_assertion(LassoSession *session,
char *providerID, LassoNode *assertion);
const char *providerID, LassoNode *assertion);
gint lasso_session_add_status(LassoSession *session,
char *providerID, LassoNode *status);
const char *providerID, LassoNode *status);
gint lasso_session_add_assertion_with_id(LassoSession *session,
char *assertionID, LassoNode *assertion);
const char *assertionID, LassoNode *assertion);
LassoNode* lasso_session_get_assertion(
LassoSession *session, gchar *providerID);
LassoSession *session, const gchar *providerID);
LassoNode* lasso_session_get_assertion_by_id(
LassoSession *session, gchar *assertionID);
LassoSession *session, const gchar *assertionID);
LassoNode* lasso_session_get_status(
LassoSession *session, gchar *providerID);
LassoSession *session, const gchar *providerID);
gint lasso_session_remove_status(LassoSession *session, gchar *providerID);
gint lasso_session_remove_assertion(LassoSession *session, gchar *providerID);
gint lasso_session_remove_status(LassoSession *session, const gchar *providerID);
gint lasso_session_remove_assertion(LassoSession *session, const gchar *providerID);
void lasso_session_init_provider_ids(LassoSession *session);

View File

@ -9,7 +9,8 @@ INCLUDES = \
lasso_private_h_sources = \
data_service_private.h \
wsf_profile_private.h
wsf_profile_private.h \
soap_binding.h
if WSF_ENABLED
noinst_LTLIBRARIES = liblasso-id-wsf.la
@ -20,7 +21,8 @@ WSF_C_FILES = \
personal_profile_service.c \
data_service.c \
wsf_profile.c \
utils.c
utils.c \
soap_binding.c
WSF_H_FILES = \
authentication.h \

View File

@ -83,6 +83,42 @@ struct _LassoAuthenticationPrivate
gboolean dispose_has_run;
};
static LassoSoapEnvelope*
lasso_authentication_build_soap_envelope_internal(const char *refToMessageId, const char *providerId)
{
LassoSoapEnvelope *envelope;
LassoSoapHeader *header;
LassoSoapBody *body;
LassoSoapBindingCorrelation *correlation;
gchar *messageId, *timestamp;
/* Body */
body = lasso_soap_body_new();
body->id = lasso_build_unique_id(32);
envelope = lasso_soap_envelope_new(body);
/* Header */
header = lasso_soap_header_new();
envelope->Header = header;
/* Correlation */
messageId = lasso_build_unique_id(32);
timestamp = lasso_get_current_time();
correlation = lasso_soap_binding_correlation_new(messageId, timestamp);
correlation->id = lasso_build_unique_id(32);
if (refToMessageId != NULL)
correlation->refToMessageID = g_strdup(refToMessageId);
header->Other = g_list_append(header->Other, correlation);
/* Provider */
if (providerId) {
LassoSoapBindingProvider *provider = lasso_soap_binding_provider_new(providerId);
provider->id = lasso_build_unique_id(32);
header->Other = g_list_append(header->Other, provider);
}
return envelope;
}
gint
lasso_authentication_client_start(LassoAuthentication *authentication)
{
@ -226,7 +262,7 @@ lasso_authentication_init_request(LassoAuthentication *authentication,
request = lasso_sa_sasl_request_new(mechanisms);
LASSO_WSF_PROFILE(authentication)->request = LASSO_NODE(request);
envelope = lasso_wsf_profile_build_soap_envelope(NULL, NULL);
envelope = lasso_authentication_build_soap_envelope_internal(NULL, NULL);
LASSO_WSF_PROFILE(authentication)->soap_envelope_request = envelope;
if (envelope == NULL || envelope->Body == NULL || envelope->Body->any == NULL) {
return critical_error(LASSO_PROFILE_ERROR_MISSING_REQUEST);
@ -327,7 +363,7 @@ lasso_authentication_process_request_msg(LassoAuthentication *authentication,
correlation = envelope->Header->Other->data;
messageId = correlation->messageID;
envelope = lasso_wsf_profile_build_soap_envelope(messageId, NULL);
envelope = lasso_authentication_build_soap_envelope_internal(messageId, NULL);
LASSO_WSF_PROFILE(authentication)->soap_envelope_response = envelope;
status = lasso_utility_status_new(LASSO_SA_STATUS_CODE_OK);
@ -403,7 +439,7 @@ lasso_authentication_process_response_msg(LassoAuthentication *authentication,
correlation = envelope->Header->Other->data;
messageId = correlation->messageID;
envelope = lasso_wsf_profile_build_soap_envelope(messageId, NULL);
envelope = lasso_authentication_build_soap_envelope_internal(messageId, NULL);
LASSO_WSF_PROFILE(authentication)->soap_envelope_request = envelope;
request = lasso_sa_sasl_request_new(g_strdup(response->serverMechanism));

View File

@ -921,8 +921,6 @@ lasso_register_idwsf_xpath_namespaces(xmlXPathContext *xpathCtx)
}
/*****************************************************************************/
/* overrided parent class methods */
/*****************************************************************************/

View File

@ -72,16 +72,19 @@
#include <lasso/xml/saml_attribute.h>
#include <lasso/xml/saml_attribute_value.h>
#include <lasso/xml/disco_modify.h>
#include <lasso/xml/saml_assertion.h>
#include <lasso/id-ff/server.h>
#include <lasso/id-ff/provider.h>
#include <lasso/id-ff/providerprivate.h>
#include <lasso/id-ff/sessionprivate.h>
#include <lasso/id-wsf/discovery.h>
#include <lasso/id-wsf/identity.h>
#include <lasso/id-wsf/data_service.h>
#include <lasso/id-wsf/personal_profile_service.h>
#include <lasso/id-wsf/wsf_profile_private.h>
#include <lasso/id-wsf/utils.h>
struct _LassoDiscoveryPrivate
{
@ -340,7 +343,6 @@ lasso_discovery_init_modify(LassoDiscovery *discovery,
LassoDiscoDescription *description)
{
LassoWsfProfile *profile = NULL;
LassoSoapEnvelope *envelope = NULL;
LassoDiscoModify *modify = NULL;
gint res = 0;
@ -941,6 +943,14 @@ lasso_discovery_build_response_msg(LassoDiscovery *discovery)
return res;
}
const char*
get_assertion_id(LassoNode *node) {
if (LASSO_IS_SAML_ASSERTION(node)) {
return LASSO_SAML_ASSERTION(node)->AssertionID;
}
return NULL;
}
/**
* lasso_discovery_process_query_response_msg:
* @discovery: a #LassoDiscovery
@ -957,10 +967,7 @@ lasso_discovery_process_query_response_msg(LassoDiscovery *discovery, const gcha
{
LassoWsfProfile *profile = NULL;
LassoDiscoQueryResponse *response;
xmlXPathContext *xpathCtx = NULL;
xmlXPathObject *xpathObj;
LassoDiscoCredentials *credentials;
int rc = 0, i;
int rc = 0;
g_return_val_if_fail(LASSO_IS_DISCOVERY(discovery),
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
@ -972,7 +979,8 @@ lasso_discovery_process_query_response_msg(LassoDiscovery *discovery, const gcha
if (rc)
goto exit;
response = LASSO_DISCO_QUERY_RESPONSE(profile->response);
if (strcmp(response->Status->code, LASSO_DISCO_STATUS_CODE_OK) != 0) {
if (strcmp(response->Status->code, LASSO_DISCO_STATUS_CODE_OK) != 0 &&
strcmp(response->Status->code, LASSO_DISCO_STATUS_CODE_DISCO_OK) != 0) {
return LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS;
}
/** Process the credentials, add them to the session */
@ -983,7 +991,8 @@ lasso_discovery_process_query_response_msg(LassoDiscovery *discovery, const gcha
continue;
}
if (profile->session) {
lasso_session_add_assertion(profile->session,
lasso_session_add_assertion_with_id(profile->session,
get_assertion_id(assertions->data),
assertions->data);
} else {
rc = LASSO_PROFILE_ERROR_SESSION_NOT_FOUND;
@ -1047,8 +1056,7 @@ lasso_discovery_get_service(LassoDiscovery *discovery, const char *service_type)
return NULL; /* resource not found */
}
}
service = lasso_discovery_build_wsf_profile(discovery,
offering);
service = lasso_discovery_build_wsf_profile(discovery, offering);
return service;
}
@ -1090,8 +1098,7 @@ lasso_discovery_get_services(LassoDiscovery *discovery)
if (offering->ServiceInstance == NULL) {
continue;
}
service = lasso_discovery_build_wsf_profile(discovery,
offering);
service = lasso_discovery_build_wsf_profile(discovery, offering);
services = g_list_append(services, service);
}
@ -1107,7 +1114,7 @@ lasso_discovery_get_services(LassoDiscovery *discovery)
* constructor for the service type they supports.
*/
void
lasso_discovery_get_register_constructor_for_service_type(gchar *service_type,
lasso_discovery_register_constructor_for_service_type(const gchar *service_type,
LassoWsfProfileConstructor constructor)
{
LassoWsfProfileConstructor old_constructor;
@ -1156,7 +1163,7 @@ lasso_discovery_unregister_constructor_for_service_type(
* service provider. Fills the Modulus and Exponent composant of the RsaKeyValue.
* It does not handle DSAKeyValue.
*
* Returns: a new #LassoDsKeyIfno or NULL if no provider or no public key were found.
* Return value: a new #LassoDsKeyIfno or NULL if no provider or no public key were found.
*/
static LassoDsKeyInfo*
lasso_discovery_build_key_info_node(LassoDiscovery *discovery, const gchar *providerID)
@ -1241,9 +1248,8 @@ static GHashTable *registry = NULL;
static GHashTable *
get_constructors_registry()
{
if (registry==NULL) {
registry = g_hash_table_new_full(g_str_hash, g_direct_equal,
g_free, NULL);
if (registry == NULL) {
registry = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
}
return registry;
}
@ -1273,6 +1279,20 @@ set_registry(gchar const *service_type, LassoWsfProfileConstructor constructor)
g_strdup(service_type), constructor);
}
static void
move_ass(gchar *key, LassoSamlAssertion *ass, GHashTable *dest)
{
g_hash_table_insert(dest, g_strdup(key), g_object_ref(ass));
}
void
lasso_wsf_profile_move_assertions(LassoWsfProfile *src, LassoWsfProfile *dest)
{
dest->session = lasso_session_new();
g_hash_table_foreach(src->session->private_data->assertions_by_id, (GHFunc)move_ass,
dest->session->private_data->assertions_by_id);
}
static LassoWsfProfile *
lasso_discovery_build_wsf_profile(LassoDiscovery *discovery, LassoDiscoResourceOffering *offering)
{
@ -1287,14 +1307,18 @@ lasso_discovery_build_wsf_profile(LassoDiscovery *discovery, LassoDiscoResourceO
service_type = offering->ServiceInstance->ServiceType;
a_constructor = lookup_registry(service_type);
server = discovery->parent.server;
server = LASSO_WSF_PROFILE(discovery)->server;
if (a_constructor) {
a_wsf_profile = a_constructor(server,
offering);
a_wsf_profile = a_constructor(server, offering);
} else {
message(G_LOG_LEVEL_WARNING, "No constructor registered for service type: %s", service_type);
a_wsf_profile = LASSO_WSF_PROFILE(lasso_data_service_new_full(server, offering));
}
lasso_wsf_profile_move_assertions(LASSO_WSF_PROFILE(discovery), a_wsf_profile);
//a_wsf_profile = LASSO_WSF_PROFILE(lasso_dgme_msped_service_new_full(server, offering));
return a_wsf_profile;
}

View File

@ -128,6 +128,7 @@ LASSO_EXPORT void lasso_discovery_register_constructor_for_service_type(gchar co
LassoWsfProfileConstructor constructor);
LASSO_EXPORT void lasso_discovery_unregister_constructor_for_service_type(gchar const *service_type,
LassoWsfProfileConstructor constructor);
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@ -22,7 +22,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <lasso/soap_binding.h>
#include <lasso/id-wsf/soap_binding.h>
#define find_node_type_in_list(iter, check) \
{ while (iter && ! check(iter->data)) \

View File

@ -33,9 +33,9 @@
extern "C" {
#endif /* __cplusplus */
LASSO_EXPORT LassoSoapBindingProvider* lasso_soap_binding_get_provider(LassoSoapEnvelope *envelope);
LassoSoapBindingProvider* lasso_soap_binding_get_provider(LassoSoapEnvelope *envelope);
LASSO_EXPORT LassoSoapBindingCorrelation* lasso_soap_binding_get_correlation(LassoSoapEnvelope *evelope);
LassoSoapBindingCorrelation* lasso_soap_binding_get_correlation(LassoSoapEnvelope *evelope);
#ifdef __cplusplus
}

View File

@ -26,11 +26,16 @@
* lasso_security_mech_is_saml_authentication:
* @security_mech_id: the URI of an authentication mechanism
*
* Returns: %TRUE if @security_mech_id is one of
* Return value: %TRUE if @security_mech_id is one of
* urn:liberty:security:2003-08:NULL:SAML,
* urn:liberty:security:2003-08:TLS:SAML or
* urn:liberty:security:2003-08:ClientTLS:SAML, FALSE otherwise.
*/
#include <glib.h>
#include <lasso/xml/strings.h>
#include <string.h>
gboolean
lasso_security_mech_id_is_saml_authentication(const gchar *security_mech_id)
{
@ -49,7 +54,7 @@ lasso_security_mech_id_is_saml_authentication(const gchar *security_mech_id)
* lasso_security_mech_is_x509_authentication:
* @security_mech_id: the URI of an authentication mechanism
*
* Returns: %TRUE if @security_mech_id is one of
* Return value: %TRUE if @security_mech_id is one of
* urn:liberty:security:2003-08:NULL:X509,
* urn:liberty:security:2003-08:TLS:X509 or
* urn:liberty:security:2003-08:ClientTLS:X509, FALSE otherwise.
@ -72,7 +77,7 @@ lasso_security_mech_id_is_x509_authentication(const char *security_mech_id)
* lasso_security_mech_is_null_authentication:
* @security_mech_id: the URI of an authentication mechanism
*
* Returns: %TRUE if @security_mech_id is one of
* Return value: %TRUE if @security_mech_id is one of
* urn:liberty:security:2003-08:NULL:NULL,
* urn:liberty:security:2003-08:TLS:NULL or
* urn:liberty:security:2003-08:ClientTLS:NULL, FALSE otherwise.
@ -81,9 +86,9 @@ gboolean
lasso_security_mech_id_is_null_authentication(const char *security_mech_id)
{
if (strcmp(security_mech_id,
LASSO_SECURITY_MECH_CLIENT_TLS_NULL) == 0 ||
LASSO_SECURITY_MECH_CLIENT_TLS) == 0 ||
strcmp(security_mech_id,
LASSO_SECURITY_MECH_TLS_NULL) == 0 ||
LASSO_SECURITY_MECH_TLS) == 0 ||
strcmp(security_mech_id,
LASSO_SECURITY_MECH_NULL) == 0) {
return TRUE;

View File

@ -35,6 +35,7 @@
#include <lasso/id-wsf/wsf_profile.h>
#include <lasso/id-wsf/wsf_profile_private.h>
#include <lasso/id-wsf/discovery.h>
#include <lasso/id-wsf/utils.h>
#include <lasso/xml/disco_modify.h>
#include <lasso/xml/soap_fault.h>
#include <lasso/xml/soap_binding_correlation.h>
@ -51,6 +52,7 @@
#include <lasso/id-ff/server.h>
#include <lasso/id-ff/providerprivate.h>
#include <lasso/id-ff/sessionprivate.h>
/*****************************************************************************/
/* private methods */
@ -85,7 +87,7 @@ lasso_wsf_profile_get_fault(LassoWsfProfile *profile)
* lasso_wsf_profile_comply_with_saml_authentication:
* @profile: a #LassoWsfProfile
*
* Returns: 0 if an assertion was found and a signature corresponding to the
* Return value: 0 if an assertion was found and a signature corresponding to the
* key given as a subject confirmation in the assertion is generated, an error
* code otherwise.
*/
@ -128,7 +130,7 @@ lasso_wsf_profile_comply_with_saml_authentication(LassoWsfProfile *profile)
*
* UNCOMPLETE.
*
* Returns: 0 if complyiing with the current security mechanism was
* Return value: 0 if complyiing with the current security mechanism was
* successfull.
*/
static gint
@ -198,7 +200,7 @@ lasso_wsf_profile_build_soap_envelope_internal(const char *refToMessageId, const
*
* OBSOLETE: Do nothin.
*
* Returns: 0.
* Return value: 0.
*/
gint
lasso_wsf_profile_move_credentials(LassoWsfProfile *src, LassoWsfProfile *dest)
@ -213,7 +215,7 @@ lasso_wsf_profile_move_credentials(LassoWsfProfile *src, LassoWsfProfile *dest)
*
* OBSOLETE: Do nothing.
*
* Returns: 0.
* Return value: 0.
*/
gint
lasso_wsf_profile_add_credential(LassoWsfProfile *profile, xmlNode *credential)
@ -229,7 +231,7 @@ lasso_wsf_profile_add_credential(LassoWsfProfile *profile, xmlNode *credential)
* Traverse the service instance descriptions and find one which supports the
* given security mechanism.
*
* Returns: a #LassoDiscoDescription that supports security_mech_id, NULL
* Return value: a #LassoDiscoDescription that supports security_mech_id, NULL
* otherwise.
*/
LassoDiscoDescription*
@ -264,7 +266,7 @@ lasso_wsf_profile_get_description_auto(LassoDiscoServiceInstance *si, const gcha
*
* Setup the LassoWsfProfile for a given security mechanism.
*
* Returns: 0 if a corresponding description was found,
* Return value: 0 if a corresponding description was found,
* LASSO_PROFILE_ERROR_MISSING_SERVICE_DESCRIPTION if no description with the
* given security mechanism was found.
*/
@ -298,7 +300,7 @@ lasso_wsf_profile_set_description_from_offering(
}
/**
* lasso_wsf_profile_set_security_mechanism:
* lasso_wsf_profile_set_security_mech_id:
* @profile: the #LassoWsfProfile object
* @securit_mech_id: a char* string representing the chosen security mech id.
*
@ -314,30 +316,37 @@ lasso_wsf_profile_set_description_from_offering(
* LASSO_SECURITY_MECH_CLIENT_TLS or "urn:liberty:security:2003-08:ClientTLS:null"
* LASSO_SECURITY_MECH_CLIENT_TLS_SAML or "urn:liberty:security:2003-08:ClientTLS:SAML"
*
* Returns: 0 if the security mechanism is supported by this #LassoWsfProfile
* Return value: 0 if the security mechanism is supported by this #LassoWsfProfile
* object, an error code otherwise.
*/
gint
lasso_wsf_profile_set_security_mechanism(LassoWsfProfile *profile,
char *security_mech_id)
lasso_wsf_profile_set_security_mech_id(LassoWsfProfile *profile,
const char *security_mech_id)
{
g_return_val_if_invalid_param(WSF_PROFILE, profile,
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
if (lasso_security_is_saml_authentication(security_mech_id)
|| lasso_security_is_null_authentication(security_mech_id)) {
if (lasso_security_mech_id_is_saml_authentication(security_mech_id)
|| lasso_security_mech_id_is_null_authentication(security_mech_id)) {
g_assign_string(profile->private_data->security_mech_id, security_mech_id);
if (profile->private_data->offering) {
lasso_wsf_profile_set_description_from_offering(
profile,
profile->private_data->offering,
security_mech_id);
}
return 0;
}
return LASSO_WSF_PROFILE_ERROR_UNSUPPORTED_SECURITY_MECHANISM;
}
/**
* lasso_wsf_profile_get_security_mechanism:
* lasso_wsf_profile_get_security_mech_id:
* @profile: the #LassoWsfProfile object
*
* Returns: the current security mechanism id for this object.
* Return value: the current security mechanism id for this object.
*/
const char *
lasso_wsf_profile_get_security_mechanism(LassoWsfProfile *profile)
lasso_wsf_profile_get_security_mech_id(LassoWsfProfile *profile)
{
g_return_val_if_invalid_param(WSF_PROFILE, profile,
NULL);
@ -367,7 +376,7 @@ lasso_wsf_profile_set_description(LassoWsfProfile *profile, LassoDiscoDescriptio
* locate the endpoint and the security mechanism to use for the next ID-WSF
* request.
*
* Returns: a #LassoDiscoDescriptio or NULL if none is present.
* Return value: a #LassoDiscoDescriptio or NULL if none is present.
*/
LassoDiscoDescription *
lasso_wsf_profile_get_description(LassoWsfProfile *profile)
@ -375,6 +384,21 @@ lasso_wsf_profile_get_description(LassoWsfProfile *profile)
return profile->private_data->description;
}
/**
* lasso_wsf_profile_get_resource_offering:
* @profile: the #LassoWsfProfile object
*
* Returns the ResourceOffering setupt with this profile object.
*
* Return value: a #LassoDiscoResourceOffering if one was setup during
* construction, NULL otherwise.
*/
LassoDiscoResourceOffering *
lasso_wsf_profile_get_resource_offering(LassoWsfProfile *profile)
{
return profile->private_data->offering;
}
/**
* lasso_wsf_profile_build_soap_envelope:
* @refToMessageId: a char* string and the eventual MessageId of a SOAP request
@ -385,7 +409,7 @@ lasso_wsf_profile_get_description(LassoWsfProfile *profile)
* Build the a #LassoSoapEnvelope as a template for a future SOAP message
* containing the headers recommended by the ID-WSF 1.0 specification.
*
* Returns: a new #LassoSoapEnvelope if construction was successfull.
* Return value: a new #LassoSoapEnvelope if construction was successfull.
*/
LassoSoapEnvelope*
lasso_wsf_profile_build_soap_envelope(const char *refToMessageId, const char *providerId)
@ -400,7 +424,7 @@ lasso_wsf_profile_build_soap_envelope(const char *refToMessageId, const char *pr
*
* OBSOLETE: do nothing.
*
* Returns: FALSE.
* Return value: FALSE.
**/
gboolean
lasso_wsf_profile_principal_is_online(LassoWsfProfile *profile)
@ -568,7 +592,7 @@ lasso_wsf_profile_set_session_from_dump(LassoWsfProfile *profile, const gchar *
* the body of the request to request. The reference to request is not stolen i.e
* the ref count of request is increased by one after this call.
*
* Retun: 0 if initialization was successfull.
* Return value: 0 if initialization was successfull.
*/
gint
lasso_wsf_profile_init_soap_request(LassoWsfProfile *profile, LassoNode *request)
@ -582,7 +606,7 @@ lasso_wsf_profile_init_soap_request(LassoWsfProfile *profile, LassoNode *request
if (profile->server) {
providerID = profile->server->parent.ProviderID;
}
envelope = lasso_wsf_profile_build_soap_envelope_internal(NULL,providerID);
envelope = lasso_wsf_profile_build_soap_envelope_internal(NULL, providerID);
profile->soap_envelope_request = envelope;
envelope->Body->any = g_list_append(envelope->Body->any, request);
profile->request = request;
@ -597,24 +621,16 @@ lasso_wsf_profile_init_soap_request(LassoWsfProfile *profile, LassoNode *request
* and eventually sign with the local public depending on the security
* mechanism requested.
*
* Returns: 0 if construction is successfull.
* Return value: 0 if construction is successfull.
*/
gint
lasso_wsf_profile_build_soap_request_msg(LassoWsfProfile *profile)
{
LassoSoapEnvelope *envelope;
LassoSoapHeader *header;
LassoWsseSecurity *security = NULL;
int ret;
GList *iter = NULL;
xmlNode *security_xmlNode, *credential;
xmlOutputBuffer *buf;
xmlCharEncodingHandler *handler;
xmlDoc *doc = NULL;
xmlNode *envelope_node = NULL;
xmlXPathContext *xpathCtx = NULL;
xmlXPathObject *xpathObj = NULL;
g_return_val_if_fail(LASSO_IS_WSF_PROFILE(profile), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
g_return_val_if_fail(LASSO_IS_SOAP_ENVELOPE(profile->soap_envelope_request),
@ -646,14 +662,12 @@ lasso_wsf_profile_build_soap_request_msg(LassoWsfProfile *profile)
* Create the char* string containing XML document for the SOAP ID-WSF
* response.
*
* Returns: 0 if construction is successfull.
* Return value: 0 if construction is successfull.
*/
int
lasso_wsf_profile_build_soap_response_msg(LassoWsfProfile *profile)
{
LassoSoapEnvelope *envelope;
LassoSoapHeader *header;
LassoWsseSecurity *security;
xmlNode *soap_envelope;
xmlDoc *doc;
xmlOutputBuffer *buf;
@ -684,10 +698,8 @@ gint
lasso_wsf_profile_process_soap_request_msg(LassoWsfProfile *profile, const gchar *message,
const gchar *service_type, const gchar *security_mech_id)
{
LassoDiscoServiceInstance *si = NULL;
LassoSoapBindingCorrelation *correlation = NULL;
LassoSoapEnvelope *envelope = NULL;
LassoSoapFault *fault = NULL;
gchar *messageId;
int res = 0;
xmlDoc *doc;
@ -745,12 +757,11 @@ exit:
* Parse a SOAP response from an ID-WSF 1.0 service,
* eventually signal a SOAP fault.
*
* Returns: 0 if the processing of this message was successful.
* Return value: 0 if the processing of this message was successful.
*/
gint
lasso_wsf_profile_process_soap_response_msg(LassoWsfProfile *profile, const gchar *message)
{
LassoSoapEnvelope *envelope;
xmlDoc *doc;
xmlNode *root;
LassoNode *node;
@ -776,9 +787,9 @@ lasso_wsf_profile_process_soap_response_msg(LassoWsfProfile *profile, const gcha
ret = critical_error(LASSO_PROFILE_ERROR_INVALID_SOAP_MSG);
goto exit;
}
profile->response = LASSO_NODE(envelope->Body->any->data);
profile->response = LASSO_NODE(profile->soap_envelope_response->Body->any->data);
/* Signal soap fault specifically */
if (LASSO_IS_SOAP_FAULT(envelope->Body->any->data)) {
if (LASSO_IS_SOAP_FAULT(profile->response)) {
return LASSO_WSF_PROFILE_ERROR_SOAP_FAULT;
}
exit:
@ -796,7 +807,7 @@ exit:
*
* OBSOLETE: do nothing.
*
* Returns: NULL
* Return value: NULL
*/
LassoSoapBindingProvider *lasso_wsf_profile_set_provider_soap_request(LassoWsfProfile *profile,
const char *providerId)
@ -910,7 +921,7 @@ lasso_wsf_profile_init(LassoWsfProfile *profile,
/* FIXME: is a NULL server authorized ? */
g_assign_gobject(profile->server, server);
/* FIXME: is a NULL oferring authorized ? */
g_assign_gobject(offering, profile->private_data->offering);
g_assign_gobject(profile->private_data->offering, offering);
return 0;
}

View File

@ -72,7 +72,7 @@ struct _LassoWsfProfile {
/*< private >*/
LassoIdentity *identity;
LassoSession *session;
LassoWsfProfilePrivate *private_data;
};
@ -130,9 +130,11 @@ LASSO_EXPORT void lasso_wsf_profile_set_description(LassoWsfProfile *profile,
LASSO_EXPORT LassoDiscoDescription *lasso_wsf_profile_get_description(LassoWsfProfile *profile);
LASSO_EXPORT gint lasso_wsf_profile_set_security_mechanism(LassoWsfProfile *profile, char *security_mech_id);
LASSO_EXPORT LassoDiscoResourceOffering *lasso_wsf_profile_get_resource_offering(LassoWsfProfile *profile);
LASSO_EXPORT const char *lasso_wsf_profile_get_security_mechanism(LassoWsfProfile *profile);
LASSO_EXPORT gint lasso_wsf_profile_set_security_mech_id(LassoWsfProfile *profile, const char *security_mech_id);
LASSO_EXPORT const char *lasso_wsf_profile_get_security_mech_id(LassoWsfProfile *profile);
G_GNUC_DEPRECATED LASSO_EXPORT void lasso_wsf_profile_set_principal_status(LassoWsfProfile *profile,
const char *status);
@ -141,6 +143,9 @@ G_GNUC_DEPRECATED LASSO_EXPORT void lasso_wsf_profile_set_principal_online(Lasso
G_GNUC_DEPRECATED LASSO_EXPORT void lasso_wsf_profile_set_principal_offline(LassoWsfProfile *profile);
LASSO_EXPORT gint lasso_wsf_profile_init(LassoWsfProfile *profile, LassoServer *server,
LassoDiscoResourceOffering *offering);
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@ -31,8 +31,7 @@
#include <xmlsec/xmlsec.h>
#include <xmlsec/crypto.h>
#include <libxslt/xslt.h>
#include "lasso_config.h"
#include <config.h>
#include "lasso.h"
#if defined _MSC_VER

View File

@ -523,7 +523,7 @@ dispose(GObject *object)
static void
finalize(GObject *object)
{
LassoAssertionQuery *profile = LASSO_ASSERTION_QUERY(profile);
LassoAssertionQuery *profile = LASSO_ASSERTION_QUERY(object);
g_free(profile->private_data);
profile->private_data = NULL;
G_OBJECT_CLASS(parent_class)->finalize(object);

View File

@ -29,7 +29,7 @@
extern "C" {
#endif /* __cplusplus */
#include <lasso/lasso_config.h>
#include <config.h>
struct _LassoEcpPrivate
{

View File

@ -23,6 +23,7 @@
*/
#include <lasso/xml/disco_description.h>
#include <lasso/id-wsf/utils.h>
#include <lasso/utils.h>
/**
@ -279,9 +280,8 @@ lasso_disco_description_has_x509_authentication(LassoDiscoDescription *descripti
iter = description->SecurityMechID;
while (iter) {
security_mech_id = iter->data;
if (strcmp(security_mech_id, LASSO_SECURITY_MECH_CLIENT_TLS_X509) == 0 ||
strcmp(security_mech_id, LASSO_SECURITY_MECH_TLS_X509) == 0 ||
strcmp(security_mech_id, LASSO_SECURITY_MECH_X509) == 0) {
if (lasso_security_mech_id_is_x509_authentication(
security_mech_id)) {
return TRUE;
}
iter = g_list_next(iter);

View File

@ -267,6 +267,7 @@
/* status code */
#define LASSO_DISCO_STATUS_CODE_OK "OK"
#define LASSO_DISCO_STATUS_CODE_DISCO_OK "disco:OK"
#define LASSO_DISCO_STATUS_CODE_FAILED "Failed"
#define LASSO_DISCO_STATUS_CODE_REMOVE_ENTRY "RemoveEntry"
#define LASSO_DISCO_STATUS_CODE_FORBIDDEN "Forbidden"

View File

@ -47,6 +47,7 @@
#include <lasso/xml/saml-2.0/saml2_assertion.h>
LassoNode* lasso_assertion_encrypt(LassoSaml2Assertion *assertion);
static xmlSecKeyPtr lasso_get_public_key_from_private_key_file(const char *private_key_file);
/**
* lasso_build_random_sequence:
@ -203,7 +204,7 @@ xmlSecKeyPtr lasso_get_public_key_from_pem_file(const char *file) {
xmlSecKeyDataFormatPem, NULL, NULL, NULL);
break;
case LASSO_PEM_FILE_TYPE_PRIVATE_KEY:
pub_key = lasso_load_private_key_file(file);
pub_key = lasso_get_public_key_from_private_key_file(file);
break; /* with a warning ? */
}
@ -265,7 +266,7 @@ lasso_get_public_key_from_pem_cert_file(const char *pem_cert_file)
*
* Returns: a new $xmlSecKey containing the private key
*/
xmlSecKeyPtr
static xmlSecKeyPtr
lasso_get_public_key_from_private_key_file(const char *private_key_file)
{
return xmlSecCryptoAppKeyLoad(private_key_file,

View File

@ -1573,6 +1573,9 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode)
prefix = "IdWsf2Sec";
else if (strcmp((char*)xmlnode->ns->href, LASSO_WSA_HREF) == 0)
prefix = "WsAddr";
else if (strcmp((char*)xmlnode->ns->href, "urn:dgme:msp:ed:2007-01") == 0)
/* FIXME: new namespaces should be possible to add from another library than lasso */
prefix = "MspEd";
else {
/* ID-WSF 2 Profile */
tmp = lasso_get_prefix_for_idwsf2_dst_service_href((char*)xmlnode->ns->href);

View File

@ -31,6 +31,7 @@
#include <lasso/xml/disco_encrypt_resource_id.h>
#include <lasso/xml/disco_send_single_logout.h>
#include <lasso/xml/disco_generate_bearer_token.h>
#include <lasso/xml/disco_description.h>
%}
/* WSF prefix & href */

View File

@ -23,7 +23,7 @@
#include <stdlib.h>
#include <string.h>
#include <lasso_config.h>
#include <config.h>
#include <check.h>
#include <lasso/lasso.h>