diff options
| author | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-18 23:35:59 +0000 |
|---|---|---|
| committer | Nicolas Clapies <nclapies@entrouvert.com> | 2004-07-18 23:35:59 +0000 |
| commit | 244c4e278f655d2434f3b65158a43816ac1a110d (patch) | |
| tree | bd2346719b66bdad7e9aac9f61a7fee7fbcfcffb | |
| parent | 721642847cd1acf399f191d1bb205d7d6466f4fb (diff) | |
| download | lasso-244c4e278f655d2434f3b65158a43816ac1a110d.tar.gz lasso-244c4e278f655d2434f3b65158a43816ac1a110d.tar.xz lasso-244c4e278f655d2434f3b65158a43816ac1a110d.zip | |
*** empty log message ***
| -rw-r--r-- | lasso/id-ff/federation_termination.c | 10 | ||||
| -rw-r--r-- | lasso/id-ff/federation_termination.h | 2 | ||||
| -rw-r--r-- | lasso/id-ff/logout.c | 19 | ||||
| -rw-r--r-- | python/environs/py_federation_termination.c | 133 | ||||
| -rw-r--r-- | python/environs/py_federation_termination.h | 48 | ||||
| -rw-r--r-- | python/lassomod.c | 9 | ||||
| -rwxr-xr-x | python/setup.py | 9 |
7 files changed, 222 insertions, 8 deletions
diff --git a/lasso/id-ff/federation_termination.c b/lasso/id-ff/federation_termination.c index d9c996ab..47e00af6 100644 --- a/lasso/id-ff/federation_termination.c +++ b/lasso/id-ff/federation_termination.c @@ -67,10 +67,20 @@ lasso_federation_termination_build_notification_msg(LassoFederationTermination * profileContext->server->private_key); profileContext->msg_body = NULL; } + else{ + debug(ERROR, "Unknown protocol profile\n"); + return(-4); + } return(0); } +void +lasso_federation_termination_destroy(LassoFederationTermination *defederation) +{ + g_object_unref(G_OBJECT(defederation)); +} + gchar * lasso_federation_termination_dump(LassoFederationTermination *defederation) { diff --git a/lasso/id-ff/federation_termination.h b/lasso/id-ff/federation_termination.h index 133656af..bba9b617 100644 --- a/lasso/id-ff/federation_termination.h +++ b/lasso/id-ff/federation_termination.h @@ -62,6 +62,8 @@ LASSO_EXPORT LassoFederationTermination *lasso_federation_termination_new LASSO_EXPORT gint lasso_federation_termination_build_notification_msg (LassoFederationTermination *defederation); +LASSO_EXPORT void lasso_federation_termination_destroy (LassoFederationTermination *defederation); + LASSO_EXPORT gchar* lasso_federation_termination_dump (LassoFederationTermination *defederation); LASSO_EXPORT gint lasso_federation_termination_init_notification (LassoFederationTermination *defederation, diff --git a/lasso/id-ff/logout.c b/lasso/id-ff/logout.c index 251f6887..9b3784fc 100644 --- a/lasso/id-ff/logout.c +++ b/lasso/id-ff/logout.c @@ -255,31 +255,39 @@ lasso_logout_process_request_msg(LassoLogout *logout, lassoSamlStatusCodeSuccess, profileContext->request); - g_return_val_if_fail(profileContext->response!=NULL, -4); + if(profileContext->response==NULL){ + debug(ERROR, "Error while building response\n"); + return(-4); + } statusCode = lasso_node_get_child(profileContext->response, "StatusCode", NULL); statusCode_class = LASSO_NODE_GET_CLASS(statusCode); nameIdentifier = lasso_node_get_child(profileContext->request, "NameIdentifier", NULL); if(nameIdentifier==NULL){ + debug(ERROR, "No name identifier found in logout request\n"); statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); return(-5); } remote_providerID = lasso_node_get_child_content(profileContext->request, "ProviderID", NULL); + if(remote_providerID==NULL){ + debug(ERROR, "No provider id found in logout request\n"); + return(-6); + } /* Verify federation */ identity = lasso_user_get_identity(profileContext->user, remote_providerID); if(identity==NULL){ debug(WARNING, "No identity for %s\n", remote_providerID); statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); - return(-6); + return(-7); } if(lasso_identity_verify_nameIdentifier(identity, nameIdentifier)==FALSE){ debug(WARNING, "No name identifier for %s\n", remote_providerID); statusCode_class->set_prop(statusCode, "Value", lassoLibStatusCodeFederationDoesNotExist); - return(-7); + return(-8); } /* verify authentication (if ok, delete assertion) */ @@ -287,7 +295,7 @@ lasso_logout_process_request_msg(LassoLogout *logout, if(assertion==NULL){ debug(WARNING, "%s has no assertion\n", remote_providerID); statusCode_class->set_prop(statusCode, "Value", lassoSamlStatusCodeRequestDenied); - return(-8); + return(-9); } return(0); @@ -312,6 +320,9 @@ lasso_logout_process_response_msg(LassoLogout *logout, case lassoHttpMethodSoap: profileContext->response = lasso_logout_response_new_from_soap(response_msg); break; + case lassoHttpMethodRedirect: + profileContext->response = lasso_logout_response_new_from_query(response_msg); + break; default: debug(ERROR, "Unknown response method\n"); return(-3); diff --git a/python/environs/py_federation_termination.c b/python/environs/py_federation_termination.c new file mode 100644 index 00000000..a9e9718d --- /dev/null +++ b/python/environs/py_federation_termination.c @@ -0,0 +1,133 @@ +/* $Id$ + * + * PyLasso -- Python bindings for Lasso library + * + * Copyright (C) 2004 Entr'ouvert + * http://lasso.labs.libre-entreprise.org + * + * Authors: Valery Febvre <vfebvre@easter-eggs.com> + * Nicolas Clapies <nclapies@entrouvert.com> + * + * 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 "../lassomod.h" + +#include "py_federation_termination.h" + + +PyObject *LassoFederationTermination_wrap(LassoFederationTermination *federation_termination) { + PyObject *ret; + + if (federation_termination == NULL) { + Py_INCREF(Py_None); + return (Py_None); + } + ret = PyCObject_FromVoidPtrAndDesc((void *) federation_termination, + (char *) "LassoFederationTermination *", NULL); + return (ret); +} + +/******************************************************************************/ + +PyObject *federation_termination_new(PyObject *self, PyObject *args) { + PyObject *server_obj, *user_obj; + LassoFederationTermination *federation_termination; + gint provider_type; + + if (CheckArgs(args, "OOI:federation_termination_new")) { + if(!PyArg_ParseTuple(args, (char *) "OOi:federation_termination_new", + &server_obj, &user_obj, &provider_type)) + return NULL; + } + else return NULL; + + federation_termination = lasso_federation_termination_new(LassoServer_get(server_obj), + LassoUser_get(user_obj), + + provider_type); + + return (LassoFederationTermination_wrap(federation_termination)); +} + +PyObject *federation_termination_build_notification_msg(PyObject *self, PyObject *args) { + PyObject *federation_termination_obj; + gint codeError; + + if (CheckArgs(args, "O:federation_termination_build_notification_msg")) { + if(!PyArg_ParseTuple(args, (char *) "O:federation_termination_build_notification_msg", + &federation_termination_obj)) + return NULL; + } + else return NULL; + + codeError = lasso_federation_termination_build_notification_msg(LassoFederationTermination_get(federation_termination_obj)); + + return(int_wrap(codeError)); +} + +PyObject *federation_termination_destroy(PyObject *self, PyObject *args){ + PyObject *federation_termination_obj; + + if (CheckArgs(args, "O:federation_termination_destroy")) { + if(!PyArg_ParseTuple(args, (char *) "O:federation_termination_destroy", + &federation_termination_obj)) + return NULL; + } + else return NULL; + + lasso_federation_termination_destroy(LassoFederationTermination_get(federation_termination_obj)); + + Py_INCREF(Py_None); + return(Py_None); +} + +PyObject *federation_termination_init_notification(PyObject *self, PyObject *args) { + PyObject *federation_termination_obj; + gchar *remote_providerID; + gint codeError; + + if (CheckArgs(args, "OS:federation_termination_init_notification")) { + if(!PyArg_ParseTuple(args, (char *) "Os:federation_termination_init_notification", + &federation_termination_obj, &remote_providerID)) + return NULL; + } + else return NULL; + + codeError = lasso_federation_termination_init_notification(LassoFederationTermination_get(federation_termination_obj), + remote_providerID); + + return(int_wrap(codeError)); +} + +PyObject *federation_termination_process_notification_msg(PyObject *self, PyObject *args) { + PyObject *federation_termination_obj; + gchar *notification_msg; + gint notification_method; + gint codeError; + + if (CheckArgs(args, "OSI:federation_termination_process_notification_msg")) { + if(!PyArg_ParseTuple(args, (char *) "Osi:federation_termination_process_notification_msg", + &federation_termination_obj, ¬ification_msg, ¬ification_method)) + return NULL; + } + else return NULL; + + codeError = lasso_federation_termination_process_notification_msg(LassoFederationTermination_get(federation_termination_obj), + notification_msg, notification_method); + + return(int_wrap(codeError)); +} + diff --git a/python/environs/py_federation_termination.h b/python/environs/py_federation_termination.h new file mode 100644 index 00000000..cc1ebefb --- /dev/null +++ b/python/environs/py_federation_termination.h @@ -0,0 +1,48 @@ +/* $Id$ + * + * PyLasso -- Python bindings for Lasso library + * + * Copyright (C) 2004 Entr'ouvert + * http://lasso.labs.libre-entreprise.org + * + * Authors: Valery Febvre <vfebvre@easter-eggs.com> + * Nicolas Clapies <nclapies@entrouvert.com> + * + * 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 __PYLASSO_PY_FEDERATION_TERMINATION_H__ +#define __PYLASSO_PY_FEDERATION_TERMINATION_H__ + +#include <lasso/environs/federation_termination.h> + +#include "py_server.h" +#include "py_user.h" + +typedef struct { + PyObject_HEAD + LassoFederationTermination *obj; +} LassoFederationTermination_object; + +#define LassoFederationTermination_get(v) (((v) == Py_None) ? NULL : (((LassoFederationTermination_object *)(PyObject_GetAttr(v, PyString_FromString("_o"))))->obj)) +PyObject *LassoFederationTermination_wrap(LassoFederationTermination *federation_termination); + +PyObject *federation_termination_new(PyObject *self, PyObject *args); +PyObject *federation_termination_build_notification_msg(PyObject *self, PyObject *args); +PyObject *federation_termination_destroy(PyObject *self, PyObject *args); +PyObject *federation_termination_init_notification(PyObject *self, PyObject *args); +PyObject *federation_termination_process_notification_msg(PyObject *self, PyObject *args); + +#endif /* __PYLASSO_PY_FEDERATION_TERMINATION_H__ */ diff --git a/python/lassomod.c b/python/lassomod.c index bdeef7bc..8a10fe21 100644 --- a/python/lassomod.c +++ b/python/lassomod.c @@ -53,6 +53,7 @@ #include "protocols/elements/py_assertion.h" #include "protocols/elements/py_authentication_statement.h" +#include "environs/py_federation_termination.h" #include "environs/py_login.h" #include "environs/py_logout.h" #include "environs/py_server.h" @@ -201,6 +202,14 @@ static PyMethodDef lasso_methods[] = { {"authentication_statement_new", authentication_statement_new, METH_VARARGS}, /* environs */ + + /* py_federation_termination.h */ + {"federation_termination_new", federation_termination_new, METH_VARARGS}, + {"federation_termination_build_notification_msg", federation_termination_build_notification_msg, METH_VARARGS}, + {"federation_termination_destroy", federation_termination_destroy, METH_VARARGS}, + {"federation_termination_init_notification", federation_termination_init_notification, METH_VARARGS}, + {"federation_termination_process_notification_msg", federation_termination_process_notification_msg, METH_VARARGS}, + /* py_login.h */ {"login_getattr", login_getattr, METH_VARARGS}, {"login_new", login_new, METH_VARARGS}, diff --git a/python/setup.py b/python/setup.py index ba1cf784..33bf5a35 100755 --- a/python/setup.py +++ b/python/setup.py @@ -184,10 +184,10 @@ extract_cflags(xmlsec1_cflags) extract_libs(xmlsec1_libs) # FIXME : cflags & libs for lasso -include_dirs.append('..') -library_dirs.append('../lasso/.libs') -#include_dirs.append('/usr/local/include') -#library_dirs.append('/usr/local/lib') +#include_dirs.append('..') +#library_dirs.append('../lasso/.libs') +include_dirs.append('/usr/local/include') +library_dirs.append('/usr/local/lib') libraries.append('lasso') em = Extension("lassomod", @@ -216,6 +216,7 @@ em = Extension("lassomod", "protocols/py_register_name_identifier_response.c", "protocols/elements/py_assertion.c", "protocols/elements/py_authentication_statement.c", + "environs/py_federation_termination.c", "environs/py_login.c", "environs/py_logout.c", "environs/py_server.c", |
