X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fidentity%2Fgnunet-service-identity.c;h=7d635c2912df655f95649c5980b2f265633ff6ef;hb=cea95af17bb3bfaf65224d0ecd2db2308e333764;hp=f55e6501906b44c193deb965dd58d3df0ed27ad9;hpb=c9c2a2e547a50357ef1db49e0de9fb8d5b07c231;p=oweals%2Fgnunet.git diff --git a/src/identity/gnunet-service-identity.c b/src/identity/gnunet-service-identity.c index f55e65019..7d635c291 100644 --- a/src/identity/gnunet-service-identity.c +++ b/src/identity/gnunet-service-identity.c @@ -47,18 +47,18 @@ struct Ego /** * We keep egos in a DLL. - */ + */ struct Ego *next; /** * We keep egos in a DLL. - */ + */ struct Ego *prev; /** * Private key of the ego. */ - struct GNUNET_CRYPTO_EccPrivateKey *pk; + struct GNUNET_CRYPTO_EcdsaPrivateKey *pk; /** * String identifier for the ego. @@ -161,6 +161,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_CONTAINER_DLL_remove (ego_head, ego_tail, e); GNUNET_free (e->pk); + GNUNET_free (e->identifier); GNUNET_free (e); } } @@ -189,12 +190,13 @@ send_result_code (struct GNUNET_SERVER_Client *client, rcm->header.type = htons (GNUNET_MESSAGE_TYPE_IDENTITY_RESULT_CODE); rcm->header.size = htons (sizeof (struct GNUNET_IDENTITY_ResultCodeMessage) + elen); rcm->result_code = htonl (result_code); - memcpy (&rcm[1], emsg, elen); + if (0 < elen) + memcpy (&rcm[1], emsg, elen); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending result %d (%s) to client\n", (int) result_code, emsg); - GNUNET_SERVER_notification_context_unicast (nc, client, &rcm->header, GNUNET_NO); + GNUNET_SERVER_notification_context_unicast (nc, client, &rcm->header, GNUNET_NO); GNUNET_free (rcm); } @@ -210,7 +212,7 @@ create_update_message (struct Ego *ego) { struct GNUNET_IDENTITY_UpdateMessage *um; size_t name_len; - + name_len = (NULL == ego->identifier) ? 0 : (strlen (ego->identifier) + 1); um = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_UpdateMessage) + name_len); um->header.type = htons (GNUNET_MESSAGE_TYPE_IDENTITY_UPDATE); @@ -251,7 +253,7 @@ create_set_default_message (struct Ego *ego, /** * Handler for START message from client, sends information - * about all identities to the client immediately and + * about all identities to the client immediately and * adds the client to the notification context for future * updates. * @@ -267,7 +269,7 @@ handle_start_message (void *cls, struct GNUNET_SERVER_Client *client, struct GNUNET_IDENTITY_UpdateMessage ume; struct Ego *ego; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received START message from client\n"); GNUNET_SERVER_notification_context_add (nc, client); for (ego = ego_head; NULL != ego; ego = ego->next) @@ -281,7 +283,7 @@ handle_start_message (void *cls, struct GNUNET_SERVER_Client *client, ume.header.size = htons (sizeof (struct GNUNET_IDENTITY_UpdateMessage)); ume.end_of_list = htons (GNUNET_YES); ume.name_len = htons (0); - GNUNET_SERVER_notification_context_unicast (nc, client, &ume.header, GNUNET_NO); + GNUNET_SERVER_notification_context_unicast (nc, client, &ume.header, GNUNET_NO); GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -324,7 +326,7 @@ handle_get_default_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); return; } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received GET_DEFAULT for service `%s' from client\n", name); if (GNUNET_OK != @@ -334,7 +336,7 @@ handle_get_default_message (void *cls, struct GNUNET_SERVER_Client *client, &identifier)) { send_result_code (client, 1, gettext_noop ("no default known")); - GNUNET_SERVER_receive_done (client, GNUNET_OK); + GNUNET_SERVER_receive_done (client, GNUNET_OK); return; } for (ego = ego_head; NULL != ego; ego = ego->next) @@ -344,7 +346,8 @@ handle_get_default_message (void *cls, struct GNUNET_SERVER_Client *client, { sdm = create_set_default_message (ego, name); - GNUNET_SERVER_notification_context_broadcast (nc, &sdm->header, GNUNET_NO); + GNUNET_SERVER_notification_context_unicast (nc, client, + &sdm->header, GNUNET_NO); GNUNET_free (sdm); GNUNET_SERVER_receive_done (client, GNUNET_OK); GNUNET_free (identifier); @@ -355,7 +358,7 @@ handle_get_default_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to find ego `%s'\n", name); - send_result_code (client, 1, + send_result_code (client, 1, gettext_noop ("default configured, but ego unknown (internal error)")); GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -363,16 +366,16 @@ handle_get_default_message (void *cls, struct GNUNET_SERVER_Client *client, /** * Compare the given two private keys for equality. - * + * * @param pk1 one private key * @param pk2 another private key * @return 0 if the keys are equal */ static int -key_cmp (const struct GNUNET_CRYPTO_EccPrivateKey *pk1, - const struct GNUNET_CRYPTO_EccPrivateKey *pk2) +key_cmp (const struct GNUNET_CRYPTO_EcdsaPrivateKey *pk1, + const struct GNUNET_CRYPTO_EcdsaPrivateKey *pk2) { - return memcmp (pk1, pk2, sizeof (struct GNUNET_CRYPTO_EccPrivateKey)); + return memcmp (pk1, pk2, sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)); } @@ -404,7 +407,7 @@ handle_set_default_message (void *cls, struct GNUNET_SERVER_Client *client, sdm = (const struct GNUNET_IDENTITY_SetDefaultMessage *) message; name_len = ntohs (sdm->name_len); GNUNET_break (0 == ntohs (sdm->reserved)); - if (name_len + sizeof (struct GNUNET_IDENTITY_SetDefaultMessage) != size) + if (name_len + sizeof (struct GNUNET_IDENTITY_SetDefaultMessage) != size) { GNUNET_break (0); GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); @@ -417,7 +420,7 @@ handle_set_default_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); return; } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received SET_DEFAULT for service `%s' from client\n", str); for (ego = ego_head; NULL != ego; ego = ego->next) @@ -429,7 +432,7 @@ handle_set_default_message (void *cls, struct GNUNET_SERVER_Client *client, str, "DEFAULT_IDENTIFIER", ego->identifier); - if (GNUNET_OK != + if (GNUNET_OK != GNUNET_CONFIGURATION_write (subsystem_cfg, subsystem_cfg_file)) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -439,7 +442,7 @@ handle_set_default_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_SERVER_receive_done (client, GNUNET_OK); return; } - } + } send_result_code (client, 1, _("Unknown ego specified for service (internal error)")); GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -480,7 +483,7 @@ handle_create_message (void *cls, struct GNUNET_SERVER_Client *client, const char *str; char *fn; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received CREATE message from client\n"); size = ntohs (message->size); if (size <= sizeof (struct GNUNET_IDENTITY_CreateRequestMessage)) @@ -492,7 +495,7 @@ handle_create_message (void *cls, struct GNUNET_SERVER_Client *client, crm = (const struct GNUNET_IDENTITY_CreateRequestMessage *) message; name_len = ntohs (crm->name_len); GNUNET_break (0 == ntohs (crm->reserved)); - if (name_len + sizeof (struct GNUNET_IDENTITY_CreateRequestMessage) != size) + if (name_len + sizeof (struct GNUNET_IDENTITY_CreateRequestMessage) != size) { GNUNET_break (0); GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); @@ -516,7 +519,7 @@ handle_create_message (void *cls, struct GNUNET_SERVER_Client *client, } } ego = GNUNET_new (struct Ego); - ego->pk = GNUNET_new (struct GNUNET_CRYPTO_EccPrivateKey); + ego->pk = GNUNET_new (struct GNUNET_CRYPTO_EcdsaPrivateKey); *ego->pk = crm->private_key; ego->identifier = GNUNET_strdup (str); GNUNET_CONTAINER_DLL_insert (ego_head, @@ -525,16 +528,16 @@ handle_create_message (void *cls, struct GNUNET_SERVER_Client *client, send_result_code (client, 0, NULL); fn = get_ego_filename (ego); (void) GNUNET_DISK_directory_create_for_file (fn); - if (sizeof (struct GNUNET_CRYPTO_EccPrivateKey) != + if (sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey) != GNUNET_DISK_fn_write (fn, - &crm->private_key, - sizeof (struct GNUNET_CRYPTO_EccPrivateKey), + &crm->private_key, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE)) GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "write", fn); GNUNET_free (fn); - notify_listeners (ego); + notify_listeners (ego); GNUNET_SERVER_receive_done (client, GNUNET_OK); } @@ -542,7 +545,7 @@ handle_create_message (void *cls, struct GNUNET_SERVER_Client *client, /** * Closure for 'handle_ego_rename'. */ -struct RenameContext +struct RenameContext { /** * Old name. @@ -578,14 +581,14 @@ handle_ego_rename (void *cls, return; if (0 != strcmp (id, rc->old_name)) { - GNUNET_free (id); + GNUNET_free (id); return; } GNUNET_CONFIGURATION_set_value_string (subsystem_cfg, section, "DEFAULT_IDENTIFIER", rc->new_name); - GNUNET_free (id); + GNUNET_free (id); } @@ -612,7 +615,7 @@ handle_rename_message (void *cls, struct GNUNET_SERVER_Client *client, char *fn_old; char *fn_new; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received RENAME message from client\n"); size = ntohs (message->size); if (size <= sizeof (struct GNUNET_IDENTITY_RenameMessage)) @@ -642,7 +645,7 @@ handle_rename_message (void *cls, struct GNUNET_SERVER_Client *client, new_name)) { send_result_code (client, 1, gettext_noop ("target name already exists")); - GNUNET_SERVER_receive_done (client, GNUNET_OK); + GNUNET_SERVER_receive_done (client, GNUNET_OK); return; } } @@ -660,14 +663,14 @@ handle_rename_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_CONFIGURATION_iterate_sections (subsystem_cfg, &handle_ego_rename, &rename_ctx); - if (GNUNET_OK != + if (GNUNET_OK != GNUNET_CONFIGURATION_write (subsystem_cfg, subsystem_cfg_file)) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to write subsystem default identifier map to `%s'.\n"), subsystem_cfg_file); ego->identifier = GNUNET_strdup (new_name); - fn_new = get_ego_filename (ego); + fn_new = get_ego_filename (ego); if (0 != RENAME (fn_old, fn_new)) GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "rename", fn_old); GNUNET_free (fn_old); @@ -707,14 +710,14 @@ handle_ego_delete (void *cls, return; if (0 != strcmp (id, identifier)) { - GNUNET_free (id); + GNUNET_free (id); return; } GNUNET_CONFIGURATION_set_value_string (subsystem_cfg, section, "DEFAULT_IDENTIFIER", NULL); - GNUNET_free (id); + GNUNET_free (id); } @@ -737,7 +740,7 @@ handle_delete_message (void *cls, struct GNUNET_SERVER_Client *client, const char *name; char *fn; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received DELETE message from client\n"); size = ntohs (message->size); if (size <= sizeof (struct GNUNET_IDENTITY_DeleteMessage)) @@ -768,7 +771,7 @@ handle_delete_message (void *cls, struct GNUNET_SERVER_Client *client, GNUNET_CONFIGURATION_iterate_sections (subsystem_cfg, &handle_ego_delete, ego->identifier); - if (GNUNET_OK != + if (GNUNET_OK != GNUNET_CONFIGURATION_write (subsystem_cfg, subsystem_cfg_file)) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -818,18 +821,18 @@ process_ego_file (void *cls, return GNUNET_OK; } ego = GNUNET_new (struct Ego); - ego->pk = GNUNET_CRYPTO_ecc_key_create_from_file (filename); + ego->pk = GNUNET_CRYPTO_ecdsa_key_create_from_file (filename); if (NULL == ego->pk) - { - GNUNET_free (ego); - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to parse ego information in `%s'\n"), - filename); - return GNUNET_OK; - } + { + GNUNET_free (ego); + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + _("Failed to parse ego information in `%s'\n"), + filename); + return GNUNET_OK; + } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Loaded ego `%s'\n", - fn + 1); + fn + 1); ego->identifier = GNUNET_strdup (fn + 1); GNUNET_CONTAINER_DLL_insert (ego_head, ego_tail, @@ -846,7 +849,7 @@ process_ego_file (void *cls, * @param c configuration to use */ static void -run (void *cls, +run (void *cls, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *c) { @@ -891,7 +894,7 @@ run (void *cls, subsystem_cfg = GNUNET_CONFIGURATION_create (); if ( (GNUNET_YES == GNUNET_DISK_file_test (subsystem_cfg_file)) && - (GNUNET_OK != + (GNUNET_OK != GNUNET_CONFIGURATION_parse (subsystem_cfg, subsystem_cfg_file)) ) { @@ -930,7 +933,7 @@ int main (int argc, char *const *argv) { return (GNUNET_OK == - GNUNET_SERVICE_run (argc, argv, "identity", + GNUNET_SERVICE_run (argc, argv, "identity", GNUNET_SERVICE_OPTION_NONE, &run, NULL)) ? 0 : 1; }