summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Clapies <nclapies@entrouvert.com>2004-07-18 23:35:59 +0000
committerNicolas Clapies <nclapies@entrouvert.com>2004-07-18 23:35:59 +0000
commit244c4e278f655d2434f3b65158a43816ac1a110d (patch)
treebd2346719b66bdad7e9aac9f61a7fee7fbcfcffb
parent721642847cd1acf399f191d1bb205d7d6466f4fb (diff)
downloadlasso-244c4e278f655d2434f3b65158a43816ac1a110d.tar.gz
lasso-244c4e278f655d2434f3b65158a43816ac1a110d.tar.xz
lasso-244c4e278f655d2434f3b65158a43816ac1a110d.zip
*** empty log message ***
-rw-r--r--lasso/id-ff/federation_termination.c10
-rw-r--r--lasso/id-ff/federation_termination.h2
-rw-r--r--lasso/id-ff/logout.c19
-rw-r--r--python/environs/py_federation_termination.c133
-rw-r--r--python/environs/py_federation_termination.h48
-rw-r--r--python/lassomod.c9
-rwxr-xr-xpython/setup.py9
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, &notification_msg, &notification_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",