aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2017-10-05 22:44:56 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2017-10-05 22:44:56 +0200
commit1731fbd017731df1f3f88bd4b3beac765996a1ad (patch)
tree7eefd76c1b802dac98008f174f3a47477d652544 /src
parent76817ee408cff4aee534d6016423c8a4ecb5555f (diff)
downloadgnunet-1731fbd017731df1f3f88bd4b3beac765996a1ad.tar.gz
gnunet-1731fbd017731df1f3f88bd4b3beac765996a1ad.zip
-fix bugs
Diffstat (limited to 'src')
-rw-r--r--src/identity-provider/gnunet-service-identity-provider.c70
-rw-r--r--src/identity-provider/identity-provider.conf1
-rw-r--r--src/identity-provider/identity_provider.h36
-rw-r--r--src/identity-provider/identity_provider_api.c86
-rw-r--r--src/identity-provider/plugin_identity_provider_sqlite.c8
-rwxr-xr-xsrc/identity-provider/test_idp_issue.sh2
-rw-r--r--src/include/gnunet_protocols.h8
7 files changed, 178 insertions, 33 deletions
diff --git a/src/identity-provider/gnunet-service-identity-provider.c b/src/identity-provider/gnunet-service-identity-provider.c
index f77eebd6d..0b7f3389e 100644
--- a/src/identity-provider/gnunet-service-identity-provider.c
+++ b/src/identity-provider/gnunet-service-identity-provider.c
@@ -411,15 +411,31 @@ struct ConsumeTicketHandle
411 struct GNUNET_CRYPTO_EcdsaPublicKey identity_pub; 411 struct GNUNET_CRYPTO_EcdsaPublicKey identity_pub;
412 412
413 /** 413 /**
414 * ParallelLookups DLL 414 * Lookup DLL
415 */ 415 */
416 struct ParallelLookup2 *parallel_lookups_head; 416 struct ParallelLookup2 *parallel_lookups_head;
417
418 /**
419 * Lookup DLL
420 */
417 struct ParallelLookup2 *parallel_lookups_tail; 421 struct ParallelLookup2 *parallel_lookups_tail;
418 422
423 /**
424 * Kill task
425 */
419 struct GNUNET_SCHEDULER_Task *kill_task; 426 struct GNUNET_SCHEDULER_Task *kill_task;
427
428 /**
429 * The ABE key
430 */
420 struct GNUNET_CRYPTO_AbeKey *key; 431 struct GNUNET_CRYPTO_AbeKey *key;
421 432
422 /** 433 /**
434 * Attributes
435 */
436 struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs;
437
438 /**
423 * request id 439 * request id
424 */ 440 */
425 uint32_t r_id; 441 uint32_t r_id;
@@ -2029,11 +2045,13 @@ process_parallel_lookup2 (void *cls, uint32_t rd_count,
2029 "Parallel lookup finished (count=%u)\n", rd_count); 2045 "Parallel lookup finished (count=%u)\n", rd_count);
2030 struct ParallelLookup2 *parallel_lookup = cls; 2046 struct ParallelLookup2 *parallel_lookup = cls;
2031 struct ConsumeTicketHandle *handle = parallel_lookup->handle; 2047 struct ConsumeTicketHandle *handle = parallel_lookup->handle;
2032 struct AttributeResultMessage *arm; 2048 struct ConsumeTicketResultMessage *crm;
2033 struct GNUNET_MQ_Envelope *env; 2049 struct GNUNET_MQ_Envelope *env;
2050 struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry *attr_le;
2034 char *data; 2051 char *data;
2035 char *data_tmp; 2052 char *data_tmp;
2036 size_t msg_extra_len; 2053 size_t attr_len;
2054 size_t attrs_len;
2037 2055
2038 GNUNET_CONTAINER_DLL_remove (handle->parallel_lookups_head, 2056 GNUNET_CONTAINER_DLL_remove (handle->parallel_lookups_head,
2039 handle->parallel_lookups_tail, 2057 handle->parallel_lookups_tail,
@@ -2043,31 +2061,32 @@ process_parallel_lookup2 (void *cls, uint32_t rd_count,
2043 GNUNET_break(0);//TODO 2061 GNUNET_break(0);//TODO
2044 if (rd->record_type == GNUNET_GNSRECORD_TYPE_ID_ATTR) 2062 if (rd->record_type == GNUNET_GNSRECORD_TYPE_ID_ATTR)
2045 { 2063 {
2046 msg_extra_len = GNUNET_CRYPTO_cpabe_decrypt (rd->data, 2064 attr_len = GNUNET_CRYPTO_cpabe_decrypt (rd->data,
2047 rd->data_size, 2065 rd->data_size,
2048 handle->key, 2066 handle->key,
2049 (void**)&data); 2067 (void**)&data);
2050 env = GNUNET_MQ_msg_extra (arm, 2068 attr_le = GNUNET_new (struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry);
2051 msg_extra_len, 2069 attr_le->attribute = attribute_deserialize (data,
2052 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT); 2070 attr_len);
2053 arm->id = htonl (handle->r_id); 2071 GNUNET_CONTAINER_DLL_insert (handle->attrs->list_head,
2054 arm->attr_len = htons (msg_extra_len); 2072 handle->attrs->list_tail,
2055 arm->identity = handle->ticket.identity; 2073 attr_le);
2056 data_tmp = (char *) &arm[1];
2057 GNUNET_memcpy (data_tmp,
2058 data,
2059 msg_extra_len);
2060 GNUNET_MQ_send (handle->client->mq, env);
2061 GNUNET_free (data); 2074 GNUNET_free (data);
2062 } 2075 }
2063 if (NULL != handle->parallel_lookups_head) 2076 if (NULL != handle->parallel_lookups_head)
2064 return; //Wait for more 2077 return; //Wait for more
2065 //Else we are done 2078 //Else we are done
2066 GNUNET_SCHEDULER_cancel (handle->kill_task); 2079 GNUNET_SCHEDULER_cancel (handle->kill_task);
2067 env = GNUNET_MQ_msg (arm, 2080 attrs_len = attribute_list_serialize_get_size (handle->attrs);
2068 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT); 2081 env = GNUNET_MQ_msg_extra (crm,
2069 arm->id = htonl (handle->r_id); 2082 attrs_len,
2070 arm->attr_len = htons (0); 2083 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT);
2084 crm->id = htonl (handle->r_id);
2085 crm->attrs_len = htons (attrs_len);
2086 crm->identity = handle->ticket.identity;
2087 data_tmp = (char *) &crm[1];
2088 attribute_list_serialize (handle->attrs,
2089 data_tmp);
2071 GNUNET_MQ_send (handle->client->mq, env); 2090 GNUNET_MQ_send (handle->client->mq, env);
2072} 2091}
2073 2092
@@ -2213,6 +2232,7 @@ handle_consume_ticket_message (void *cls,
2213 ch->r_id = ntohl (cm->id); 2232 ch->r_id = ntohl (cm->id);
2214 ch->client = idp; 2233 ch->client = idp;
2215 ch->identity = cm->identity; 2234 ch->identity = cm->identity;
2235 ch->attrs = GNUNET_new (struct GNUNET_IDENTITY_PROVIDER_AttributeList);
2216 GNUNET_CRYPTO_ecdsa_key_get_public (&ch->identity, 2236 GNUNET_CRYPTO_ecdsa_key_get_public (&ch->identity,
2217 &ch->identity_pub); 2237 &ch->identity_pub);
2218 ch->ticket = *((struct GNUNET_IDENTITY_PROVIDER_Ticket2*)&cm[1]); 2238 ch->ticket = *((struct GNUNET_IDENTITY_PROVIDER_Ticket2*)&cm[1]);
@@ -2713,7 +2733,7 @@ run_ticket_iteration_round (struct TicketIteration *ti)
2713 */ 2733 */
2714static void 2734static void
2715handle_ticket_iteration_start (void *cls, 2735handle_ticket_iteration_start (void *cls,
2716 const struct TicketIterationStartMessage *tis_msg) 2736 const struct TicketIterationStartMessage *tis_msg)
2717{ 2737{
2718 struct IdpClient *client = cls; 2738 struct IdpClient *client = cls;
2719 struct TicketIteration *ti; 2739 struct TicketIteration *ti;
@@ -2743,7 +2763,7 @@ handle_ticket_iteration_start (void *cls,
2743 */ 2763 */
2744static void 2764static void
2745handle_ticket_iteration_stop (void *cls, 2765handle_ticket_iteration_stop (void *cls,
2746 const struct TicketIterationStopMessage *tis_msg) 2766 const struct TicketIterationStopMessage *tis_msg)
2747{ 2767{
2748 struct IdpClient *client = cls; 2768 struct IdpClient *client = cls;
2749 struct TicketIteration *ti; 2769 struct TicketIteration *ti;
@@ -2778,7 +2798,7 @@ handle_ticket_iteration_stop (void *cls,
2778 */ 2798 */
2779static void 2799static void
2780handle_ticket_iteration_next (void *cls, 2800handle_ticket_iteration_next (void *cls,
2781 const struct TicketIterationNextMessage *tis_msg) 2801 const struct TicketIterationNextMessage *tis_msg)
2782{ 2802{
2783 struct IdpClient *client = cls; 2803 struct IdpClient *client = cls;
2784 struct TicketIteration *ti; 2804 struct TicketIteration *ti;
diff --git a/src/identity-provider/identity-provider.conf b/src/identity-provider/identity-provider.conf
index 826b2419e..7ee5e50d8 100644
--- a/src/identity-provider/identity-provider.conf
+++ b/src/identity-provider/identity-provider.conf
@@ -10,6 +10,7 @@ UNIXPATH = $GNUNET_USER_RUNTIME_DIR/gnunet-service-identity-provider.sock
10UNIX_MATCH_UID = NO 10UNIX_MATCH_UID = NO
11UNIX_MATCH_GID = YES 11UNIX_MATCH_GID = YES
12TOKEN_EXPIRATION_INTERVAL = 30 m 12TOKEN_EXPIRATION_INTERVAL = 30 m
13DATABASE = sqlite
13 14
14[identity-provider-sqlite] 15[identity-provider-sqlite]
15FILENAME = $GNUNET_DATA_HOME/identity-provider/sqlite.db 16FILENAME = $GNUNET_DATA_HOME/identity-provider/sqlite.db
diff --git a/src/identity-provider/identity_provider.h b/src/identity-provider/identity_provider.h
index 434af4d8c..96bed18f4 100644
--- a/src/identity-provider/identity_provider.h
+++ b/src/identity-provider/identity_provider.h
@@ -455,6 +455,42 @@ struct ConsumeTicketMessage
455 //Followed by a serialized ticket 455 //Followed by a serialized ticket
456}; 456};
457 457
458/**
459 * Attribute list is returned from the idp.
460 */
461struct ConsumeTicketResultMessage
462{
463 /**
464 * Message header
465 */
466 struct GNUNET_MessageHeader header;
467
468 /**
469 * Unique identifier for this request (for key collisions).
470 */
471 uint32_t id GNUNET_PACKED;
472
473 /**
474 * Length of serialized attribute data
475 */
476 uint16_t attrs_len GNUNET_PACKED;
477
478 /**
479 * always zero (for alignment)
480 */
481 uint16_t reserved GNUNET_PACKED;
482
483 /**
484 * The public key of the identity.
485 */
486 struct GNUNET_CRYPTO_EcdsaPublicKey identity;
487
488 /* followed by:
489 * serialized attributes data
490 */
491};
492
493
458 494
459GNUNET_NETWORK_STRUCT_END 495GNUNET_NETWORK_STRUCT_END
460 496
diff --git a/src/identity-provider/identity_provider_api.c b/src/identity-provider/identity_provider_api.c
index 7c9576d05..6e0ce7b42 100644
--- a/src/identity-provider/identity_provider_api.c
+++ b/src/identity-provider/identity_provider_api.c
@@ -516,6 +516,86 @@ handle_attribute_store_response (void *cls,
516 516
517} 517}
518 518
519
520/**
521 * Handle an incoming message of type
522 * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT
523 *
524 * @param cls
525 * @param msg the message we received
526 * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
527 */
528static int
529check_consume_ticket_result (void *cls,
530 const struct ConsumeTicketResultMessage *msg)
531{
532 size_t msg_len;
533 size_t attrs_len;
534
535 msg_len = ntohs (msg->header.size);
536 attrs_len = ntohs (msg->attrs_len);
537 if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len)
538 {
539 GNUNET_break (0);
540 return GNUNET_SYSERR;
541 }
542 return GNUNET_OK;
543}
544
545
546/**
547 * Handle an incoming message of type
548 * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT
549 *
550 * @param cls
551 * @param msg the message we received
552 */
553static void
554handle_consume_ticket_result (void *cls,
555 const struct ConsumeTicketResultMessage *msg)
556{
557 struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls;
558 struct GNUNET_IDENTITY_PROVIDER_Operation *op;
559 size_t attrs_len;
560 uint32_t r_id = ntohl (msg->id);
561
562 attrs_len = ntohs (msg->attrs_len);
563 LOG (GNUNET_ERROR_TYPE_MESSAGE,
564 "Processing attribute result.\n");
565
566
567 for (op = h->op_head; NULL != op; op = op->next)
568 if (op->r_id == r_id)
569 break;
570 if (NULL == op)
571 return;
572
573 {
574 struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs;
575 struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry *le;
576 attrs = attribute_list_deserialize ((char*)&msg[1],
577 attrs_len);
578 if (NULL != op->ar_cb)
579 {
580 for (le = attrs->list_head; NULL != le; le = le->next)
581 op->ar_cb (op->cls,
582 &msg->identity,
583 le->attribute);
584 }
585 attribute_list_destroy (attrs);
586 op->ar_cb (op->cls,
587 NULL,
588 NULL);
589 GNUNET_CONTAINER_DLL_remove (h->op_head,
590 h->op_tail,
591 op);
592 GNUNET_free (op);
593 return;
594 }
595 GNUNET_assert (0);
596}
597
598
519/** 599/**
520 * Handle an incoming message of type 600 * Handle an incoming message of type
521 * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT 601 * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT
@@ -551,7 +631,7 @@ check_attribute_result (void *cls,
551 */ 631 */
552static void 632static void
553handle_attribute_result (void *cls, 633handle_attribute_result (void *cls,
554 const struct AttributeResultMessage *msg) 634 const struct AttributeResultMessage *msg)
555{ 635{
556 static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy; 636 static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
557 struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls; 637 struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls;
@@ -716,6 +796,10 @@ reconnect (struct GNUNET_IDENTITY_PROVIDER_Handle *h)
716 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT, 796 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT,
717 struct TicketResultMessage, 797 struct TicketResultMessage,
718 h), 798 h),
799 GNUNET_MQ_hd_var_size (consume_ticket_result,
800 GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT,
801 struct ConsumeTicketResultMessage,
802 h),
719 GNUNET_MQ_handler_end () 803 GNUNET_MQ_handler_end ()
720 }; 804 };
721 struct GNUNET_IDENTITY_PROVIDER_Operation *op; 805 struct GNUNET_IDENTITY_PROVIDER_Operation *op;
diff --git a/src/identity-provider/plugin_identity_provider_sqlite.c b/src/identity-provider/plugin_identity_provider_sqlite.c
index d05baa79d..f31e2e68a 100644
--- a/src/identity-provider/plugin_identity_provider_sqlite.c
+++ b/src/identity-provider/plugin_identity_provider_sqlite.c
@@ -49,9 +49,9 @@
49 * a failure of the command 'cmd' on file 'filename' 49 * a failure of the command 'cmd' on file 'filename'
50 * with the message given by strerror(errno). 50 * with the message given by strerror(errno).
51 */ 51 */
52#define LOG_SQLITE(db, level, cmd) do { GNUNET_log_from (level, "namestore-identity-provider", _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(db->dbh)); } while(0) 52#define LOG_SQLITE(db, level, cmd) do { GNUNET_log_from (level, "identity-provider", _("`%s' failed at %s:%d with error: %s\n"), cmd, __FILE__, __LINE__, sqlite3_errmsg(db->dbh)); } while(0)
53 53
54#define LOG(kind,...) GNUNET_log_from (kind, "namestore-sqlite", __VA_ARGS__) 54#define LOG(kind,...) GNUNET_log_from (kind, "identity-provider-sqlite", __VA_ARGS__)
55 55
56 56
57/** 57/**
@@ -315,6 +315,8 @@ database_shutdown (struct Plugin *plugin)
315 sqlite3_finalize (plugin->delete_ticket); 315 sqlite3_finalize (plugin->delete_ticket);
316 if (NULL != plugin->iterate_tickets) 316 if (NULL != plugin->iterate_tickets)
317 sqlite3_finalize (plugin->iterate_tickets); 317 sqlite3_finalize (plugin->iterate_tickets);
318 if (NULL != plugin->iterate_tickets_by_audience)
319 sqlite3_finalize (plugin->iterate_tickets_by_audience);
318 result = sqlite3_close (plugin->dbh); 320 result = sqlite3_close (plugin->dbh);
319 if (result == SQLITE_BUSY) 321 if (result == SQLITE_BUSY)
320 { 322 {
@@ -653,7 +655,7 @@ libgnunet_plugin_identity_provider_sqlite_init (void *cls)
653 * @return always NULL 655 * @return always NULL
654 */ 656 */
655void * 657void *
656libgnunet_plugin_namestore_sqlite_done (void *cls) 658libgnunet_plugin_identity_provider_sqlite_done (void *cls)
657{ 659{
658 struct GNUNET_IDENTITY_PROVIDER_PluginFunctions *api = cls; 660 struct GNUNET_IDENTITY_PROVIDER_PluginFunctions *api = cls;
659 struct Plugin *plugin = api->cls; 661 struct Plugin *plugin = api->cls;
diff --git a/src/identity-provider/test_idp_issue.sh b/src/identity-provider/test_idp_issue.sh
index aca98e390..38369a33e 100755
--- a/src/identity-provider/test_idp_issue.sh
+++ b/src/identity-provider/test_idp_issue.sh
@@ -1,5 +1,5 @@
1#!/bin/bash 1#!/bin/bash
2trap "gnunet-arm -e -c test_idp_lookup.conf" SIGINT 2trap "gnunet-arm -e -c test_idp.conf" SIGINT
3 3
4LOCATION=$(which gnunet-config) 4LOCATION=$(which gnunet-config)
5if [ -z $LOCATION ] 5if [ -z $LOCATION ]
diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h
index 743a28946..b22e1b417 100644
--- a/src/include/gnunet_protocols.h
+++ b/src/include/gnunet_protocols.h
@@ -2646,11 +2646,13 @@ extern "C"
2646 2646
2647#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET 973 2647#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET 973
2648 2648
2649#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_START 974 2649#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT 974
2650 2650
2651#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_STOP 975 2651#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_START 975
2652 2652
2653#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_NEXT 976 2653#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_STOP 976
2654
2655#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_NEXT 977
2654 2656
2655/************************************************** 2657/**************************************************
2656 * 2658 *