summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-07-16 11:02:04 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-07-16 11:02:04 +0000
commitaa4af2d1096e8f54edfc221863a02c4d6750e464 (patch)
treee8e435d495d2e552dc6e9849e62b99ed313d6a8b
parent93f6823e610c97f5bf54eff96a71318cfc20bd3a (diff)
downloadlasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.tar.gz
lasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.tar.xz
lasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.zip
*** empty log message ***
-rw-r--r--lasso/Attic/protocols/identity.c4
-rw-r--r--lasso/id-ff/federation_termination.h2
-rw-r--r--lasso/id-ff/logout.c51
-rw-r--r--lasso/id-ff/logout.h2
-rw-r--r--lasso/id-ff/server.c2
-rw-r--r--lasso/id-ff/user.c23
-rw-r--r--python/environs/py_user.c62
-rw-r--r--python/environs/py_user.h4
-rw-r--r--python/lasso.py10
-rw-r--r--python/lassomod.c9
10 files changed, 149 insertions, 20 deletions
diff --git a/lasso/Attic/protocols/identity.c b/lasso/Attic/protocols/identity.c
index 55d8894e..380b8fff 100644
--- a/lasso/Attic/protocols/identity.c
+++ b/lasso/Attic/protocols/identity.c
@@ -78,14 +78,14 @@ void
lasso_identity_set_local_nameIdentifier(LassoIdentity *identity,
LassoNode *nameIdentifier)
{
- identity->local_nameIdentifier = nameIdentifier;
+ identity->local_nameIdentifier = lasso_node_copy(nameIdentifier);
}
void
lasso_identity_set_remote_nameIdentifier(LassoIdentity *identity,
LassoNode *nameIdentifier)
{
- identity->remote_nameIdentifier = nameIdentifier;
+ identity->remote_nameIdentifier = lasso_node_copy(nameIdentifier);
}
gboolean
diff --git a/lasso/id-ff/federation_termination.h b/lasso/id-ff/federation_termination.h
index af2a4478..73f9314a 100644
--- a/lasso/id-ff/federation_termination.h
+++ b/lasso/id-ff/federation_termination.h
@@ -56,7 +56,7 @@ struct _LassoFederationTerminationClass {
LASSO_EXPORT GType lasso_federation_termination_get_type (void);
-LASSO_EXPORT LassoFederationTermination *lasso_federation_termination_new (LassoServer *defederation,
+LASSO_EXPORT LassoFederationTermination *lasso_federation_termination_new (LassoServer *server,
LassoUser *user,
gint provider_type);
diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c
index a31461eb..251f6887 100644
--- a/lasso/id-ff/logout.c
+++ b/lasso/id-ff/logout.c
@@ -24,6 +24,8 @@
#include <lasso/environs/logout.h>
+static GObjectClass *parent_class = NULL;
+
/*****************************************************************************/
/* public methods */
/*****************************************************************************/
@@ -44,7 +46,7 @@ lasso_logout_build_request_msg(LassoLogout *logout)
{
LassoProfileContext *profileContext;
LassoProvider *provider;
- xmlChar *protocolProfile;
+ xmlChar *protocolProfile, *singleLogoutServiceURL;
g_return_val_if_fail(LASSO_IS_LOGOUT(logout), -1);
@@ -57,14 +59,21 @@ lasso_logout_build_request_msg(LassoLogout *logout)
return(-2);
}
+ singleLogoutServiceURL = lasso_provider_get_singleLogoutServiceURL(provider);
protocolProfile = lasso_provider_get_singleLogoutProtocolProfile(provider);
+
if(protocolProfile==NULL){
debug(ERROR, "Single Logout Protocol profile not found\n");
return(-3);
}
+ if(singleLogoutServiceURL==NULL){
+ debug(ERROR, "Single Logout Service URL not found\n");
+ return(-4);
+ }
+
if(xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloSpSoap) || xmlStrEqual(protocolProfile, lassoLibProtocolProfileSloIdpSoap)){
- debug(DEBUG, "building a soap request message\n");
+ debug(DEBUG, "Building a soap request message\n");
profileContext->request_type = lassoHttpMethodSoap;
/* sign the request message */
@@ -73,11 +82,11 @@ lasso_logout_build_request_msg(LassoLogout *logout)
profileContext->server->private_key,
profileContext->server->certificate);
- profileContext->msg_url = lasso_provider_get_singleLogoutServiceURL(provider);
+ profileContext->msg_url = singleLogoutServiceURL;
profileContext->msg_body = lasso_node_export_to_soap(profileContext->request);
}
else if(xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloSpHttp)||xmlStrEqual(protocolProfile,lassoLibProtocolProfileSloIdpHttp)){
- debug(DEBUG, "building a http get request message\n");
+ debug(DEBUG, "Building a http get request message\n");
profileContext->request_type = lassoHttpMethodRedirect;
profileContext->msg_url = lasso_node_export_to_query(profileContext->request,
profileContext->server->signature_method,
@@ -99,9 +108,10 @@ lasso_logout_build_response_msg(LassoLogout *logout)
profileContext = LASSO_PROFILE_CONTEXT(logout);
+ printf("get provider id %s\n", profileContext->remote_providerID);
provider = lasso_server_get_provider(profileContext->server, profileContext->remote_providerID);
if(provider==NULL){
- debug(ERROR, "Provider %s not found\n", profileContext->remote_providerID);
+ debug(ERROR, "Provider not found (ProviderID = %s)\n", profileContext->remote_providerID);
return(-2);
}
@@ -128,6 +138,12 @@ lasso_logout_build_response_msg(LassoLogout *logout)
return(0);
}
+void
+lasso_logout_destroy(LassoLogout *logout)
+{
+ g_object_unref(G_OBJECT(logout));
+}
+
gint
lasso_logout_init_request(LassoLogout *logout,
gchar *remote_providerID)
@@ -188,7 +204,10 @@ lasso_logout_init_request(LassoLogout *logout,
nameQualifier,
format);
- g_return_val_if_fail(profileContext->request!=NULL, -6);
+ if(profileContext->request==NULL){
+ debug(ERROR, "Error while creating the request\n");
+ return(-6);
+ }
return(0);
}
@@ -292,6 +311,7 @@ lasso_logout_process_response_msg(LassoLogout *logout,
switch(response_method){
case lassoHttpMethodSoap:
profileContext->response = lasso_logout_response_new_from_soap(response_msg);
+ break;
default:
debug(ERROR, "Unknown response method\n");
return(-3);
@@ -307,6 +327,18 @@ lasso_logout_process_response_msg(LassoLogout *logout,
}
/*****************************************************************************/
+/* overrided parent class methods */
+/*****************************************************************************/
+
+static void
+lasso_logout_finalize(LassoLogout *logout)
+{
+ debug(INFO, "Logout object 0x%x finalized ...\n", logout);
+
+ parent_class->finalize(LASSO_PROFILE_CONTEXT(logout));
+}
+
+/*****************************************************************************/
/* instance and class init functions */
/*****************************************************************************/
@@ -316,8 +348,13 @@ lasso_logout_instance_init(LassoLogout *logout)
}
static void
-lasso_logout_class_init(LassoLogoutClass *klass)
+lasso_logout_class_init(LassoLogoutClass *class)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS(class);
+
+ parent_class = g_type_class_peek_parent(class);
+ /* override parent class methods */
+ gobject_class->finalize = (void *)lasso_logout_finalize;
}
GType lasso_logout_get_type() {
diff --git a/lasso/id-ff/logout.h b/lasso/id-ff/logout.h
index 4eda1519..05159c6f 100644
--- a/lasso/id-ff/logout.h
+++ b/lasso/id-ff/logout.h
@@ -66,6 +66,8 @@ LASSO_EXPORT gint lasso_logout_build_request_msg (LassoLogout *log
LASSO_EXPORT gint lasso_logout_build_response_msg (LassoLogout *logout);
+LASSO_EXPORT void lasso_logout_destroy (LassoLogout *logout);
+
LASSO_EXPORT gint lasso_logout_init_request (LassoLogout *logout,
gchar *remote_providerID);
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index 1893d199..8fdea1ce 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -96,6 +96,7 @@ lasso_server_add_lasso_provider(LassoServer *server,
g_return_val_if_fail(LASSO_IS_SERVER(server), -1);
g_return_val_if_fail(LASSO_IS_PROVIDER(provider), -2);
+ debug(INFO, "Add a provider(%s)\n", lasso_provider_get_providerID(provider));
g_ptr_array_add(server->providers, provider);
}
@@ -113,6 +114,7 @@ lasso_server_add_provider(LassoServer *server,
provider = lasso_provider_new(metadata, public_key, ca_certificate);
g_return_val_if_fail(provider!=NULL, -5);
+ debug(INFO, "Add a provider(%s)\n", lasso_provider_get_providerID(provider));
g_ptr_array_add(server->providers, provider);
return(0);
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c
index 1bb55d71..e7f02835 100644
--- a/lasso/id-ff/user.c
+++ b/lasso/id-ff/user.c
@@ -59,7 +59,7 @@ lasso_user_add_assertion(LassoUser *user,
}
/* add the assertion */
- debug(DEBUG, "add assertion for %s\n", remote_providerID);
+ debug(DEBUG, "add an assertion for %s\n", remote_providerID);
g_hash_table_insert(user->assertions, g_strdup(remote_providerID), assertion);
return(0);
@@ -74,6 +74,7 @@ lasso_user_add_identity(LassoUser *user,
g_return_val_if_fail(remote_providerID!=NULL, -2);
g_return_val_if_fail(identity!=NULL, -3);
+ debug(INFO, "Add an identity for %s\n", remote_providerID);
g_hash_table_insert(user->identities, g_strdup(remote_providerID), identity);
return(0);
@@ -136,7 +137,7 @@ lasso_user_dump(LassoUser *user)
assertions_class->set_name(assertions_node, LASSO_USER_ASSERTIONS_NODE);
g_hash_table_foreach(user->assertions, lasso_user_dump_assertion, assertions_node);
user_class->add_child(user_node, assertions_node, FALSE);
-
+
/* dump the identities */
identities_node = lasso_node_new();
identities_class = LASSO_NODE_GET_CLASS(identities_node);
@@ -162,6 +163,9 @@ lasso_user_get_next_providerID(LassoUser *user)
{
g_return_val_if_fail(user!=NULL, NULL);
+ if(user->assertion_providerIDs->len==0)
+ return(NULL);
+
return(g_ptr_array_index(user->assertion_providerIDs, 0));
}
@@ -192,6 +196,7 @@ lasso_user_remove_assertion(LassoUser *user,
/* remove the remote provider id */
for(i = 0; i<user->assertion_providerIDs->len; i++){
if(xmlStrEqual(remote_providerID, g_ptr_array_index(user->assertion_providerIDs, i))){
+ debug(INFO, "Remove assertion for %s\n", remote_providerID);
g_ptr_array_remove_index(user->assertion_providerIDs, i);
break;
}
@@ -277,9 +282,12 @@ lasso_user_new_from_dump(gchar *dump)
/* get user */
user_node = lasso_node_new_from_dump(dump);
+ if(user_node==NULL){
+ debug(WARNING, "Can' create a user from dump\n");
+ return(NULL);
+ }
/* get assertions */
- debug(DEBUG, "Get assertions\n");
assertions_node = lasso_node_get_child(user_node, LASSO_USER_ASSERTIONS_NODE, NULL);
if(assertions_node){
assertions_class = LASSO_NODE_GET_CLASS(assertions_node);
@@ -294,12 +302,12 @@ lasso_user_new_from_dump(gchar *dump)
remote_providerID = lasso_node_get_attr_value(assertion_node, LASSO_USER_REMOTE_PROVIDERID_NODE);
lasso_user_add_assertion(user, remote_providerID, assertion_node);
}
+
assertion_xmlNode = assertion_xmlNode->next;
}
}
/* identities*/
- debug(DEBUG, "Get identities\n");
identities_node = lasso_node_get_child(user_node, LASSO_USER_IDENTITIES_NODE, NULL);
if(identities_node){
identities_class = LASSO_NODE_GET_CLASS(identities_node);
@@ -328,15 +336,18 @@ lasso_user_new_from_dump(gchar *dump)
lasso_identity_set_remote_nameIdentifier(identity, nameIdentifier_node);
}
- debug(DEBUG, "Add a new identity %s\n", remote_providerID);
lasso_user_add_identity(user, remote_providerID, identity);
+ //lasso_node_destroy(identity_node);
}
identity_xmlNode = identity_xmlNode->next;
}
-
+
+ //lasso_node_destroy(identities_node);
}
+ //lasso_node_destroy(user_node);
+
return(user);
}
diff --git a/python/environs/py_user.c b/python/environs/py_user.c
index 0d359d8c..5d26b829 100644
--- a/python/environs/py_user.c
+++ b/python/environs/py_user.c
@@ -59,3 +59,65 @@ PyObject *user_new_from_dump(PyObject *self, PyObject *args) {
return (LassoUser_wrap(user));
}
+
+PyObject *user_dump(PyObject *self, PyObject *args) {
+ PyObject *user_obj;
+ gchar *dump;
+
+ if (CheckArgs(args, "O:user_dump")) {
+ if(!PyArg_ParseTuple(args, (char *) "O:user_dump", &user_obj))
+ return NULL;
+ }
+ else return NULL;
+
+ dump = lasso_user_dump(LassoUser_get(user_obj));
+
+ return (charPtrConst_wrap(dump));
+}
+
+PyObject *user_get_assertion(PyObject *self, PyObject *args) {
+ PyObject *user_obj;
+ LassoNode *assertion_node;
+ gchar *remote_providerID;
+
+ if (CheckArgs(args, "OS:user_get_assertion")) {
+ if(!PyArg_ParseTuple(args, (char *) "Os:user_get_assertion", &user_obj, &remote_providerID))
+ return NULL;
+ }
+ else return NULL;
+
+ assertion_node = lasso_user_get_assertion(LassoUser_get(user_obj), remote_providerID);
+
+ return (LassoNode_wrap(assertion_node));
+}
+
+PyObject *user_get_next_providerID(PyObject *self, PyObject *args) {
+ PyObject *user_obj;
+ gchar *remote_providerID;
+
+ if (CheckArgs(args, "O:user_get_next_providerID")) {
+ if(!PyArg_ParseTuple(args, (char *) "O:user_get_next_providerID", &user_obj, &remote_providerID))
+ return NULL;
+ }
+ else return NULL;
+
+ remote_providerID = lasso_user_get_next_providerID(LassoUser_get(user_obj));
+
+ return (charPtr_wrap(remote_providerID));
+}
+
+PyObject *user_remove_assertion(PyObject *self, PyObject *args) {
+ PyObject *user_obj;
+ gchar *remote_providerID;
+ int code;
+
+ if (CheckArgs(args, "OS:user_remove_assertion")) {
+ if(!PyArg_ParseTuple(args, (char *) "Os:user_remove_assertion", &user_obj, &remote_providerID))
+ return NULL;
+ }
+ else return NULL;
+
+ code = lasso_user_remove_assertion(LassoUser_get(user_obj), remote_providerID);
+
+ return (int_wrap(code));
+}
diff --git a/python/environs/py_user.h b/python/environs/py_user.h
index 21543209..cdde6d04 100644
--- a/python/environs/py_user.h
+++ b/python/environs/py_user.h
@@ -38,5 +38,9 @@ PyObject *LassoUser_wrap(LassoUser *user);
PyObject *user_new(PyObject *self, PyObject *args);
PyObject *user_new_from_dump(PyObject *self, PyObject *args);
+PyObject *user_dump(PyObject *self, PyObject *args);
+PyObject *user_get_assertion(PyObject *self, PyObject *args);
+PyObject *user_get_next_providerID(PyObject *self, PyObject *args);
+PyObject *user_remove_assertion(PyObject *self, PyObject *args);
#endif /* __PYLASSO_PY_USER_H__ */
diff --git a/python/lasso.py b/python/lasso.py
index 2ef17ad2..5d886bd1 100644
--- a/python/lasso.py
+++ b/python/lasso.py
@@ -858,8 +858,16 @@ class User:
return lassomod.user_dump(self)
def destroy(self):
- lassomod.server_destroy(self)
+ lassomod.user_destroy(self)
+ def get_assertion(self):
+ pass
+
+ def get_next_providerID(self):
+ return lassomod.user_get_next_providerID(self)
+
+ def remove_assertion(self, providerID):
+ return lassomod.user_remove_assertion(self, providerID)
loginProtocolProfileBrwsArt = 1
loginProtocolProfileBrwsPost = 2
diff --git a/python/lassomod.c b/python/lassomod.c
index 8e8f34e6..c916df07 100644
--- a/python/lassomod.c
+++ b/python/lassomod.c
@@ -235,9 +235,12 @@ static PyMethodDef lasso_methods[] = {
{"server_dump", server_dump, METH_VARARGS},
/* py_user.h */
- {"user_new", user_new, METH_VARARGS},
- {"user_new_from_dump", user_new_from_dump, METH_VARARGS},
-
+ {"user_new", user_new, METH_VARARGS},
+ {"user_new_from_dump", user_new_from_dump, METH_VARARGS},
+ {"user_dump", user_dump, METH_VARARGS},
+ {"user_get_assertion", user_get_assertion, METH_VARARGS},
+ {"user_get_next_providerID", user_get_next_providerID, METH_VARARGS},
+ {"user_remove_assertion", user_remove_assertion, METH_VARARGS},
{NULL, NULL} /* End of Methods Sentinel */
};