summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-11-02 11:49:56 +0000
committerBenjamin Dauvergne <bdauvergne@entrouvert.com>2008-11-02 11:49:56 +0000
commit5f163bbffdcb560b3b651f634fb3ada523e3ce0c (patch)
tree5105c9ffad9ed0da2585ee16ba69500726eeb1e4
parent2ca9f2c46a9a7450f8255dba395988b22be47a82 (diff)
Add new constructor lasso_server_new_from_buffers
* lasso/id-ff/server.c, lasso/id-ff/server.h: add new function to build a LassoServer object holding content of certificate and private key files intead of loading them everytime signing is needed. You must instead load them yourself the first time.
-rw-r--r--lasso/id-ff/provider.c3
-rw-r--r--lasso/id-ff/server.c35
-rw-r--r--lasso/id-ff/server.h5
3 files changed, 43 insertions, 0 deletions
diff --git a/lasso/id-ff/provider.c b/lasso/id-ff/provider.c
index 363223b6..3276f622 100644
--- a/lasso/id-ff/provider.c
+++ b/lasso/id-ff/provider.c
@@ -703,6 +703,9 @@ lasso_provider_load_metadata_from_buffer(LassoProvider *provider, const gchar *m
return FALSE;
}
ret = lasso_provider_load_metadata_from_doc(provider, doc);
+ if (ret == TRUE) {
+ lasso_assign_string(provider->metadata_filename, metadata);
+ }
lasso_release_doc(doc);
return ret;
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index b4f84fa4..04569291 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -45,6 +45,8 @@
#include <lasso/xml/id-wsf-2.0/disco_service_context.h>
#endif
+#include "../utils.h"
+
/*****************************************************************************/
/* public methods */
/*****************************************************************************/
@@ -772,6 +774,39 @@ lasso_server_new(const gchar *metadata,
}
/**
+ * lasso_server_new_from_buffers:
+ * @metadata: NULL terminated string containing the content of an ID-FF 1.2 metadata file
+ * @privatekey: NULL terminated string containing a PEM formatted private key
+ * @private_key_password: a NULL terminated string which is the optional password of the private key
+ * @certificate: NULL terminated string containing a PEM formatted X509 certificate
+ *
+ * Creates a new #LassoServer.
+ *
+ * Return value: a newly created #LassoServer object; or NULL if an error occured
+ */
+LassoServer*
+lasso_server_new_from_buffers(const char *metadata, const char *private_key_content, const char
+ *private_key_password, const char *certificate_content)
+{
+ LassoServer *server;
+
+ server = g_object_new(LASSO_TYPE_SERVER, NULL);
+ /* metadata can be NULL (if server is a LECP) */
+ if (metadata != NULL) {
+ if (lasso_provider_load_metadata_from_buffer(LASSO_PROVIDER(server), metadata) == FALSE) {
+ message(G_LOG_LEVEL_CRITICAL,
+ "Failed to load metadata from preloaded buffer");
+ lasso_node_destroy(LASSO_NODE(server));
+ return NULL;
+ }
+ }
+ lasso_assign_string(server->private_key, private_key_content);
+ lasso_assign_string(server->private_key_password, private_key_password);
+ lasso_assign_string(server->certificate, certificate_content);
+
+ return server;
+}
+/**
* lasso_server_new_from_dump:
* @dump: XML server dump
*
diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h
index 7de16564..863e7894 100644
--- a/lasso/id-ff/server.h
+++ b/lasso/id-ff/server.h
@@ -81,6 +81,11 @@ LASSO_EXPORT LassoServer* lasso_server_new(const gchar *metadata,
const gchar *private_key_password,
const gchar *certificate);
+LASSO_EXPORT LassoServer* lasso_server_new_from_buffers(const gchar *metadata,
+ const gchar *private_key,
+ const gchar *private_key_password,
+ const gchar *certificate);
+
LASSO_EXPORT LassoServer* lasso_server_new_from_dump(const gchar *dump);
LASSO_EXPORT gint lasso_server_add_provider (LassoServer *server,