[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnunet] 122/171: -fix bugs
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnunet] 122/171: -fix bugs |
Date: |
Thu, 04 Jan 2018 16:10:30 +0100 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit 1731fbd017731df1f3f88bd4b3beac765996a1ad
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Thu Oct 5 22:44:56 2017 +0200
-fix bugs
---
.../gnunet-service-identity-provider.c | 70 +++++++++++-------
src/identity-provider/identity-provider.conf | 1 +
src/identity-provider/identity_provider.h | 36 +++++++++
src/identity-provider/identity_provider_api.c | 86 +++++++++++++++++++++-
.../plugin_identity_provider_sqlite.c | 8 +-
src/identity-provider/test_idp_issue.sh | 2 +-
src/include/gnunet_protocols.h | 8 +-
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
struct GNUNET_CRYPTO_EcdsaPublicKey identity_pub;
/**
- * ParallelLookups DLL
+ * Lookup DLL
*/
struct ParallelLookup2 *parallel_lookups_head;
+
+ /**
+ * Lookup DLL
+ */
struct ParallelLookup2 *parallel_lookups_tail;
+ /**
+ * Kill task
+ */
struct GNUNET_SCHEDULER_Task *kill_task;
+
+ /**
+ * The ABE key
+ */
struct GNUNET_CRYPTO_AbeKey *key;
/**
+ * Attributes
+ */
+ struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs;
+
+ /**
* request id
*/
uint32_t r_id;
@@ -2029,11 +2045,13 @@ process_parallel_lookup2 (void *cls, uint32_t rd_count,
"Parallel lookup finished (count=%u)\n", rd_count);
struct ParallelLookup2 *parallel_lookup = cls;
struct ConsumeTicketHandle *handle = parallel_lookup->handle;
- struct AttributeResultMessage *arm;
+ struct ConsumeTicketResultMessage *crm;
struct GNUNET_MQ_Envelope *env;
+ struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry *attr_le;
char *data;
char *data_tmp;
- size_t msg_extra_len;
+ size_t attr_len;
+ size_t attrs_len;
GNUNET_CONTAINER_DLL_remove (handle->parallel_lookups_head,
handle->parallel_lookups_tail,
@@ -2043,31 +2061,32 @@ process_parallel_lookup2 (void *cls, uint32_t rd_count,
GNUNET_break(0);//TODO
if (rd->record_type == GNUNET_GNSRECORD_TYPE_ID_ATTR)
{
- msg_extra_len = GNUNET_CRYPTO_cpabe_decrypt (rd->data,
- rd->data_size,
- handle->key,
- (void**)&data);
- env = GNUNET_MQ_msg_extra (arm,
- msg_extra_len,
-
GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT);
- arm->id = htonl (handle->r_id);
- arm->attr_len = htons (msg_extra_len);
- arm->identity = handle->ticket.identity;
- data_tmp = (char *) &arm[1];
- GNUNET_memcpy (data_tmp,
- data,
- msg_extra_len);
- GNUNET_MQ_send (handle->client->mq, env);
+ attr_len = GNUNET_CRYPTO_cpabe_decrypt (rd->data,
+ rd->data_size,
+ handle->key,
+ (void**)&data);
+ attr_le = GNUNET_new (struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry);
+ attr_le->attribute = attribute_deserialize (data,
+ attr_len);
+ GNUNET_CONTAINER_DLL_insert (handle->attrs->list_head,
+ handle->attrs->list_tail,
+ attr_le);
GNUNET_free (data);
}
if (NULL != handle->parallel_lookups_head)
return; //Wait for more
//Else we are done
GNUNET_SCHEDULER_cancel (handle->kill_task);
- env = GNUNET_MQ_msg (arm,
- GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT);
- arm->id = htonl (handle->r_id);
- arm->attr_len = htons (0);
+ attrs_len = attribute_list_serialize_get_size (handle->attrs);
+ env = GNUNET_MQ_msg_extra (crm,
+ attrs_len,
+
GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT);
+ crm->id = htonl (handle->r_id);
+ crm->attrs_len = htons (attrs_len);
+ crm->identity = handle->ticket.identity;
+ data_tmp = (char *) &crm[1];
+ attribute_list_serialize (handle->attrs,
+ data_tmp);
GNUNET_MQ_send (handle->client->mq, env);
}
@@ -2213,6 +2232,7 @@ handle_consume_ticket_message (void *cls,
ch->r_id = ntohl (cm->id);
ch->client = idp;
ch->identity = cm->identity;
+ ch->attrs = GNUNET_new (struct GNUNET_IDENTITY_PROVIDER_AttributeList);
GNUNET_CRYPTO_ecdsa_key_get_public (&ch->identity,
&ch->identity_pub);
ch->ticket = *((struct GNUNET_IDENTITY_PROVIDER_Ticket2*)&cm[1]);
@@ -2713,7 +2733,7 @@ run_ticket_iteration_round (struct TicketIteration *ti)
*/
static void
handle_ticket_iteration_start (void *cls,
- const struct TicketIterationStartMessage *tis_msg)
+ const struct TicketIterationStartMessage
*tis_msg)
{
struct IdpClient *client = cls;
struct TicketIteration *ti;
@@ -2743,7 +2763,7 @@ handle_ticket_iteration_start (void *cls,
*/
static void
handle_ticket_iteration_stop (void *cls,
- const struct TicketIterationStopMessage *tis_msg)
+ const struct TicketIterationStopMessage *tis_msg)
{
struct IdpClient *client = cls;
struct TicketIteration *ti;
@@ -2778,7 +2798,7 @@ handle_ticket_iteration_stop (void *cls,
*/
static void
handle_ticket_iteration_next (void *cls,
- const struct TicketIterationNextMessage *tis_msg)
+ const struct TicketIterationNextMessage *tis_msg)
{
struct IdpClient *client = cls;
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
UNIX_MATCH_UID = NO
UNIX_MATCH_GID = YES
TOKEN_EXPIRATION_INTERVAL = 30 m
+DATABASE = sqlite
[identity-provider-sqlite]
FILENAME = $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
//Followed by a serialized ticket
};
+/**
+ * Attribute list is returned from the idp.
+ */
+struct ConsumeTicketResultMessage
+{
+ /**
+ * Message header
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * Unique identifier for this request (for key collisions).
+ */
+ uint32_t id GNUNET_PACKED;
+
+ /**
+ * Length of serialized attribute data
+ */
+ uint16_t attrs_len GNUNET_PACKED;
+
+ /**
+ * always zero (for alignment)
+ */
+ uint16_t reserved GNUNET_PACKED;
+
+ /**
+ * The public key of the identity.
+ */
+ struct GNUNET_CRYPTO_EcdsaPublicKey identity;
+
+ /* followed by:
+ * serialized attributes data
+ */
+};
+
+
GNUNET_NETWORK_STRUCT_END
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,
}
+
+/**
+ * Handle an incoming message of type
+ * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT
+ *
+ * @param cls
+ * @param msg the message we received
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
+ */
+static int
+check_consume_ticket_result (void *cls,
+ const struct ConsumeTicketResultMessage *msg)
+{
+ size_t msg_len;
+ size_t attrs_len;
+
+ msg_len = ntohs (msg->header.size);
+ attrs_len = ntohs (msg->attrs_len);
+ if (msg_len != sizeof (struct ConsumeTicketResultMessage) + attrs_len)
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
+ * Handle an incoming message of type
+ * #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT
+ *
+ * @param cls
+ * @param msg the message we received
+ */
+static void
+handle_consume_ticket_result (void *cls,
+ const struct ConsumeTicketResultMessage *msg)
+{
+ struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls;
+ struct GNUNET_IDENTITY_PROVIDER_Operation *op;
+ size_t attrs_len;
+ uint32_t r_id = ntohl (msg->id);
+
+ attrs_len = ntohs (msg->attrs_len);
+ LOG (GNUNET_ERROR_TYPE_MESSAGE,
+ "Processing attribute result.\n");
+
+
+ for (op = h->op_head; NULL != op; op = op->next)
+ if (op->r_id == r_id)
+ break;
+ if (NULL == op)
+ return;
+
+ {
+ struct GNUNET_IDENTITY_PROVIDER_AttributeList *attrs;
+ struct GNUNET_IDENTITY_PROVIDER_AttributeListEntry *le;
+ attrs = attribute_list_deserialize ((char*)&msg[1],
+ attrs_len);
+ if (NULL != op->ar_cb)
+ {
+ for (le = attrs->list_head; NULL != le; le = le->next)
+ op->ar_cb (op->cls,
+ &msg->identity,
+ le->attribute);
+ }
+ attribute_list_destroy (attrs);
+ op->ar_cb (op->cls,
+ NULL,
+ NULL);
+ GNUNET_CONTAINER_DLL_remove (h->op_head,
+ h->op_tail,
+ op);
+ GNUNET_free (op);
+ return;
+ }
+ GNUNET_assert (0);
+}
+
+
/**
* Handle an incoming message of type
* #GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ATTRIBUTE_RESULT
@@ -551,7 +631,7 @@ check_attribute_result (void *cls,
*/
static void
handle_attribute_result (void *cls,
- const struct AttributeResultMessage *msg)
+ const struct AttributeResultMessage *msg)
{
static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
struct GNUNET_IDENTITY_PROVIDER_Handle *h = cls;
@@ -716,6 +796,10 @@ reconnect (struct GNUNET_IDENTITY_PROVIDER_Handle *h)
GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_RESULT,
struct TicketResultMessage,
h),
+ GNUNET_MQ_hd_var_size (consume_ticket_result,
+
GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT,
+ struct ConsumeTicketResultMessage,
+ h),
GNUNET_MQ_handler_end ()
};
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 @@
* a failure of the command 'cmd' on file 'filename'
* with the message given by strerror(errno).
*/
-#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)
+#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)
-#define LOG(kind,...) GNUNET_log_from (kind, "namestore-sqlite", __VA_ARGS__)
+#define LOG(kind,...) GNUNET_log_from (kind, "identity-provider-sqlite",
__VA_ARGS__)
/**
@@ -315,6 +315,8 @@ database_shutdown (struct Plugin *plugin)
sqlite3_finalize (plugin->delete_ticket);
if (NULL != plugin->iterate_tickets)
sqlite3_finalize (plugin->iterate_tickets);
+ if (NULL != plugin->iterate_tickets_by_audience)
+ sqlite3_finalize (plugin->iterate_tickets_by_audience);
result = sqlite3_close (plugin->dbh);
if (result == SQLITE_BUSY)
{
@@ -653,7 +655,7 @@ libgnunet_plugin_identity_provider_sqlite_init (void *cls)
* @return always NULL
*/
void *
-libgnunet_plugin_namestore_sqlite_done (void *cls)
+libgnunet_plugin_identity_provider_sqlite_done (void *cls)
{
struct GNUNET_IDENTITY_PROVIDER_PluginFunctions *api = cls;
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 @@
#!/bin/bash
-trap "gnunet-arm -e -c test_idp_lookup.conf" SIGINT
+trap "gnunet-arm -e -c test_idp.conf" SIGINT
LOCATION=$(which gnunet-config)
if [ -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"
#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET 973
-#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_START 974
+#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_CONSUME_TICKET_RESULT 974
-#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_STOP 975
+#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_START 975
-#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_NEXT 976
+#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_STOP 976
+
+#define GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_TICKET_ITERATION_NEXT 977
/**************************************************
*
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnunet] 116/171: - rework issue api, (continued)
- [GNUnet-SVN] [gnunet] 116/171: - rework issue api, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 105/171: Merge branch 'abe' into identity_abe, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 115/171: -various fixes; add attribute list API, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 155/171: -fix, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 157/171: -add decrypt stats, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 140/171: -add REST revoke API, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 121/171: -add ticket DB for IdP, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 134/171: -add api impl for revocation, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 120/171: Merge remote-tracking branch 'origin/master' into identity_abe, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 117/171: -add comments, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 122/171: -fix bugs,
gnunet <=
- [GNUnet-SVN] [gnunet] 169/171: update README, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 153/171: -add j to make, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 128/171: -readd new rest plugin, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 171/171: Merge remote-tracking branch 'origin/identity_abe', gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 110/171: Merge remote-tracking branch 'origin/master' into identity_abe, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 113/171: - Add attribute store API to IdP service, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 132/171: -finish revocation in service, cleanup, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 119/171: -add consume API, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 127/171: -revise API naming; cleanups, gnunet, 2018/01/04
- [GNUnet-SVN] [gnunet] 163/171: -move jwt back into idp, gnunet, 2018/01/04