diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-09-16 22:39:15 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-09-16 22:39:15 +0200 |
commit | 67e0d73709ef557b52ba0527291d68c17fd6c60a (patch) | |
tree | 57dcf9848b436c01c3fc37e3d878445aaf142a4e /src/identity-provider/gnunet-idp.c | |
parent | d5ec12fdbc288f376ee2ee18aceb00e338191f28 (diff) | |
download | gnunet-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.c | 70 |
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; | |||
77 | static struct GNUNET_NAMESTORE_Handle *namestore_handle; | 77 | static struct GNUNET_NAMESTORE_Handle *namestore_handle; |
78 | 78 | ||
79 | /** | 79 | /** |
80 | * Namestore iterator | 80 | * Attribute iterator |
81 | */ | 81 | */ |
82 | static struct GNUNET_NAMESTORE_ZoneIterator *ns_iterator; | 82 | static 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, | |||
152 | static void | 154 | static void |
153 | iter_error (void *cls) | 155 | iter_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) | |||
161 | static void | 163 | static void |
162 | iter_finished (void *cls) | 164 | iter_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 | ||
168 | static void | 170 | static void |
169 | iter_cb (void *cls, | 171 | iter_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 | ||
197 | static void | 181 | static 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); |