diff options
| -rw-r--r-- | lasso/Attic/protocols/identity.c | 4 | ||||
| -rw-r--r-- | lasso/Attic/protocols/provider.c | 13 | ||||
| -rw-r--r-- | lasso/id-ff/server.c | 7 | ||||
| -rw-r--r-- | lasso/id-ff/user.c | 9 | ||||
| -rw-r--r-- | lasso/xml/ds_signature.c | 10 | ||||
| -rw-r--r-- | lasso/xml/tools.c | 12 | ||||
| -rw-r--r-- | lasso/xml/tools.h | 4 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 59 | ||||
| -rw-r--r-- | lasso/xml/xml.h | 2 | ||||
| -rw-r--r-- | python/environs/py_login.c | 9 |
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); |
