diff options
| author | Nicolas Clapies <nclapies@entrouvert.com> | 2005-02-24 16:38:46 +0000 |
|---|---|---|
| committer | Nicolas Clapies <nclapies@entrouvert.com> | 2005-02-24 16:38:46 +0000 |
| commit | d5c84febbb9863fb833bf3a6f25ba1b5c105d75c (patch) | |
| tree | b08a4a7c4ea8df47990b72ff4c13469303694d13 | |
| parent | 492e69a25a33c6acd51671ae934e734ff9148578 (diff) | |
| download | lasso-d5c84febbb9863fb833bf3a6f25ba1b5c105d75c.tar.gz lasso-d5c84febbb9863fb833bf3a6f25ba1b5c105d75c.tar.xz lasso-d5c84febbb9863fb833bf3a6f25ba1b5c105d75c.zip | |
Added support of cyrus libsasl in id-wsf authentication service.
| -rw-r--r-- | lasso/id-wsf/Makefile.am | 1 | ||||
| -rw-r--r-- | lasso/id-wsf/authentication.h | 25 | ||||
| -rw-r--r-- | lasso/xml/sa_sasl_response.c | 39 | ||||
| -rw-r--r-- | lasso/xml/strings.h | 8 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 4 | ||||
| -rw-r--r-- | python/Makefile.am | 3 | ||||
| -rw-r--r-- | swig/Lasso-wsf.i | 311 |
7 files changed, 380 insertions, 11 deletions
diff --git a/lasso/id-wsf/Makefile.am b/lasso/id-wsf/Makefile.am index 64c98248..251b8972 100644 --- a/lasso/id-wsf/Makefile.am +++ b/lasso/id-wsf/Makefile.am @@ -3,6 +3,7 @@ liblassoincludedir = $(includedir)/lasso/id-wsf INCLUDES = \ -I$(top_srcdir) \ -I$(top_srcdir)/lasso \ + $(SASL_CFLAGS) \ $(LASSO_CORE_CFLAGS) \ -DG_LOG_DOMAIN=\"lasso\" diff --git a/lasso/id-wsf/authentication.h b/lasso/id-wsf/authentication.h index dbc770a6..c99d7811 100644 --- a/lasso/id-wsf/authentication.h +++ b/lasso/id-wsf/authentication.h @@ -30,6 +30,8 @@ extern "C" { #endif /* __cplusplus */ +#include <sasl.h> + #include <lasso/id-wsf/wsf_profile.h> #include <lasso/xml/disco_description.h> @@ -48,9 +50,19 @@ typedef struct _LassoAuthentication LassoAuthentication; typedef struct _LassoAuthenticationClass LassoAuthenticationClass; typedef struct _LassoAuthenticationPrivate LassoAuthenticationPrivate; +typedef enum { + LASSO_SASL_OK = SASL_OK, /* 0 */ + LASSO_SASL_CONTINUE = SASL_CONTINUE, /* 1 */ + LASSO_SASL_INTERACT = SASL_INTERACT, /* 2 */ +} LassoSaslType; + struct _LassoAuthentication { LassoWsfProfile parent; + /* The SASL context kept for the life of the connection */ + sasl_conn_t *connection; /* FIXME : implement dispose method to release the connection */ + sasl_interact_t **client_interact; + /*< private >*/ LassoAuthenticationPrivate *private_data; }; @@ -63,9 +75,16 @@ LASSO_EXPORT GType lasso_authentication_get_type(void); LASSO_EXPORT LassoAuthentication* lasso_authentication_new(LassoServer *server); +LASSO_EXPORT gint lasso_authentication_client_start(LassoAuthentication *authentication); + +LASSO_EXPORT gint lasso_authentication_client_step(LassoAuthentication *authentication); + +LASSO_EXPORT char *lasso_authentication_get_mechanism_list(LassoAuthentication *authentication); + LASSO_EXPORT gint lasso_authentication_init_request(LassoAuthentication *authentication, LassoDiscoDescription *description, - const gchar *mechanism); + const char *mechanisms, + sasl_callback_t *callbacks); LASSO_EXPORT gint lasso_authentication_process_request_msg(LassoAuthentication *authentication, const gchar *soap_msg); @@ -73,6 +92,10 @@ LASSO_EXPORT gint lasso_authentication_process_request_msg(LassoAuthentication * LASSO_EXPORT gint lasso_authentication_process_response_msg(LassoAuthentication *authentication, const gchar *soap_msg); +LASSO_EXPORT gint lasso_authentication_server_start(LassoAuthentication *authentication); + +LASSO_EXPORT gint lasso_authentication_server_step(LassoAuthentication *authentication); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/lasso/xml/sa_sasl_response.c b/lasso/xml/sa_sasl_response.c index fb2ed17a..39a8c822 100644 --- a/lasso/xml/sa_sasl_response.c +++ b/lasso/xml/sa_sasl_response.c @@ -75,6 +75,34 @@ static struct XmlSnippet schema_snippets[] = { { NULL, 0, 0} }; +static LassoNodeClass *parent_class = NULL; + +static void +insure_namespace(xmlNode *xmlnode, xmlNs *ns) +{ + xmlNode *t = xmlnode->children; + + xmlSetNs(xmlnode, ns); + while (t) { + if (t->type == XML_ELEMENT_NODE && t->ns == NULL) + insure_namespace(t, ns); + t = t->next; + } +} + +static xmlNode* +get_xmlNode(LassoNode *node, gboolean lasso_dump) +{ + xmlNode *xmlnode; + xmlNs *ns; + + xmlnode = parent_class->get_xmlNode(node, lasso_dump); + ns = xmlNewNs(xmlnode, LASSO_SA_HREF, LASSO_SA_PREFIX); + insure_namespace(xmlnode, ns); + + return xmlnode; +} + /*****************************************************************************/ /* instance and class init functions */ /*****************************************************************************/ @@ -95,12 +123,13 @@ instance_init(LassoSaSaslResponse *node) static void class_init(LassoSaSaslResponseClass *klass) { - LassoNodeClass *nclass = LASSO_NODE_CLASS(klass); + LassoNodeClass *nodeClass = LASSO_NODE_CLASS(klass); - nclass->node_data = g_new0(LassoNodeClassData, 1); - lasso_node_class_set_nodename(nclass, "SASLResponse"); - lasso_node_class_set_ns(nclass, LASSO_SA_HREF, LASSO_SA_PREFIX); - lasso_node_class_add_snippets(nclass, schema_snippets); + parent_class = g_type_class_peek_parent(klass); + nodeClass->get_xmlNode = get_xmlNode; + nodeClass->node_data = g_new0(LassoNodeClassData, 1); + lasso_node_class_set_nodename(nodeClass, "SASLResponse"); + lasso_node_class_add_snippets(nodeClass, schema_snippets); } GType diff --git a/lasso/xml/strings.h b/lasso/xml/strings.h index 1a15b801..e50b5f7b 100644 --- a/lasso/xml/strings.h +++ b/lasso/xml/strings.h @@ -157,6 +157,8 @@ #define LASSO_SA_HREF "urn:liberty:sa:2004-04" #define LASSO_SA_PREFIX "sa" +#define LASSO_SA_SASL_SERVICE_NAME "idwsf" + /* Interaction Service (interact attribute of is:UserInteraction element ) */ #define LASSO_IS_INTERACT_ATTR_INTERACT_IF_NEEDED "is:interactIfNeeded" #define LASSO_IS_INTERACT_ATTR_DO_NOT_INTERACT "is:doNotInteract" @@ -186,9 +188,9 @@ #define LASSO_DST_STATUS_CODE_TIME_OUT "TimeOut" #define LASSO_DST_STATUS_CODE_UNEXPECTED_ERROR "UnexpectedError" -#define LASSO_SA_STATUS_CODE_CONTINUE "sa:continue" -#define LASSO_SA_STATUS_CODE_ABORT "sa:abort" -#define LASSO_SA_STATUS_CODE_OK "sa:OK" +#define LASSO_SA_STATUS_CODE_CONTINUE "continue" +#define LASSO_SA_STATUS_CODE_ABORT "abort" +#define LASSO_SA_STATUS_CODE_OK "OK" /*****************************************************************************/ /* METADATA */ diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index 52e084c2..fff3453e 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -727,6 +727,8 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode) prefix = "Lib"; if (strcmp(xmlnode->ns->href, LASSO_LASSO_HREF) == 0) prefix = ""; + if (strcmp(xmlnode->ns->href, LASSO_SA_HREF) == 0) + prefix = "Sa"; if (strcmp(xmlnode->ns->href, LASSO_SAML_ASSERTION_HREF) == 0) prefix = "Saml"; if (strcmp(xmlnode->ns->href, LASSO_SAML_PROTOCOL_HREF) == 0) @@ -743,6 +745,8 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode) prefix = "Utility"; if (strcmp(prefix, "Disco") == 0 && strcmp(xmlnode->name, "Status") == 0) prefix = "Utility"; + if (strcmp(prefix, "Sa") == 0 && strcmp(xmlnode->name, "Status") == 0) + prefix = "Utility"; xsitype = xmlGetNsProp(xmlnode, "type", LASSO_XSI_HREF); if (xsitype) { diff --git a/python/Makefile.am b/python/Makefile.am index 603ed067..3dbf2047 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -1,4 +1,5 @@ -INCLUDES = -I$(top_srcdir) +INCLUDES = -I$(top_srcdir) \ + $(SASL_CFLAGS) pythondir= $(PY_SITE_PACKAGES) python_DATA = lasso.py diff --git a/swig/Lasso-wsf.i b/swig/Lasso-wsf.i index 9437c4f2..74337a21 100644 --- a/swig/Lasso-wsf.i +++ b/swig/Lasso-wsf.i @@ -25,7 +25,7 @@ */ %{ - +#include <lasso/id-wsf/authentication.h> #include <lasso/id-wsf/discovery.h> #include <lasso/id-wsf/interaction_profile_service.h> #include <lasso/id-wsf/profile_service.h> @@ -46,6 +46,8 @@ #include <lasso/xml/is_select.h> #include <lasso/xml/is_text.h> #include <lasso/xml/is_user_interaction.h> +#include <lasso/xml/sa_sasl_request.h> +#include <lasso/xml/sa_sasl_response.h> %} @@ -122,6 +124,19 @@ #define LASSO_DST_STATUS_CODE_UNEXPECTED_ERROR "UnexpectedError" +/* Sasl cyrus code */ +#ifndef SWIGPHP4 +%rename(SASL_OK) LASSO_SASL_OK; +%rename(SASL_CONTINUE) LASSO_SASL_CONTINUE; +%rename(SASL_INTERACT) LASSO_SASL_INTERACT; +#endif +typedef enum { + LASSO_SASL_OK = SASL_OK, + LASSO_SASL_CONTINUE = SASL_CONTINUE, + LASSO_SASL_INTERACT = SASL_INTERACT, +} LassoSaslType; + + /*********************************************************************** *********************************************************************** * XML Elements in Discovery Namespace @@ -2400,6 +2415,176 @@ typedef struct { %} +/*********************************************************************** + *********************************************************************** + * XML Elements in Sa Namespace + *********************************************************************** + ***********************************************************************/ + +/*********************************************************************** + * sa:SaSaslRequest + ***********************************************************************/ + + +#ifndef SWIGPHP4 +%rename(SaSaslRequest) LassoSaSaslRequest; +#endif +typedef struct { + /* Attributes */ + + char *mechanism; + + char *authzID; + + char *advisoryAuthnID; + + char *id; + +} LassoSaSaslRequest; +%extend LassoSaSaslRequest { + /* Attributes */ +#ifndef SWIGPHP4 + %rename(data) Data; +#endif + %newobject Data_get; + LassoNodeList *Data; + +#ifndef SWIGPHP4 + %rename(requestAuthnContext) RequestAuthnContext; +#endif + %newobject RequestAuthnContext_get; + LassoNodeList *RequestAuthnContext; + + /* Constructor, Destructor & Static Methods */ + + LassoSaSaslRequest(char *mechanism); + + ~LassoSaSaslRequest(); + + /* Methods inherited from LassoNode */ + + %newobject dump; + char *dump(); +} + +%{ + +/* Attributes Implementations */ +/* Data */ +#define LassoSaSaslRequest_get_Data(self) get_node_list((self)->Data) +#define LassoSaSaslRequest_Data_get(self) get_node_list((self)->Data) +#define LassoSaSaslRequest_set_Data(self, value) set_node_list(&(self)->Data, (value)) +#define LassoSaSaslRequest_Data_set(self, value) set_node_list(&(self)->Data, (value)) + +/* RequestAuthnContext */ +#define LassoSaSaslRequest_get_RequestAuthnContext(self) get_node((self)->RequestAuthnContext) +#define LassoSaSaslRequest_RequestAuthnContext_get(self) get_node((self)->RequestAuthnContext) +#define LassoSaSaslRequest_set_RequestAuthnContext(self, value) set_node((gpointer *) &(self)->RequestAuthnContext, (value)) +#define LassoSaSaslRequest_RequestAuthnContext_set(self, value) set_node((gpointer *) &(self)->RequestAuthnContext, (value)) + +/* Constructors, destructors & static methods implementations */ + +#define new_LassoSaSaslRequest lasso_sa_sasl_request_new +#define delete_LassoSaSaslRequest(self) lasso_node_destroy(LASSO_NODE(self)) + +/* Implementations of methods inherited from LassoNode */ + +#define LassoSaSaslRequest_dump(self) lasso_node_dump(LASSO_NODE(self)) + +%} + +/*********************************************************************** + * sa:SaSaslResponse + ***********************************************************************/ + + +#ifndef SWIGPHP4 +%rename(SaSaslResponse) LassoSaSaslResponse; +#endif +typedef struct { + /* Attributes */ + + char *serverMechanism; + + char *id; + +} LassoSaSaslResponse; +%extend LassoSaSaslResponse { + /* Attributes */ +#ifndef SWIGPHP4 + %rename(data) Data; +#endif + %newobject Data_get; + LassoNodeList *Data; + +#ifndef SWIGPHP4 + %rename(passwordTransforms) PasswordTransforms; +#endif + %newobject PasswordTransforms_get; + LassoNodeList *PasswordTransforms; + +#ifndef SWIGPHP4 + %rename(resourceOffering) ResourceOffering; +#endif + %newobject ResourceOffering_get; + LassoNodeList *ResourceOffering; + +#ifndef SWIGPHP4 + %rename(status) Status; +#endif + %newobject Status_get; + LassoUtilityStatus *Status; + + /* Constructor, Destructor & Static Methods */ + + LassoSaSaslResponse(LassoUtilityStatus *status); + + ~LassoSaSaslResponse(); + + /* Methods inherited from LassoNode */ + + %newobject dump; + char *dump(); +} + +%{ + +/* Attributes Implementations */ +/* Data */ +#define LassoSaSaslResponse_get_Data(self) get_node_list((self)->Data) +#define LassoSaSaslResponse_Data_get(self) get_node_list((self)->Data) +#define LassoSaSaslResponse_set_Data(self, value) set_node_list(&(self)->Data, (value)) +#define LassoSaSaslResponse_Data_set(self, value) set_node_list(&(self)->Data, (value)) + +/* PasswordTransforms */ +#define LassoSaSaslResponse_get_PasswordTransforms(self) get_node_list((self)->PasswordTransforms) +#define LassoSaSaslResponse_PasswordTransforms_get(self) get_node_list((self)->PasswordTransforms) +#define LassoSaSaslResponse_set_PasswordTransforms(self, value) set_node_list(&(self)->PasswordTransforms, (value)) +#define LassoSaSaslResponse_PasswordTransforms_set(self, value) set_node_list(&(self)->PasswordTransforms, (value)) + +/* ResourceOffering */ +#define LassoSaSaslResponse_get_ResourceOffering(self) get_node_list((self)->ResourceOffering) +#define LassoSaSaslResponse_ResourceOffering_get(self) get_node_list((self)->ResourceOffering) +#define LassoSaSaslResponse_set_ResourceOffering(self, value) set_node_list(&(self)->ResourceOffering, (value)) +#define LassoSaSaslResponse_ResourceOffering_set(self, value) set_node_list(&(self)->ResourceOffering, (value)) + +/* Status */ +#define LassoSaSaslResponse_get_Status(self) get_node((self)->Status) +#define LassoSaSaslResponse_Status_get(self) get_node((self)->Status) +#define LassoSaSaslResponse_set_Status(self, value) set_node((gpointer *) &(self)->Status, (value)) +#define LassoSaSaslResponse_Status_set(self, value) set_node((gpointer *) &(self)->Status, (value)) + +/* Constructors, destructors & static methods implementations */ + +#define new_LassoSaSaslResponse lasso_sa_sasl_response_new +#define delete_LassoSaSaslResponse(self) lasso_node_destroy(LASSO_NODE(self)) + +/* Implementations of methods inherited from LassoNode */ + +#define LassoSaSaslResponse_dump(self) lasso_node_dump(LASSO_NODE(self)) + +%} + /*********************************************************************** *********************************************************************** @@ -2910,3 +3095,127 @@ gint LassoProfileService_buildResponseMsg(LassoProfileService *self) { #define LassoProfileService_processQueryResponseMsg lasso_profile_service_process_query_response_msg %} + + +/*********************************************************************** + * lasso:Authentication + ***********************************************************************/ + + +#ifndef SWIGPHP4 +%rename(Authentication) LassoAuthentication; +#endif +typedef struct { +} LassoAuthentication; +%extend LassoAuthentication { + /* Attributes inherited from WsfProfile */ + + %immutable msgBody; + char *msgBody; + + %immutable msgUrl; + char *msgUrl; + + %newobject request_get; + LassoSaSaslRequest *request; + + %newobject response_get; + LassoSaSaslResponse *response; + + %newobject server_get; + LassoServer *server; + + /* Constructor, Destructor & Static Methods */ + + LassoAuthentication(LassoServer *server); + + ~LassoAuthentication(); + + /* Methods inherited from LassoNode */ + + /* Methods inherited from WsfProfile */ + + THROW_ERROR + int buildRequestMsg(); + END_THROW_ERROR + + THROW_ERROR + int buildResponseMsg(); + END_THROW_ERROR + + /* Methods */ + int clientStart(); + + int clientStep(); + + THROW_ERROR + int getMechanismList(); + END_THROW_ERROR + + int initRequest(LassoDiscoDescription *description, char *mechanisms, sasl_callback_t *callbacks = NULL); + + int processRequestMsg(char *soap_msg); + + int processResponseMsg(char *soap_msg); + + int serverStart(); + + int serverStep(); +} + +%{ + +/* Attributes inherited from WsfProfile implementations */ + +/* msgBody */ +#define LassoAuthentication_get_msgBody(self) LASSO_WSF_PROFILE(self)->msg_body +#define LassoAuthentication_msgBody_get(self) LASSO_WSF_PROFILE(self)->msg_body + +/* msgUrl */ +#define LassoAuthentication_get_msgUrl(self) LASSO_WSF_PROFILE(self)->msg_url +#define LassoAuthentication_msgUrl_get(self) LASSO_WSF_PROFILE(self)->msg_url + +/* request */ +#define LassoAuthentication_get_request(self) get_node(LASSO_WSF_PROFILE(self)->request) +#define LassoAuthentication_request_get(self) get_node(LASSO_WSF_PROFILE(self)->request) +#define LassoAuthentication_set_request(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->request, (value)) +#define LassoAuthentication_request_set(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->request, (value)) + +/* response */ +#define LassoAuthentication_get_response(self) get_node(LASSO_WSF_PROFILE(self)->response) +#define LassoAuthentication_response_get(self) get_node(LASSO_WSF_PROFILE(self)->response) +#define LassoAuthentication_set_response(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->response, (value)) +#define LassoAuthentication_response_set(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->response, (value)) + +/* server */ +#define LassoAuthentication_get_server(self) get_node(LASSO_WSF_PROFILE(self)->server) +#define LassoAuthentication_server_get(self) get_node(LASSO_WSF_PROFILE(self)->server) +#define LassoAuthentication_set_server(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->server, (value)) +#define LassoAuthentication_server_set(self, value) set_node((gpointer *) &LASSO_WSF_PROFILE(self)->server, (value)) + +/* Constructors, destructors & static methods implementations */ + +#define new_LassoAuthentication lasso_authentication_new +#define delete_LassoAuthentication(self) lasso_node_destroy(LASSO_NODE(self)) + +/* Implementations of methods inherited from WsfProfile */ + +gint LassoAuthentication_buildRequestMsg(LassoAuthentication *self) { + return lasso_wsf_profile_build_request_msg(LASSO_WSF_PROFILE(self)); +} + +gint LassoAuthentication_buildResponseMsg(LassoAuthentication *self) { + return lasso_wsf_profile_build_response_msg(LASSO_WSF_PROFILE(self)); +} + +/* Methods implementations */ +#define LassoAuthentication_clientStart lasso_authentication_client_start +#define LassoAuthentication_clientStep lasso_authentication_client_step +#define LassoAuthentication_getMechanismList lasso_authentication_get_mechanism_list +#define LassoAuthentication_initRequest lasso_authentication_init_request +#define LassoAuthentication_processRequestMsg lasso_authentication_process_request_msg +#define LassoAuthentication_processResponseMsg lasso_authentication_process_response_msg +#define LassoAuthentication_serverStart lasso_authentication_server_start +#define LassoAuthentication_serverStep lasso_authentication_server_step + +%} |
