aboutsummaryrefslogtreecommitdiff
path: root/src/reclaim/plugin_rest_openid_connect.c
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2020-08-19 19:05:23 +0200
committerMartin Schanzenbach <mschanzenbach@posteo.de>2020-08-20 17:59:01 +0200
commite75869506cc08e08056168383bd4ab02e1f007de (patch)
treeb4617425e38fbd7070f6a6d7cd41544a7f41df5d /src/reclaim/plugin_rest_openid_connect.c
parent1ca1140d4602dcc5c66da0d1ab1b082db9258ead (diff)
downloadgnunet-e75869506cc08e08056168383bd4ab02e1f007de.tar.gz
gnunet-e75869506cc08e08056168383bd4ab02e1f007de.zip
- towards separation between credentials and presentations thereof, wip, ftbfs
Diffstat (limited to 'src/reclaim/plugin_rest_openid_connect.c')
-rw-r--r--src/reclaim/plugin_rest_openid_connect.c142
1 files changed, 72 insertions, 70 deletions
diff --git a/src/reclaim/plugin_rest_openid_connect.c b/src/reclaim/plugin_rest_openid_connect.c
index 2f44917c9..5ae6565af 100644
--- a/src/reclaim/plugin_rest_openid_connect.c
+++ b/src/reclaim/plugin_rest_openid_connect.c
@@ -439,9 +439,9 @@ struct RequestHandle
439 struct GNUNET_RECLAIM_AttributeList *attr_userinfo_list; 439 struct GNUNET_RECLAIM_AttributeList *attr_userinfo_list;
440 440
441 /** 441 /**
442 * Attestation list 442 * Credential list
443 */ 443 */
444 struct GNUNET_RECLAIM_AttestationList *attests_list; 444 struct GNUNET_RECLAIM_CredentialList *creds_list;
445 445
446 446
447 /** 447 /**
@@ -461,9 +461,9 @@ struct RequestHandle
461 struct GNUNET_RECLAIM_AttributeIterator *attr_it; 461 struct GNUNET_RECLAIM_AttributeIterator *attr_it;
462 462
463 /** 463 /**
464 * Attestation iterator 464 * Credential iterator
465 */ 465 */
466 struct GNUNET_RECLAIM_AttestationIterator *attest_it; 466 struct GNUNET_RECLAIM_CredentialIterator *cred_it;
467 467
468 468
469 /** 469 /**
@@ -561,8 +561,8 @@ cleanup_handle (struct RequestHandle *handle)
561 GNUNET_SCHEDULER_cancel (handle->timeout_task); 561 GNUNET_SCHEDULER_cancel (handle->timeout_task);
562 if (NULL != handle->attr_it) 562 if (NULL != handle->attr_it)
563 GNUNET_RECLAIM_get_attributes_stop (handle->attr_it); 563 GNUNET_RECLAIM_get_attributes_stop (handle->attr_it);
564 if (NULL != handle->attest_it) 564 if (NULL != handle->cred_it)
565 GNUNET_RECLAIM_get_attestations_stop (handle->attest_it); 565 GNUNET_RECLAIM_get_credentials_stop (handle->cred_it);
566 if (NULL != handle->ticket_it) 566 if (NULL != handle->ticket_it)
567 GNUNET_RECLAIM_ticket_iteration_stop (handle->ticket_it); 567 GNUNET_RECLAIM_ticket_iteration_stop (handle->ticket_it);
568 if (NULL != handle->idp_op) 568 if (NULL != handle->idp_op)
@@ -590,8 +590,8 @@ cleanup_handle (struct RequestHandle *handle)
590 GNUNET_RECLAIM_attribute_list_destroy (handle->attr_idtoken_list); 590 GNUNET_RECLAIM_attribute_list_destroy (handle->attr_idtoken_list);
591 if (NULL!=handle->attr_userinfo_list) 591 if (NULL!=handle->attr_userinfo_list)
592 GNUNET_RECLAIM_attribute_list_destroy (handle->attr_userinfo_list); 592 GNUNET_RECLAIM_attribute_list_destroy (handle->attr_userinfo_list);
593 if (NULL!=handle->attests_list) 593 if (NULL!=handle->creds_list)
594 GNUNET_RECLAIM_attestation_list_destroy (handle->attests_list); 594 GNUNET_RECLAIM_credential_list_destroy (handle->creds_list);
595 GNUNET_CONTAINER_DLL_remove (requests_head, 595 GNUNET_CONTAINER_DLL_remove (requests_head,
596 requests_tail, 596 requests_tail,
597 handle); 597 handle);
@@ -957,7 +957,7 @@ oidc_ticket_issue_cb (void *cls, const struct GNUNET_RECLAIM_Ticket *ticket)
957 code_string = OIDC_build_authz_code (&handle->priv_key, 957 code_string = OIDC_build_authz_code (&handle->priv_key,
958 &handle->ticket, 958 &handle->ticket,
959 handle->attr_idtoken_list, 959 handle->attr_idtoken_list,
960 handle->attests_list, 960 handle->creds_list,
961 handle->oidc->nonce, 961 handle->oidc->nonce,
962 handle->oidc->code_challenge); 962 handle->oidc->code_challenge);
963 if ((NULL != handle->redirect_prefix) && (NULL != handle->redirect_suffix) && 963 if ((NULL != handle->redirect_prefix) && (NULL != handle->redirect_suffix) &&
@@ -1010,13 +1010,13 @@ attribute_list_merge (struct GNUNET_RECLAIM_AttributeList *list_a,
1010 le_m = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); 1010 le_m = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry);
1011 le_m->attribute = GNUNET_RECLAIM_attribute_new (le_a->attribute->name, 1011 le_m->attribute = GNUNET_RECLAIM_attribute_new (le_a->attribute->name,
1012 &le_a->attribute-> 1012 &le_a->attribute->
1013 attestation, 1013 credential,
1014 le_a->attribute->type, 1014 le_a->attribute->type,
1015 le_a->attribute->data, 1015 le_a->attribute->data,
1016 le_a->attribute->data_size); 1016 le_a->attribute->data_size);
1017 le_m->attribute->id = le_a->attribute->id; 1017 le_m->attribute->id = le_a->attribute->id;
1018 le_m->attribute->flag = le_a->attribute->flag; 1018 le_m->attribute->flag = le_a->attribute->flag;
1019 le_m->attribute->attestation = le_a->attribute->attestation; 1019 le_m->attribute->credential = le_a->attribute->credential;
1020 GNUNET_CONTAINER_DLL_insert (merged_list->list_head, 1020 GNUNET_CONTAINER_DLL_insert (merged_list->list_head,
1021 merged_list->list_tail, 1021 merged_list->list_tail,
1022 le_m); 1022 le_m);
@@ -1035,13 +1035,13 @@ attribute_list_merge (struct GNUNET_RECLAIM_AttributeList *list_a,
1035 le_m = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); 1035 le_m = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry);
1036 le_m->attribute = GNUNET_RECLAIM_attribute_new (le_b->attribute->name, 1036 le_m->attribute = GNUNET_RECLAIM_attribute_new (le_b->attribute->name,
1037 &le_b->attribute-> 1037 &le_b->attribute->
1038 attestation, 1038 credential,
1039 le_b->attribute->type, 1039 le_b->attribute->type,
1040 le_b->attribute->data, 1040 le_b->attribute->data,
1041 le_b->attribute->data_size); 1041 le_b->attribute->data_size);
1042 le_m->attribute->id = le_b->attribute->id; 1042 le_m->attribute->id = le_b->attribute->id;
1043 le_m->attribute->flag = le_b->attribute->flag; 1043 le_m->attribute->flag = le_b->attribute->flag;
1044 le_m->attribute->attestation = le_b->attribute->attestation; 1044 le_m->attribute->credential = le_b->attribute->credential;
1045 GNUNET_CONTAINER_DLL_insert (merged_list->list_head, 1045 GNUNET_CONTAINER_DLL_insert (merged_list->list_head,
1046 merged_list->list_tail, 1046 merged_list->list_tail,
1047 le_m); 1047 le_m);
@@ -1051,13 +1051,13 @@ attribute_list_merge (struct GNUNET_RECLAIM_AttributeList *list_a,
1051 1051
1052 1052
1053static void 1053static void
1054oidc_attest_collect_finished_cb (void *cls) 1054oidc_cred_collect_finished_cb (void *cls)
1055{ 1055{
1056 struct RequestHandle *handle = cls; 1056 struct RequestHandle *handle = cls;
1057 struct GNUNET_RECLAIM_AttributeList *merged_list; 1057 struct GNUNET_RECLAIM_AttributeList *merged_list;
1058 struct GNUNET_RECLAIM_AttributeListEntry *le_m; 1058 struct GNUNET_RECLAIM_AttributeListEntry *le_m;
1059 1059
1060 handle->attest_it = NULL; 1060 handle->cred_it = NULL;
1061 merged_list = attribute_list_merge (handle->attr_idtoken_list, 1061 merged_list = attribute_list_merge (handle->attr_idtoken_list,
1062 handle->attr_userinfo_list); 1062 handle->attr_userinfo_list);
1063 for (le_m = merged_list->list_head; NULL != le_m; le_m = le_m->next) 1063 for (le_m = merged_list->list_head; NULL != le_m; le_m = le_m->next)
@@ -1078,40 +1078,40 @@ oidc_attest_collect_finished_cb (void *cls)
1078 * Collects all attributes for an ego if in scope parameter 1078 * Collects all attributes for an ego if in scope parameter
1079 */ 1079 */
1080static void 1080static void
1081oidc_attest_collect (void *cls, 1081oidc_cred_collect (void *cls,
1082 const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, 1082 const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
1083 const struct GNUNET_RECLAIM_Attestation *attest) 1083 const struct GNUNET_RECLAIM_Credential *cred)
1084{ 1084{
1085 struct RequestHandle *handle = cls; 1085 struct RequestHandle *handle = cls;
1086 struct GNUNET_RECLAIM_AttributeListEntry *le; 1086 struct GNUNET_RECLAIM_AttributeListEntry *le;
1087 struct GNUNET_RECLAIM_AttestationListEntry *ale; 1087 struct GNUNET_RECLAIM_CredentialListEntry *ale;
1088 1088
1089 for (ale = handle->attests_list->list_head; NULL != ale; ale = ale->next) 1089 for (ale = handle->creds_list->list_head; NULL != ale; ale = ale->next)
1090 { 1090 {
1091 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&ale->attestation->id, 1091 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&ale->credential->id,
1092 &attest->id)) 1092 &cred->id))
1093 continue; 1093 continue;
1094 /** Attestation already in list **/ 1094 /** Credential already in list **/
1095 GNUNET_RECLAIM_get_attestations_next (handle->attest_it); 1095 GNUNET_RECLAIM_get_credentials_next (handle->cred_it);
1096 return; 1096 return;
1097 } 1097 }
1098 1098
1099 for (le = handle->attr_idtoken_list->list_head; NULL != le; le = le->next) 1099 for (le = handle->attr_idtoken_list->list_head; NULL != le; le = le->next)
1100 { 1100 {
1101 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&le->attribute->attestation, 1101 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&le->attribute->credential,
1102 &attest->id)) 1102 &cred->id))
1103 continue; 1103 continue;
1104 /** Attestation matches for attribute, add **/ 1104 /** Credential matches for attribute, add **/
1105 ale = GNUNET_new (struct GNUNET_RECLAIM_AttestationListEntry); 1105 ale = GNUNET_new (struct GNUNET_RECLAIM_CredentialListEntry);
1106 ale->attestation = GNUNET_RECLAIM_attestation_new (attest->name, 1106 ale->credential = GNUNET_RECLAIM_credential_new (cred->name,
1107 attest->type, 1107 cred->type,
1108 attest->data, 1108 cred->data,
1109 attest->data_size); 1109 cred->data_size);
1110 GNUNET_CONTAINER_DLL_insert (handle->attests_list->list_head, 1110 GNUNET_CONTAINER_DLL_insert (handle->creds_list->list_head,
1111 handle->attests_list->list_tail, 1111 handle->creds_list->list_tail,
1112 ale); 1112 ale);
1113 } 1113 }
1114 GNUNET_RECLAIM_get_attestations_next (handle->attest_it); 1114 GNUNET_RECLAIM_get_credentials_next (handle->cred_it);
1115} 1115}
1116 1116
1117 1117
@@ -1129,16 +1129,16 @@ oidc_attr_collect_finished_cb (void *cls)
1129 GNUNET_SCHEDULER_add_now (&do_redirect_error, handle); 1129 GNUNET_SCHEDULER_add_now (&do_redirect_error, handle);
1130 return; 1130 return;
1131 } 1131 }
1132 handle->attests_list = GNUNET_new (struct GNUNET_RECLAIM_AttestationList); 1132 handle->creds_list = GNUNET_new (struct GNUNET_RECLAIM_CredentialList);
1133 handle->attest_it = 1133 handle->cred_it =
1134 GNUNET_RECLAIM_get_attestations_start (idp, 1134 GNUNET_RECLAIM_get_credentials_start (idp,
1135 &handle->priv_key, 1135 &handle->priv_key,
1136 &oidc_iteration_error, 1136 &oidc_iteration_error,
1137 handle, 1137 handle,
1138 &oidc_attest_collect, 1138 &oidc_cred_collect,
1139 handle, 1139 handle,
1140 &oidc_attest_collect_finished_cb, 1140 &oidc_cred_collect_finished_cb,
1141 handle); 1141 handle);
1142 1142
1143} 1143}
1144 1144
@@ -1212,13 +1212,13 @@ oidc_attr_collect (void *cls,
1212 { 1212 {
1213 le = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); 1213 le = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry);
1214 le->attribute = GNUNET_RECLAIM_attribute_new (attr->name, 1214 le->attribute = GNUNET_RECLAIM_attribute_new (attr->name,
1215 &attr->attestation, 1215 &attr->credential,
1216 attr->type, 1216 attr->type,
1217 attr->data, 1217 attr->data,
1218 attr->data_size); 1218 attr->data_size);
1219 le->attribute->id = attr->id; 1219 le->attribute->id = attr->id;
1220 le->attribute->flag = attr->flag; 1220 le->attribute->flag = attr->flag;
1221 le->attribute->attestation = attr->attestation; 1221 le->attribute->credential = attr->credential;
1222 GNUNET_CONTAINER_DLL_insert (handle->attr_idtoken_list->list_head, 1222 GNUNET_CONTAINER_DLL_insert (handle->attr_idtoken_list->list_head,
1223 handle->attr_idtoken_list->list_tail, 1223 handle->attr_idtoken_list->list_tail,
1224 le); 1224 le);
@@ -1227,13 +1227,13 @@ oidc_attr_collect (void *cls,
1227 { 1227 {
1228 le = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); 1228 le = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry);
1229 le->attribute = GNUNET_RECLAIM_attribute_new (attr->name, 1229 le->attribute = GNUNET_RECLAIM_attribute_new (attr->name,
1230 &attr->attestation, 1230 &attr->credential,
1231 attr->type, 1231 attr->type,
1232 attr->data, 1232 attr->data,
1233 attr->data_size); 1233 attr->data_size);
1234 le->attribute->id = attr->id; 1234 le->attribute->id = attr->id;
1235 le->attribute->flag = attr->flag; 1235 le->attribute->flag = attr->flag;
1236 le->attribute->attestation = attr->attestation; 1236 le->attribute->credential = attr->credential;
1237 GNUNET_CONTAINER_DLL_insert (handle->attr_userinfo_list->list_head, 1237 GNUNET_CONTAINER_DLL_insert (handle->attr_userinfo_list->list_head,
1238 handle->attr_userinfo_list->list_tail, 1238 handle->attr_userinfo_list->list_tail,
1239 le); 1239 le);
@@ -1982,7 +1982,7 @@ token_endpoint (struct GNUNET_REST_RequestHandle *con_handle,
1982 const struct EgoEntry *ego_entry; 1982 const struct EgoEntry *ego_entry;
1983 struct GNUNET_TIME_Relative expiration_time; 1983 struct GNUNET_TIME_Relative expiration_time;
1984 struct GNUNET_RECLAIM_AttributeList *cl = NULL; 1984 struct GNUNET_RECLAIM_AttributeList *cl = NULL;
1985 struct GNUNET_RECLAIM_AttestationList *al = NULL; 1985 struct GNUNET_RECLAIM_CredentialList *al = NULL;
1986 struct GNUNET_RECLAIM_Ticket ticket; 1986 struct GNUNET_RECLAIM_Ticket ticket;
1987 struct GNUNET_CRYPTO_EcdsaPublicKey cid; 1987 struct GNUNET_CRYPTO_EcdsaPublicKey cid;
1988 struct GNUNET_HashCode cache_key; 1988 struct GNUNET_HashCode cache_key;
@@ -2124,7 +2124,7 @@ token_endpoint (struct GNUNET_REST_RequestHandle *con_handle,
2124 MHD_add_response_header (resp, "Content-Type", "application/json"); 2124 MHD_add_response_header (resp, "Content-Type", "application/json");
2125 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 2125 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
2126 GNUNET_RECLAIM_attribute_list_destroy (cl); 2126 GNUNET_RECLAIM_attribute_list_destroy (cl);
2127 GNUNET_RECLAIM_attestation_list_destroy (al); 2127 GNUNET_RECLAIM_credential_list_destroy (al);
2128 GNUNET_free (access_token); 2128 GNUNET_free (access_token);
2129 GNUNET_free (json_response); 2129 GNUNET_free (json_response);
2130 GNUNET_free (id_token); 2130 GNUNET_free (id_token);
@@ -2139,11 +2139,11 @@ static void
2139consume_ticket (void *cls, 2139consume_ticket (void *cls,
2140 const struct GNUNET_CRYPTO_EcdsaPublicKey *identity, 2140 const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
2141 const struct GNUNET_RECLAIM_Attribute *attr, 2141 const struct GNUNET_RECLAIM_Attribute *attr,
2142 const struct GNUNET_RECLAIM_Attestation *attest) 2142 const struct GNUNET_RECLAIM_Credential *cred)
2143{ 2143{
2144 struct RequestHandle *handle = cls; 2144 struct RequestHandle *handle = cls;
2145 struct GNUNET_RECLAIM_AttributeListEntry *ale; 2145 struct GNUNET_RECLAIM_AttributeListEntry *ale;
2146 struct GNUNET_RECLAIM_AttestationListEntry *atle; 2146 struct GNUNET_RECLAIM_CredentialListEntry *atle;
2147 struct MHD_Response *resp; 2147 struct MHD_Response *resp;
2148 char *result_str; 2148 char *result_str;
2149 handle->idp_op = NULL; 2149 handle->idp_op = NULL;
@@ -2152,7 +2152,7 @@ consume_ticket (void *cls,
2152 { 2152 {
2153 result_str = OIDC_generate_userinfo (&handle->ticket.identity, 2153 result_str = OIDC_generate_userinfo (&handle->ticket.identity,
2154 handle->attr_userinfo_list, 2154 handle->attr_userinfo_list,
2155 handle->attests_list); 2155 handle->creds_list);
2156 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Userinfo: %s\n", result_str); 2156 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Userinfo: %s\n", result_str);
2157 resp = GNUNET_REST_create_response (result_str); 2157 resp = GNUNET_REST_create_response (result_str);
2158 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK); 2158 handle->proc (handle->proc_cls, resp, MHD_HTTP_OK);
@@ -2162,35 +2162,35 @@ consume_ticket (void *cls,
2162 } 2162 }
2163 ale = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry); 2163 ale = GNUNET_new (struct GNUNET_RECLAIM_AttributeListEntry);
2164 ale->attribute = GNUNET_RECLAIM_attribute_new (attr->name, 2164 ale->attribute = GNUNET_RECLAIM_attribute_new (attr->name,
2165 &attr->attestation, 2165 &attr->credential,
2166 attr->type, 2166 attr->type,
2167 attr->data, 2167 attr->data,
2168 attr->data_size); 2168 attr->data_size);
2169 ale->attribute->id = attr->id; 2169 ale->attribute->id = attr->id;
2170 ale->attribute->flag = attr->flag; 2170 ale->attribute->flag = attr->flag;
2171 ale->attribute->attestation = attr->attestation; 2171 ale->attribute->credential = attr->credential;
2172 GNUNET_CONTAINER_DLL_insert (handle->attr_userinfo_list->list_head, 2172 GNUNET_CONTAINER_DLL_insert (handle->attr_userinfo_list->list_head,
2173 handle->attr_userinfo_list->list_tail, 2173 handle->attr_userinfo_list->list_tail,
2174 ale); 2174 ale);
2175 if (NULL == attest) 2175 if (NULL == cred)
2176 return; 2176 return;
2177 for (atle = handle->attests_list->list_head; NULL != atle; atle = atle->next) 2177 for (atle = handle->creds_list->list_head; NULL != atle; atle = atle->next)
2178 { 2178 {
2179 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&atle->attestation->id, 2179 if (GNUNET_NO == GNUNET_RECLAIM_id_is_equal (&atle->credential->id,
2180 &attest->id)) 2180 &cred->id))
2181 continue; 2181 continue;
2182 break; /** already in list **/ 2182 break; /** already in list **/
2183 } 2183 }
2184 if (NULL == atle) 2184 if (NULL == atle)
2185 { 2185 {
2186 /** Attestation matches for attribute, add **/ 2186 /** Credential matches for attribute, add **/
2187 atle = GNUNET_new (struct GNUNET_RECLAIM_AttestationListEntry); 2187 atle = GNUNET_new (struct GNUNET_RECLAIM_CredentialListEntry);
2188 atle->attestation = GNUNET_RECLAIM_attestation_new (attest->name, 2188 atle->credential = GNUNET_RECLAIM_credential_new (cred->name,
2189 attest->type, 2189 cred->type,
2190 attest->data, 2190 cred->data,
2191 attest->data_size); 2191 cred->data_size);
2192 GNUNET_CONTAINER_DLL_insert (handle->attests_list->list_head, 2192 GNUNET_CONTAINER_DLL_insert (handle->creds_list->list_head,
2193 handle->attests_list->list_tail, 2193 handle->creds_list->list_tail,
2194 atle); 2194 atle);
2195 } 2195 }
2196} 2196}
@@ -2289,8 +2289,8 @@ userinfo_endpoint (struct GNUNET_REST_RequestHandle *con_handle,
2289 privkey = GNUNET_IDENTITY_ego_get_private_key (aud_ego->ego); 2289 privkey = GNUNET_IDENTITY_ego_get_private_key (aud_ego->ego);
2290 handle->attr_userinfo_list = 2290 handle->attr_userinfo_list =
2291 GNUNET_new (struct GNUNET_RECLAIM_AttributeList); 2291 GNUNET_new (struct GNUNET_RECLAIM_AttributeList);
2292 handle->attests_list = 2292 handle->creds_list =
2293 GNUNET_new (struct GNUNET_RECLAIM_AttestationList); 2293 GNUNET_new (struct GNUNET_RECLAIM_CredentialList);
2294 2294
2295 handle->idp_op = GNUNET_RECLAIM_ticket_consume (idp, 2295 handle->idp_op = GNUNET_RECLAIM_ticket_consume (idp,
2296 privkey, 2296 privkey,
@@ -2611,6 +2611,7 @@ libgnunet_plugin_rest_openid_connect_init (void *cls)
2611 return api; 2611 return api;
2612} 2612}
2613 2613
2614
2614static int 2615static int
2615cleanup_hashmap (void *cls, const struct GNUNET_HashCode *key, void *value) 2616cleanup_hashmap (void *cls, const struct GNUNET_HashCode *key, void *value)
2616{ 2617{
@@ -2618,6 +2619,7 @@ cleanup_hashmap (void *cls, const struct GNUNET_HashCode *key, void *value)
2618 return GNUNET_YES; 2619 return GNUNET_YES;
2619} 2620}
2620 2621
2622
2621/** 2623/**
2622 * Exit point from the plugin. 2624 * Exit point from the plugin.
2623 * 2625 *