summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lasso/Attic/protocols/identity.c4
-rw-r--r--lasso/Attic/protocols/provider.c13
-rw-r--r--lasso/id-ff/server.c7
-rw-r--r--lasso/id-ff/user.c9
-rw-r--r--lasso/xml/ds_signature.c10
-rw-r--r--lasso/xml/tools.c12
-rw-r--r--lasso/xml/tools.h4
-rw-r--r--lasso/xml/xml.c59
-rw-r--r--lasso/xml/xml.h2
-rw-r--r--python/environs/py_login.c9
10 files changed, 74 insertions, 55 deletions
diff --git a/lasso/Attic/protocols/identity.c b/lasso/Attic/protocols/identity.c
index 68da3ccc..38494fbc 100644
--- a/lasso/Attic/protocols/identity.c
+++ b/lasso/Attic/protocols/identity.c
@@ -164,7 +164,7 @@ lasso_identity_dispose(LassoIdentity *identity)
}
identity->private->dispose_has_run = TRUE;
- debug(DEBUG, "Identity object 0x%x disposed ...\n", identity);
+ debug("Identity object 0x%x disposed ...\n", identity);
/* unref reference counted objects */
lasso_node_destroy(identity->local_nameIdentifier);
@@ -176,7 +176,7 @@ lasso_identity_dispose(LassoIdentity *identity)
static void
lasso_identity_finalize(LassoIdentity *identity)
{
- debug(DEBUG, "Identity object 0x%x finalized ...\n", identity);
+ debug("Identity object 0x%x finalized ...\n", identity);
g_free(identity->remote_providerID);
diff --git a/lasso/Attic/protocols/provider.c b/lasso/Attic/protocols/provider.c
index 1a0414a5..cbaf7eaa 100644
--- a/lasso/Attic/protocols/provider.c
+++ b/lasso/Attic/protocols/provider.c
@@ -215,7 +215,8 @@ lasso_provider_set_public_key(LassoProvider *provider, gchar *public_key)
}
void
-lasso_provider_set_ca_certificate(LassoProvider *provider, gchar *ca_certificate)
+lasso_provider_set_ca_certificate(LassoProvider *provider,
+ gchar *ca_certificate)
{
provider->ca_certificate = g_strdup(ca_certificate);
}
@@ -225,7 +226,7 @@ lasso_provider_set_ca_certificate(LassoProvider *provider, gchar *ca_certificate
/*****************************************************************************/
static gchar *lasso_provider_get_direct_child_content(LassoProvider *provider,
- const gchar *name)
+ const gchar *name)
{
LassoNode *node;
@@ -247,7 +248,7 @@ lasso_provider_dispose(LassoProvider *provider)
}
provider->private->dispose_has_run = TRUE;
- debug(DEBUG, "Provider object 0x%x disposed ...\n", provider);
+ debug("Provider object 0x%x disposed ...\n", provider);
/* unref reference counted objects */
lasso_node_destroy(provider->metadata);
@@ -258,7 +259,7 @@ lasso_provider_dispose(LassoProvider *provider)
static void
lasso_provider_finalize(LassoProvider *provider)
{
- debug(DEBUG, "Provider object 0x%x finalized ...\n", provider);
+ debug("Provider object 0x%x finalized ...\n", provider);
g_free(provider->public_key);
g_free(provider->ca_certificate);
@@ -322,8 +323,8 @@ lasso_provider_new(gchar *metadata,
LassoProvider *provider;
provider = lasso_provider_new_metadata_filename(metadata);
- provider->public_key = public_key;
- provider->ca_certificate = ca_certificate;
+ provider->public_key = g_strdup(public_key);
+ provider->ca_certificate = g_strdup(ca_certificate);
return(provider);
}
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c
index f36b7c81..c0123ee2 100644
--- a/lasso/id-ff/server.c
+++ b/lasso/id-ff/server.c
@@ -57,6 +57,7 @@ lasso_server_dump(LassoServer *server)
signature_method_str = g_new(gchar, 6);
sprintf(signature_method_str, "%d", server->signature_method);
server_class->set_prop(server_node, LASSO_SERVER_SIGNATURE_METHOD_NODE, signature_method_str);
+ g_free(signature_method_str);
/* providerID */
if(server->providerID)
@@ -197,7 +198,7 @@ lasso_server_dispose(LassoServer *server)
/* } */
/* server->private->dispose_has_run = TRUE; */
- debug(DEBUG, "Server object 0x%x finalized ...\n", server);
+ debug("Server object 0x%x finalized ...\n", server);
/* TODO destroy the providers */
@@ -207,7 +208,7 @@ lasso_server_dispose(LassoServer *server)
static void
lasso_server_finalize(LassoServer *server)
{
- debug(DEBUG, "Server object 0x%x finalized ...\n", server);
+ debug("Server object 0x%x finalized ...\n", server);
g_free(server->providerID);
g_free(server->private_key);
@@ -236,7 +237,7 @@ lasso_server_class_init(LassoServerClass *class) {
parent_class = g_type_class_peek_parent(class);
/* override parent class methods */
- /* object_class->dispose = (void *)lasso_server_dispose; */
+ gobject_class->dispose = (void *)lasso_server_dispose;
gobject_class->finalize = (void *)lasso_server_finalize;
}
diff --git a/lasso/id-ff/user.c b/lasso/id-ff/user.c
index 2d6b8257..823abe00 100644
--- a/lasso/id-ff/user.c
+++ b/lasso/id-ff/user.c
@@ -138,8 +138,10 @@ lasso_user_dump_identity(gpointer key,
dump = lasso_identity_dump(LASSO_IDENTITY(value));
identity_node = lasso_node_new_from_dump(dump);
+ xmlFree(dump);
identity_class = LASSO_NODE_GET_CLASS(identity_node);
identity_class->add_child(identities, identity_node, TRUE);
+ lasso_node_destroy(identity_node);
}
void
@@ -206,6 +208,7 @@ lasso_user_get_authentication_method(LassoUser *user,
providerID = lasso_user_get_next_assertion_remote_providerID(user);
}
assertion = lasso_user_get_assertion(user, providerID);
+ g_free(providerID);
as = lasso_node_get_child(assertion, "AuthenticationStatement", NULL);
authentication_method = lasso_node_get_attr_value(as, "AuthenticationMethod", &err);
if (authentication_method == NULL) {
@@ -334,7 +337,7 @@ lasso_user_remove_identity(LassoUser *user,
static void
lasso_user_finalize(LassoUser *user)
{
- message(G_LOG_LEVEL_INFO, "User object 0x%x finalized ...\n", user);
+ debug("User object 0x%x finalized ...\n", user);
parent_class->finalize(G_OBJECT(user));
}
@@ -474,7 +477,7 @@ lasso_user_new_from_dump(gchar *dump)
local_nameIdentifier_node = lasso_node_get_child(identity_node, LASSO_IDENTITY_LOCAL_NAME_IDENTIFIER_NODE, NULL);
if (local_nameIdentifier_node != NULL) {
nameIdentifier_node = lasso_node_get_child(local_nameIdentifier_node, "NameIdentifier", NULL);
- lasso_identity_set_local_nameIdentifier(identity, lasso_node_copy(nameIdentifier_node));
+ lasso_identity_set_local_nameIdentifier(identity, nameIdentifier_node);
lasso_node_destroy(nameIdentifier_node);
lasso_node_destroy(local_nameIdentifier_node);
}
@@ -483,7 +486,7 @@ lasso_user_new_from_dump(gchar *dump)
remote_nameIdentifier_node = lasso_node_get_child(identity_node, LASSO_IDENTITY_REMOTE_NAME_IDENTIFIER_NODE, NULL);
if (remote_nameIdentifier_node != NULL) {
nameIdentifier_node = lasso_node_get_child(remote_nameIdentifier_node, "NameIdentifier", NULL);
- lasso_identity_set_remote_nameIdentifier(identity, lasso_node_copy(nameIdentifier_node));
+ lasso_identity_set_remote_nameIdentifier(identity, nameIdentifier_node);
lasso_node_destroy(nameIdentifier_node);
lasso_node_destroy(remote_nameIdentifier_node);
}
diff --git a/lasso/xml/ds_signature.c b/lasso/xml/ds_signature.c
index c562430a..df0c2aac 100644
--- a/lasso/xml/ds_signature.c
+++ b/lasso/xml/ds_signature.c
@@ -140,28 +140,28 @@ LassoNode* lasso_ds_signature_new(LassoNode *node,
signature = xmlSecTmplSignatureCreate(doc, xmlSecTransformExclC14NId,
sign_method, NULL);
if (signature == NULL) {
- printf("Error: failed to create signature template\n");
+ message(G_LOG_LEVEL_ERROR, "Failed to create signature template\n");
}
reference = xmlSecTmplSignatureAddReference(signature,
xmlSecTransformSha1Id,
NULL, NULL, NULL);
if (reference == NULL) {
- printf("Error: failed to add reference to signature template\n");
+ message(G_LOG_LEVEL_ERROR, "Failed to add reference to signature template\n");
}
/* add enveloped transform */
if (xmlSecTmplReferenceAddTransform(reference, xmlSecTransformEnvelopedId) == NULL) {
- printf("Error: failed to add enveloped transform to reference\n");
+ message(G_LOG_LEVEL_ERROR, "Failed to add enveloped transform to reference\n");
}
/* add <dsig:KeyInfo/> and <dsig:X509Data/> */
key_info = xmlSecTmplSignatureEnsureKeyInfo(signature, NULL);
if(key_info == NULL) {
- printf("Error: failed to add key info\n");
+ message(G_LOG_LEVEL_ERROR, "Failed to add key info\n");
}
if(xmlSecTmplKeyInfoAddX509Data(key_info) == NULL) {
- printf("Error: failed to add X509Data node\n");
+ message(G_LOG_LEVEL_ERROR, "Failed to add X509Data node\n");
}
LASSO_NODE_GET_CLASS(sign_node)->set_xmlNode(sign_node, signature);
diff --git a/lasso/xml/tools.c b/lasso/xml/tools.c
index ca75866c..df7c0c7f 100644
--- a/lasso/xml/tools.c
+++ b/lasso/xml/tools.c
@@ -152,16 +152,16 @@ lasso_g_ptr_array_index(GPtrArray *a, guint i)
*
* Return value: a string
**/
-xmlChar *
+gchar *
lasso_get_current_time()
{
struct tm *tm;
GTimeVal time_val;
- xmlChar *ret = xmlMalloc(21);
+ gchar *ret = g_new0(gchar, 21);
g_get_current_time(&time_val);
tm = localtime(&(time_val.tv_sec));
- strftime(ret, 21, "%FT%TZ", tm);
+ strftime((char *)ret, 21, "%FT%TZ", tm);
return (ret);
}
@@ -179,12 +179,12 @@ GPtrArray *
lasso_query_get_value(const gchar *query,
const xmlChar *param)
{
- gint i;
+ guint i;
GData *gd;
GPtrArray *tmp_array, *array = NULL;
gd = lasso_query_to_dict(query);
- tmp_array = (GPtrArray *)g_datalist_get_data(&gd, param);
+ tmp_array = (GPtrArray *)g_datalist_get_data(&gd, (gchar *)param);
/* create a copy of tmp_array */
if (tmp_array != NULL) {
array = g_ptr_array_new();
@@ -198,7 +198,7 @@ lasso_query_get_value(const gchar *query,
static void
gdata_query_to_dict_destroy_notify(gpointer data)
{
- gint i;
+ guint i;
GPtrArray *array = data;
for (i=0; i<array->len; i++) {
diff --git a/lasso/xml/tools.h b/lasso/xml/tools.h
index c9f608c8..8f8fde1f 100644
--- a/lasso/xml/tools.h
+++ b/lasso/xml/tools.h
@@ -39,7 +39,7 @@ extern "C" {
typedef enum {
lassoSignatureMethodRsaSha1 = 1,
- lassoSignatureMethodDsaSha1,
+ lassoSignatureMethodDsaSha1
} lassoSignatureMethod;
LASSO_EXPORT xmlChar* lasso_build_random_sequence (guint8 size);
@@ -52,7 +52,7 @@ LASSO_EXPORT xmlChar* lasso_doc_get_node_content (xmlDocPtr doc,
LASSO_EXPORT xmlChar* lasso_g_ptr_array_index (GPtrArray *a,
guint i);
-LASSO_EXPORT xmlChar* lasso_get_current_time (void);
+LASSO_EXPORT gchar* lasso_get_current_time (void);
LASSO_EXPORT GPtrArray* lasso_query_get_value (const gchar *query,
const xmlChar *param);
diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c
index 8c2fa72d..a5ddd678 100644
--- a/lasso/xml/xml.c
+++ b/lasso/xml/xml.c
@@ -99,9 +99,8 @@ lasso_node_destroy(LassoNode *node)
{
if (node != NULL) {
LassoNodeClass *class = LASSO_NODE_GET_CLASS(node);
- return (class->destroy(node));
+ class->destroy(node);
}
- return;
}
/**
@@ -536,9 +535,7 @@ lasso_node_impl_copy(LassoNode *node)
LassoNode *copy;
copy = LASSO_NODE(g_object_new(G_OBJECT_TYPE(node), NULL));
- copy->private->node = xmlCopyNode(node->private->node, 1);
- /* copy = lasso_node_new_from_xmlNode(xmlCopyNode(node->private->node, 1)); */
- /* copy->private->node_is_weak_ref = FALSE; */
+ lasso_node_set_xmlNode(copy, xmlCopyNode(node->private->node, 1));
return (copy);
}
@@ -586,7 +583,7 @@ lasso_node_impl_dump(LassoNode *node,
ret = buf->buffer->content;
buf->buffer->content = NULL;
}
- (void) xmlOutputBufferClose(buf);
+ xmlOutputBufferClose(buf);
return (ret);
}
@@ -881,7 +878,7 @@ lasso_node_impl_get_name(LassoNode *node)
{
g_return_val_if_fail (LASSO_IS_NODE(node), NULL);
- return (node->private->node->name);
+ return (xmlStrdup(node->private->node->name));
}
static void
@@ -935,6 +932,7 @@ lasso_node_impl_verify_signature(LassoNode *node,
const gchar *certificate_file)
{
xmlDocPtr doc = xmlNewDoc("1.0");
+ xmlNodePtr xmlNode_copy = NULL;
xmlNodePtr signature = NULL;
xmlSecKeysMngrPtr mngr = NULL;
xmlSecDSigCtxPtr dsigCtx = NULL;
@@ -943,13 +941,15 @@ lasso_node_impl_verify_signature(LassoNode *node,
g_return_val_if_fail (LASSO_IS_NODE(node), -4);
g_return_val_if_fail (certificate_file != NULL, -5);
+ /* create a copy of the xmlNode (node->private->node) of @node */
+ xmlNode_copy = xmlCopyNode(lasso_node_get_xmlNode(node), 1);
+
/* we must associate the xmlNode with an xmlDoc !!! */
- xmlAddChild((xmlNodePtr)doc,
- LASSO_NODE_GET_CLASS(node)->get_xmlNode(LASSO_NODE(node)));
+ xmlAddChild((xmlNodePtr)doc, xmlNode_copy);
/* find start node */
- signature = xmlSecFindNode(node->private->node, xmlSecNodeSignature,
- xmlSecDSigNs);
+ signature = xmlSecFindNode(xmlNode_copy, xmlSecNodeSignature,
+ xmlSecDSigNs);
if (signature == NULL) {
message(G_LOG_LEVEL_ERROR, "Signature element not found.\n");
ret = -2;
@@ -1006,6 +1006,7 @@ lasso_node_impl_verify_signature(LassoNode *node,
if(mngr != NULL) {
xmlSecKeysMngrDestroy(mngr);
}
+ xmlFreeDoc(doc);
return (ret);
}
@@ -1226,13 +1227,14 @@ lasso_node_impl_serialize(LassoNode *node,
gd = lasso_node_serialize(g_ptr_array_index(children, i), gd);
break;
case XML_TEXT_NODE:
- name = lasso_node_get_name(node);
+ name = lasso_node_get_name(node);
/* xmlNodeGetContent returns a COPY of node content
each val must be xmlFree in gdata_serialize_destroy_notify()
which is called by g_datalist_clear() */
- val = xmlNodeGetContent(node->private->node);
- if (val == NULL)
+ val = xmlNodeGetContent(node->private->node);
+ if (val == NULL) {
break;
+ }
values = (GPtrArray *)g_datalist_get_data(&gd, name);
if (values == NULL) {
values = g_ptr_array_new();
@@ -1243,6 +1245,7 @@ lasso_node_impl_serialize(LassoNode *node,
else {
g_ptr_array_add(values, val);
}
+ xmlFree(name);
break;
}
lasso_node_destroy((LassoNode *)g_ptr_array_index(children, i));
@@ -1287,9 +1290,9 @@ lasso_node_impl_set_ns(LassoNode *node,
/* } */
new_ns = xmlNewNs(node->private->node, href, prefix);
- xmlFreeNs(node->private->node->ns);
+ //xmlFreeNs(node->private->node->ns);
xmlSetNs(node->private->node, new_ns);
- node->private->node->nsDef = new_ns;
+ //node->private->node->nsDef = new_ns;
}
static void
@@ -1322,13 +1325,18 @@ lasso_node_impl_set_xmlNode(LassoNode *node,
static void
lasso_node_dispose(LassoNode *node)
{
- if (node->private->dispose_has_run) {
+ xmlChar *name;
+
+ if (node->private->dispose_has_run == TRUE) {
return;
}
node->private->dispose_has_run = TRUE;
- debug("%s 0x%x disposed ...\n", lasso_node_get_name(node), node);
-
+ name = lasso_node_get_name(node);
+ if (name != NULL) {
+ debug("%s 0x%x disposed ...\n", name, node);
+ xmlFree(name);
+ }
/* unref reference counted objects */
/* we don't have any here */
@@ -1338,8 +1346,13 @@ lasso_node_dispose(LassoNode *node)
static void
lasso_node_finalize(LassoNode *node)
{
- debug("%s 0x%x finalized ...\n", lasso_node_get_name(node), node);
-
+ xmlChar *name = lasso_node_get_name(node);
+
+ if (name != NULL) {
+ debug("%s 0x%x finalized ...\n", name, node);
+ xmlFree(name);
+ }
+
if (node->private->node_is_weak_ref == FALSE) {
xmlUnlinkNode(node->private->node);
xmlFreeNode(node->private->node);
@@ -1403,8 +1416,8 @@ lasso_node_class_init(LassoNodeClass *class)
class->set_prop = lasso_node_impl_set_prop;
class->set_xmlNode = lasso_node_impl_set_xmlNode;
/* override parent class methods */
- gobject_class->dispose = (void *)lasso_node_dispose;
- gobject_class->finalize = (void *)lasso_node_finalize;
+ gobject_class->dispose = lasso_node_dispose;
+ gobject_class->finalize = lasso_node_finalize;
}
GType lasso_node_get_type() {
diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h
index ab759312..4e1e9028 100644
--- a/lasso/xml/xml.h
+++ b/lasso/xml/xml.h
@@ -44,7 +44,7 @@ typedef enum {
lassoNodeExportTypeXml = 1,
lassoNodeExportTypeBase64,
lassoNodeExportTypeQuery,
- lassoNodeExportTypeSoap,
+ lassoNodeExportTypeSoap
} lassoNodeExportTypes;
typedef struct _xmlAttr LassoAttr;
diff --git a/python/environs/py_login.c b/python/environs/py_login.c
index c323d8f9..32b45b4a 100644
--- a/python/environs/py_login.c
+++ b/python/environs/py_login.c
@@ -57,9 +57,10 @@ PyObject *login_getattr(PyObject *self, PyObject *args) {
if (!strcmp(attr, "__members__"))
return Py_BuildValue("[ssssssssssss]", "user", "request", "response",
- "request_type", "response_type", "provider_type",
+ "request_type", "response_type", "nameIdentifier",
+ "provider_type",
"msg_url", "msg_body", "msg_relayState", "response_dump",
- "protocolProfile", "assertionArtifact", "nameIdentifier");
+ "protocolProfile", "assertionArtifact");
if (!strcmp(attr, "user"))
return (LassoUser_wrap(LASSO_PROFILE_CONTEXT(login)->user));
if (!strcmp(attr, "request"))
@@ -70,6 +71,8 @@ PyObject *login_getattr(PyObject *self, PyObject *args) {
return (int_wrap(LASSO_PROFILE_CONTEXT(login)->request_type));
if (!strcmp(attr, "response_type"))
return (int_wrap(LASSO_PROFILE_CONTEXT(login)->response_type));
+ if (!strcmp(attr, "nameIdentifier"))
+ return (charPtrConst_wrap(LASSO_PROFILE_CONTEXT(login)->nameIdentifier));
if (!strcmp(attr, "provider_type"))
return (int_wrap(LASSO_PROFILE_CONTEXT(login)->provider_type));
if (!strcmp(attr, "msg_url"))
@@ -84,8 +87,6 @@ PyObject *login_getattr(PyObject *self, PyObject *args) {
return (int_wrap(login->protocolProfile));
if (!strcmp(attr, "assertionArtifact"))
return (charPtrConst_wrap(login->assertionArtifact));
- if (!strcmp(attr, "nameIdentifier"))
- return (charPtrConst_wrap(login->nameIdentifier));
Py_INCREF(Py_None);
return (Py_None);