summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2006-11-19 20:07:46 +0000
committerFrederic Peters <fpeters@entrouvert.com>2006-11-19 20:07:46 +0000
commit4016a87eacd4f2e4cd4fe153ac95bb825f59773a (patch)
tree26ebaf353e22594c8563c738e062074b04fd9f92
parentef4f859812f5275a94fd6cf51be216198d2e334d (diff)
downloadlasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.tar.gz
lasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.tar.xz
lasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.zip
added loading of affiliation metadata (not yet acted upon)
-rw-r--r--lasso/errors.c3
-rw-r--r--lasso/errors.h2
-rw-r--r--lasso/id-ff/provider.c1
-rw-r--r--lasso/id-ff/providerprivate.h4
-rw-r--r--lasso/id-ff/server.c42
-rw-r--r--lasso/id-ff/server.h2
-rw-r--r--lasso/saml-2.0/Makefile.am6
-rw-r--r--swig/Lasso.i8
8 files changed, 65 insertions, 3 deletions
diff --git a/lasso/errors.c b/lasso/errors.c
index f51e72e7..893ba39d 100644
--- a/lasso/errors.c
+++ b/lasso/errors.c
@@ -43,6 +43,9 @@ lasso_strerror(int error_code)
return "Unable to get attribute of element.";
case LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND:
return "Unable to get attribute value of element.";
+ case LASSO_XML_ERROR_INVALID_FILE:
+ return "Invalid XML file";
+
case LASSO_DS_ERROR_SIGNATURE_NOT_FOUND:
return "Signature element not found.";
case LASSO_DS_ERROR_INVALID_SIGNATURE:
diff --git a/lasso/errors.h b/lasso/errors.h
index 6c9a7fde..d928738e 100644
--- a/lasso/errors.h
+++ b/lasso/errors.h
@@ -34,6 +34,7 @@
#define LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND -11
#define LASSO_XML_ERROR_ATTR_NOT_FOUND -12
#define LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND -13
+#define LASSO_XML_ERROR_INVALID_FILE -14
/* XMLDSig */
#define LASSO_DS_ERROR_SIGNATURE_NOT_FOUND 101
@@ -57,6 +58,7 @@
#define LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED -202
#define LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH -203
#define LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED 204
+#define LASSO_SERVER_ERROR_INVALID_XML -205
/* Single Logout */
#define LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE -301
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c
index aab568ea..21bc0e8e 100644
--- a/lasso/id-ff/provider.c
+++ b/lasso/id-ff/provider.c
@@ -537,6 +537,7 @@ instance_init(LassoProvider *provider)
provider->private_data = g_new(LassoProviderPrivate, 1);
provider->private_data->dispose_has_run = FALSE;
provider->private_data->default_assertion_consumer = NULL;
+ provider->private_data->affiliation_owner_id = NULL;
provider->private_data->organization = NULL;
provider->private_data->public_key = NULL;
provider->private_data->encryption_public_key = NULL;
diff --git a/lasso/id-ff/providerprivate.h b/lasso/id-ff/providerprivate.h
index 81ab3474..214c7257 100644
--- a/lasso/id-ff/providerprivate.h
+++ b/lasso/id-ff/providerprivate.h
@@ -45,11 +45,15 @@ typedef enum {
struct _LassoProviderPrivate
{
gboolean dispose_has_run;
+
LassoProtocolConformance conformance;
GHashTable *SPDescriptor;
char *default_assertion_consumer;
GHashTable *IDPDescriptor;
xmlNode *organization;
+
+ char *affiliation_owner_id;
+
xmlSecKey *public_key;
xmlNode *signing_key_descriptor;
xmlSecKey *encryption_public_key;
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index f8af5dfe..fc0d2735 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -30,6 +30,8 @@
#include <lasso/id-ff/providerprivate.h>
#include <lasso/id-ff/serverprivate.h>
+#include <lasso/saml-2.0/serverprivate.h>
+
/*****************************************************************************/
/* public methods */
@@ -149,6 +151,46 @@ lasso_server_set_encryption_private_key(LassoServer *server, const gchar *filena
}
+/**
+ * lasso_server_load_affiliation:
+ * @server: a #LassoServer
+ * @filename: file name of the affiliation metadata to load
+ *
+ * Load an affiliation metadata file into @server; this must be called after
+ * providers have been added to @server.
+ *
+ * Return value: 0 on success; another value if an error occured.
+ **/
+int
+lasso_server_load_affiliation(LassoServer *server, const gchar *filename)
+{
+ LassoProvider *provider = LASSO_PROVIDER(server);
+ xmlDoc *doc;
+ xmlNode *node;
+ int rc;
+
+ doc = xmlParseFile(filename);
+ if (doc == NULL) {
+ return LASSO_XML_ERROR_INVALID_FILE;
+ }
+
+ node = xmlDocGetRootElement(doc);
+ if (node == NULL || node->ns == NULL) {
+ return LASSO_XML_ERROR_NODE_NOT_FOUND;
+ }
+
+ if (provider->private_data->conformance == LASSO_PROTOCOL_SAML_2_0) {
+ rc = lasso_saml20_server_load_affiliation(server, doc, node);
+ } else {
+ /* affiliations are not supported in ID-FF 1.2 mode */
+ rc = LASSO_ERROR_UNIMPLEMENTED;
+ }
+
+ xmlFreeDoc(doc);
+
+ return rc;
+}
+
/*****************************************************************************/
/* private methods */
/*****************************************************************************/
diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h
index 14596075..b1e0ba97 100644
--- a/lasso/id-ff/server.h
+++ b/lasso/id-ff/server.h
@@ -100,6 +100,8 @@ LASSO_EXPORT LassoDiscoServiceInstance* lasso_server_get_service(LassoServer *se
LASSO_EXPORT int lasso_server_set_encryption_private_key(LassoServer *server,
const gchar *filename);
+LASSO_EXPORT int lasso_server_load_affiliation(LassoServer *server, const gchar* filename);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/lasso/saml-2.0/Makefile.am b/lasso/saml-2.0/Makefile.am
index 8cc8221a..0667d7a3 100644
--- a/lasso/saml-2.0/Makefile.am
+++ b/lasso/saml-2.0/Makefile.am
@@ -16,7 +16,8 @@ liblasso_saml_20_la_SOURCES = \
provider.c \
login.c \
logout.c \
- name_id_management.c
+ name_id_management.c \
+ server.c
liblassoinclude_HEADERS = \
ecp.h \
@@ -28,6 +29,7 @@ lasso_private_h_sources = \
profileprivate.h \
providerprivate.h \
loginprivate.h \
- logoutprivate.h
+ logoutprivate.h \
+ serverprivate.h
EXTRA_DIST = $(lasso_private_h_sources)
diff --git a/swig/Lasso.i b/swig/Lasso.i
index e5a131ac..80b4ebeb 100644
--- a/swig/Lasso.i
+++ b/swig/Lasso.i
@@ -1020,6 +1020,7 @@ typedef enum {
%rename(XML_ERROR_NODE_CONTENT_NOT_FOUND) LASSO_XML_ERROR_NODE_CONTENT_NOT_FOUND;
%rename(XML_ERROR_ATTR_NOT_FOUND) LASSO_XML_ERROR_ATTR_NOT_FOUND;
%rename(XML_ERROR_ATTR_VALUE_NOT_FOUND) LASSO_XML_ERROR_ATTR_VALUE_NOT_FOUND;
+%rename(XML_ERROR_INVALID_XML) LASSO_XML_ERROR_INVALID_XML;
#endif
/* XMLDSig */
@@ -5120,9 +5121,13 @@ typedef struct {
END_THROW_ERROR()
THROW_ERROR()
- int setEncryptionPrivateKey(char *file_name);
+ int setEncryptionPrivateKey(char *filename);
END_THROW_ERROR()
+ THROW_ERROR()
+ int loadAffiliation(char *filename);
+ END_THROW_ERROR()
+
#ifdef LASSO_WSF_ENABLED
THROW_ERROR()
int addService(LassoDiscoServiceInstance *service);
@@ -5208,6 +5213,7 @@ LassoStringList *LassoServer_providerIds_get(LassoServer *self) {
#define LassoServer_getProvider lasso_server_get_provider
#define LassoServer_getService lasso_server_get_service
#define LassoServer_setEncryptionPrivateKey lasso_server_set_encryption_private_key
+#define LassoServer_loadAffiliation lasso_server_load_affiliation
%}