diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2006-11-19 20:07:46 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2006-11-19 20:07:46 +0000 |
| commit | 4016a87eacd4f2e4cd4fe153ac95bb825f59773a (patch) | |
| tree | 26ebaf353e22594c8563c738e062074b04fd9f92 | |
| parent | ef4f859812f5275a94fd6cf51be216198d2e334d (diff) | |
| download | lasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.tar.gz lasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.tar.xz lasso-4016a87eacd4f2e4cd4fe153ac95bb825f59773a.zip | |
added loading of affiliation metadata (not yet acted upon)
| -rw-r--r-- | lasso/errors.c | 3 | ||||
| -rw-r--r-- | lasso/errors.h | 2 | ||||
| -rw-r--r-- | lasso/id-ff/provider.c | 1 | ||||
| -rw-r--r-- | lasso/id-ff/providerprivate.h | 4 | ||||
| -rw-r--r-- | lasso/id-ff/server.c | 42 | ||||
| -rw-r--r-- | lasso/id-ff/server.h | 2 | ||||
| -rw-r--r-- | lasso/saml-2.0/Makefile.am | 6 | ||||
| -rw-r--r-- | swig/Lasso.i | 8 |
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 %} |
