diff options
| author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-16 11:02:04 +0000 |
|---|---|---|
| committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-16 11:02:04 +0000 |
| commit | aa4af2d1096e8f54edfc221863a02c4d6750e464 (patch) | |
| tree | e8e435d495d2e552dc6e9849e62b99ed313d6a8b | |
| parent | 93f6823e610c97f5bf54eff96a71318cfc20bd3a (diff) | |
| download | lasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.tar.gz lasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.tar.xz lasso-aa4af2d1096e8f54edfc221863a02c4d6750e464.zip | |
*** empty log message ***
| -rw-r--r-- | lasso/Attic/protocols/identity.c | 4 | ||||
| -rw-r--r-- | lasso/id-ff/federation_termination.h | 2 | ||||
| -rw-r--r-- | lasso/id-ff/logout.c | 51 | ||||
| -rw-r--r-- | lasso/id-ff/logout.h | 2 | ||||
| -rw-r--r-- | lasso/id-ff/server.c | 2 | ||||
| -rw-r--r-- | lasso/id-ff/user.c | 23 | ||||
| -rw-r--r-- | python/environs/py_user.c | 62 | ||||
| -rw-r--r-- | python/environs/py_user.h | 4 | ||||
| -rw-r--r-- | python/lasso.py | 10 | ||||
| -rw-r--r-- | python/lassomod.c | 9 |
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 */ }; |
