aboutsummaryrefslogtreecommitdiff
path: root/src/identity-provider/gnunet-idp.c
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2017-09-16 22:39:15 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2017-09-16 22:39:15 +0200
commit67e0d73709ef557b52ba0527291d68c17fd6c60a (patch)
tree57dcf9848b436c01c3fc37e3d878445aaf142a4e /src/identity-provider/gnunet-idp.c
parentd5ec12fdbc288f376ee2ee18aceb00e338191f28 (diff)
downloadgnunet-67e0d73709ef557b52ba0527291d68c17fd6c60a.tar.gz
gnunet-67e0d73709ef557b52ba0527291d68c17fd6c60a.zip
-various fixes; add attribute list API
Diffstat (limited to 'src/identity-provider/gnunet-idp.c')
-rw-r--r--src/identity-provider/gnunet-idp.c70
1 files changed, 26 insertions, 44 deletions
diff --git a/src/identity-provider/gnunet-idp.c b/src/identity-provider/gnunet-idp.c
index b4785580a..264d77ba2 100644
--- a/src/identity-provider/gnunet-idp.c
+++ b/src/identity-provider/gnunet-idp.c
@@ -77,9 +77,9 @@ static struct GNUNET_IDENTITY_PROVIDER_Operation *idp_op;
77static struct GNUNET_NAMESTORE_Handle *namestore_handle; 77static struct GNUNET_NAMESTORE_Handle *namestore_handle;
78 78
79/** 79/**
80 * Namestore iterator 80 * Attribute iterator
81 */ 81 */
82static struct GNUNET_NAMESTORE_ZoneIterator *ns_iterator; 82static struct GNUNET_IDENTITY_PROVIDER_AttributeIterator *attr_iterator;
83 83
84/** 84/**
85 * Namestore queue 85 * Namestore queue
@@ -96,8 +96,10 @@ do_cleanup(void *cls)
96{ 96{
97 if (NULL != ns_qe) 97 if (NULL != ns_qe)
98 GNUNET_NAMESTORE_cancel (ns_qe); 98 GNUNET_NAMESTORE_cancel (ns_qe);
99 if (NULL != ns_iterator) 99 if (NULL != attr_iterator)
100 GNUNET_NAMESTORE_zone_iteration_stop (ns_iterator); 100 GNUNET_IDENTITY_PROVIDER_get_attributes_stop (attr_iterator);
101 if (NULL != idp_handle)
102 GNUNET_IDENTITY_PROVIDER_disconnect (idp_handle);
101 if (NULL != namestore_handle) 103 if (NULL != namestore_handle)
102 GNUNET_NAMESTORE_disconnect (namestore_handle); 104 GNUNET_NAMESTORE_disconnect (namestore_handle);
103 if (NULL != identity_handle) 105 if (NULL != identity_handle)
@@ -152,7 +154,7 @@ store_abe_cont (void *cls,
152static void 154static void
153iter_error (void *cls) 155iter_error (void *cls)
154{ 156{
155 ns_iterator = NULL; 157 attr_iterator = NULL;
156 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 158 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
157 "Failed to iterate over attributes\n"); 159 "Failed to iterate over attributes\n");
158 GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); 160 GNUNET_SCHEDULER_add_now (&do_cleanup, NULL);
@@ -161,37 +163,19 @@ iter_error (void *cls)
161static void 163static void
162iter_finished (void *cls) 164iter_finished (void *cls)
163{ 165{
164 ns_iterator = NULL; 166 attr_iterator = NULL;
165 GNUNET_SCHEDULER_add_now (&do_cleanup, NULL); 167 GNUNET_SCHEDULER_add_now (&do_cleanup, NULL);
166} 168}
167 169
168static void 170static void
169iter_cb (void *cls, 171iter_cb (void *cls,
170 const struct GNUNET_CRYPTO_EcdsaPrivateKey *zone, 172 const struct GNUNET_CRYPTO_EcdsaPrivateKey *identity,
171 const char *label, 173 const struct GNUNET_IDENTITY_PROVIDER_Attribute *attr)
172 unsigned int rd_count,
173 const struct GNUNET_GNSRECORD_Data *rd)
174{ 174{
175 struct GNUNET_CRYPTO_AbeKey *key; 175
176 int i; 176 GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
177 char *attr_value; 177 "%s: %s\n", attr->name, (char*)attr->data);
178 char* attrs[2]; 178 GNUNET_IDENTITY_PROVIDER_get_attributes_next (attr_iterator);
179 for (i=0;i<rd_count;i++) {
180 if (GNUNET_GNSRECORD_TYPE_ID_ATTR != rd[i].record_type)
181 continue;
182 attrs[0] = (char*)label;
183 attrs[1] = 0;
184 key = GNUNET_CRYPTO_cpabe_create_key (abe_key,
185 attrs);
186 GNUNET_CRYPTO_cpabe_decrypt (rd[i].data,
187 rd[i].data_size,
188 key,
189 (void**)&attr_value);
190 GNUNET_CRYPTO_cpabe_delete_key (key);
191 GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
192 "%s: %s\n", label, attr_value);
193 }
194 GNUNET_NAMESTORE_zone_iterator_next (ns_iterator);
195} 179}
196 180
197static void 181static void
@@ -235,25 +219,23 @@ abe_lookup_cb (void *cls,
235 } 219 }
236 220
237 if (list) { 221 if (list) {
238 ns_iterator = GNUNET_NAMESTORE_zone_iteration_start (namestore_handle, 222 attr_iterator = GNUNET_IDENTITY_PROVIDER_get_attributes_start (idp_handle,
239 zone, 223 zone,
240 &iter_error, 224 &iter_error,
241 NULL, 225 NULL,
242 &iter_cb, 226 &iter_cb,
243 NULL, 227 NULL,
244 &iter_finished, 228 &iter_finished,
245 NULL); 229 NULL);
246 return; 230 return;
247 } 231 }
248 232
249 struct GNUNET_IDENTITY_PROVIDER_Attribute *attr; 233 struct GNUNET_IDENTITY_PROVIDER_Attribute *attr = GNUNET_IDENTITY_PROVIDER_attribute_new (attr_name,
250 attr = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_PROVIDER_Attribute) + strlen (attr_value) + 1); 234 GNUNET_IDENTITY_PROVIDER_AT_STRING,
251 attr->attribute_type = GNUNET_IDENTITY_PROVIDER_AT_STRING; 235 attr_value,
252 attr->data = &attr[1]; 236 strlen (attr_value));
253 attr->data_size = strlen (attr_value) + 1;
254 idp_op = GNUNET_IDENTITY_PROVIDER_attribute_store (idp_handle, 237 idp_op = GNUNET_IDENTITY_PROVIDER_attribute_store (idp_handle,
255 zone, 238 zone,
256 attr_name,
257 attr, 239 attr,
258 &store_attr_cont, 240 &store_attr_cont,
259 NULL); 241 NULL);