aboutsummaryrefslogtreecommitdiff
path: root/src/util/pseudonym.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/pseudonym.c')
-rw-r--r--src/util/pseudonym.c223
1 files changed, 112 insertions, 111 deletions
diff --git a/src/util/pseudonym.c b/src/util/pseudonym.c
index 3f0305e87..254decb76 100644
--- a/src/util/pseudonym.c
+++ b/src/util/pseudonym.c
@@ -84,10 +84,10 @@ internal_notify (const GNUNET_HashCode * id,
84 84
85 pos = head; 85 pos = head;
86 while (pos != NULL) 86 while (pos != NULL)
87 { 87 {
88 pos->callback (pos->closure, id, md, rating); 88 pos->callback (pos->closure, id, md, rating);
89 pos = pos->next; 89 pos = pos->next;
90 } 90 }
91} 91}
92 92
93/** 93/**
@@ -131,10 +131,10 @@ GNUNET_PSEUDONYM_discovery_callback_unregister (GNUNET_PSEUDONYM_Iterator
131 pos = head; 131 pos = head;
132 while ((pos != NULL) && 132 while ((pos != NULL) &&
133 ((pos->callback != iterator) || (pos->closure != closure))) 133 ((pos->callback != iterator) || (pos->closure != closure)))
134 { 134 {
135 prev = pos; 135 prev = pos;
136 pos = pos->next; 136 pos = pos->next;
137 } 137 }
138 if (pos == NULL) 138 if (pos == NULL)
139 return GNUNET_SYSERR; 139 return GNUNET_SYSERR;
140 if (prev == NULL) 140 if (prev == NULL)
@@ -190,29 +190,29 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
190 190
191 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); 191 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid);
192 GNUNET_assert (fn != NULL); 192 GNUNET_assert (fn != NULL);
193 fileW = GNUNET_BIO_write_open(fn); 193 fileW = GNUNET_BIO_write_open (fn);
194 if (NULL != fileW) 194 if (NULL != fileW)
195 {
196 if ((GNUNET_OK != GNUNET_BIO_write_int32 (fileW, ranking)) ||
197 (GNUNET_OK != GNUNET_BIO_write_string (fileW, ns_name)) ||
198 (GNUNET_OK != GNUNET_BIO_write_meta_data (fileW, meta)))
195 { 199 {
196 if ( (GNUNET_OK != GNUNET_BIO_write_int32(fileW, ranking)) || 200 (void) GNUNET_BIO_write_close (fileW);
197 (GNUNET_OK != GNUNET_BIO_write_string(fileW, ns_name)) || 201 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
198 (GNUNET_OK != GNUNET_BIO_write_meta_data(fileW, meta)) ) 202 GNUNET_free (fn);
199 { 203 return;
200 (void) GNUNET_BIO_write_close(fileW);
201 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
202 GNUNET_free (fn);
203 return;
204 }
205 if (GNUNET_OK != GNUNET_BIO_write_close(fileW))
206 {
207 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
208 GNUNET_free (fn);
209 return;
210 }
211 } 204 }
205 if (GNUNET_OK != GNUNET_BIO_write_close (fileW))
206 {
207 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
208 GNUNET_free (fn);
209 return;
210 }
211 }
212 GNUNET_free (fn); 212 GNUNET_free (fn);
213 /* create entry for pseudonym name in names */ 213 /* create entry for pseudonym name in names */
214 /* FIXME: 90% of what this call does is not needed 214 /* FIXME: 90% of what this call does is not needed
215 here => refactor code to only create the entry! */ 215 * here => refactor code to only create the entry! */
216 GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid)); 216 GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid));
217} 217}
218 218
@@ -237,41 +237,43 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
237 237
238 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); 238 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid);
239 GNUNET_assert (fn != NULL); 239 GNUNET_assert (fn != NULL);
240 fileR = GNUNET_BIO_read_open(fn); 240 fileR = GNUNET_BIO_read_open (fn);
241 if (fileR == NULL) 241 if (fileR == NULL)
242 { 242 {
243 GNUNET_free (fn); 243 GNUNET_free (fn);
244 return GNUNET_SYSERR; 244 return GNUNET_SYSERR;
245 } 245 }
246 emsg = NULL; 246 emsg = NULL;
247 *ns_name = NULL; 247 *ns_name = NULL;
248 if ( (GNUNET_OK != GNUNET_BIO_read_int32 (fileR, ranking)) || 248 if ((GNUNET_OK != GNUNET_BIO_read_int32 (fileR, ranking)) ||
249 (GNUNET_OK != GNUNET_BIO_read_string(fileR, "Read string error!", ns_name, 200)) || 249 (GNUNET_OK !=
250 (GNUNET_OK != GNUNET_BIO_read_meta_data(fileR, "Read meta data error!", meta)) ) 250 GNUNET_BIO_read_string (fileR, "Read string error!", ns_name, 200)) ||
251 { 251 (GNUNET_OK !=
252 (void) GNUNET_BIO_read_close(fileR, &emsg); 252 GNUNET_BIO_read_meta_data (fileR, "Read meta data error!", meta)))
253 GNUNET_free_non_null (emsg); 253 {
254 GNUNET_free_non_null (*ns_name); 254 (void) GNUNET_BIO_read_close (fileR, &emsg);
255 *ns_name = NULL; 255 GNUNET_free_non_null (emsg);
256 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn)); 256 GNUNET_free_non_null (*ns_name);
257 GNUNET_free (fn); 257 *ns_name = NULL;
258 return GNUNET_SYSERR; 258 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
259 } 259 GNUNET_free (fn);
260 if (GNUNET_OK != GNUNET_BIO_read_close(fileR, &emsg)) 260 return GNUNET_SYSERR;
261 { 261 }
262 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 262 if (GNUNET_OK != GNUNET_BIO_read_close (fileR, &emsg))
263 _("Failed to parse metadata about pseudonym from file `%s': %s\n"), 263 {
264 fn, 264 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
265 emsg); 265 _
266 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn)); 266 ("Failed to parse metadata about pseudonym from file `%s': %s\n"),
267 GNUNET_CONTAINER_meta_data_destroy (*meta); 267 fn, emsg);
268 *meta = NULL; 268 GNUNET_break (GNUNET_OK == GNUNET_DISK_directory_remove (fn));
269 GNUNET_free_non_null (*ns_name); 269 GNUNET_CONTAINER_meta_data_destroy (*meta);
270 *ns_name = NULL; 270 *meta = NULL;
271 GNUNET_free_non_null (emsg); 271 GNUNET_free_non_null (*ns_name);
272 GNUNET_free (fn); 272 *ns_name = NULL;
273 return GNUNET_SYSERR; 273 GNUNET_free_non_null (emsg);
274 } 274 GNUNET_free (fn);
275 return GNUNET_SYSERR;
276 }
275 GNUNET_free (fn); 277 GNUNET_free (fn);
276 return GNUNET_OK; 278 return GNUNET_OK;
277} 279}
@@ -305,24 +307,24 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
305 meta = NULL; 307 meta = NULL;
306 name = NULL; 308 name = NULL;
307 if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name)) 309 if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name))
310 {
311 if ((meta != NULL) && (name == NULL))
312 name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
313 EXTRACTOR_METATYPE_TITLE,
314 EXTRACTOR_METATYPE_FILENAME,
315 EXTRACTOR_METATYPE_DESCRIPTION,
316 EXTRACTOR_METATYPE_SUBJECT,
317 EXTRACTOR_METATYPE_PUBLISHER,
318 EXTRACTOR_METATYPE_AUTHOR_NAME,
319 EXTRACTOR_METATYPE_COMMENT,
320 EXTRACTOR_METATYPE_SUMMARY,
321 -1);
322 if (meta != NULL)
308 { 323 {
309 if ((meta != NULL) && (name == NULL)) 324 GNUNET_CONTAINER_meta_data_destroy (meta);
310 name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta, 325 meta = NULL;
311 EXTRACTOR_METATYPE_TITLE,
312 EXTRACTOR_METATYPE_FILENAME,
313 EXTRACTOR_METATYPE_DESCRIPTION,
314 EXTRACTOR_METATYPE_SUBJECT,
315 EXTRACTOR_METATYPE_PUBLISHER,
316 EXTRACTOR_METATYPE_AUTHOR_NAME,
317 EXTRACTOR_METATYPE_COMMENT,
318 EXTRACTOR_METATYPE_SUMMARY,
319 -1);
320 if (meta != NULL)
321 {
322 GNUNET_CONTAINER_meta_data_destroy (meta);
323 meta = NULL;
324 }
325 } 326 }
327 }
326 if (name == NULL) 328 if (name == NULL)
327 name = GNUNET_strdup (_("no-name")); 329 name = GNUNET_strdup (_("no-name"));
328 GNUNET_CRYPTO_hash (name, strlen (name), &nh); 330 GNUNET_CRYPTO_hash (name, strlen (name), &nh);
@@ -341,22 +343,22 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
341 while ((len >= sizeof (GNUNET_HashCode)) && 343 while ((len >= sizeof (GNUNET_HashCode)) &&
342 (sizeof (GNUNET_HashCode) 344 (sizeof (GNUNET_HashCode)
343 == GNUNET_DISK_file_read (fh, &nh, sizeof (GNUNET_HashCode)))) 345 == GNUNET_DISK_file_read (fh, &nh, sizeof (GNUNET_HashCode))))
344 { 346 {
345 if (0 == memcmp (&nh, nsid, sizeof (GNUNET_HashCode))) 347 if (0 == memcmp (&nh, nsid, sizeof (GNUNET_HashCode)))
346 {
347 idx = i;
348 break;
349 }
350 i++;
351 len -= sizeof (GNUNET_HashCode);
352 }
353 if (idx == -1)
354 { 348 {
355 idx = i; 349 idx = i;
356 if (sizeof (GNUNET_HashCode) != 350 break;
357 GNUNET_DISK_file_write (fh, nsid, sizeof (GNUNET_HashCode)))
358 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "write", fn);
359 } 351 }
352 i++;
353 len -= sizeof (GNUNET_HashCode);
354 }
355 if (idx == -1)
356 {
357 idx = i;
358 if (sizeof (GNUNET_HashCode) !=
359 GNUNET_DISK_file_write (fh, nsid, sizeof (GNUNET_HashCode)))
360 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "write", fn);
361 }
360 GNUNET_DISK_file_close (fh); 362 GNUNET_DISK_file_close (fh);
361 ret = GNUNET_malloc (strlen (name) + 32); 363 ret = GNUNET_malloc (strlen (name) + 32);
362 GNUNET_snprintf (ret, strlen (name) + 32, "%s-%u", name, idx); 364 GNUNET_snprintf (ret, strlen (name) + 32, "%s-%u", name, idx);
@@ -401,10 +403,10 @@ GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg,
401 if ((GNUNET_OK != GNUNET_DISK_file_test (fn) || 403 if ((GNUNET_OK != GNUNET_DISK_file_test (fn) ||
402 (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) || 404 (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) ||
403 ((idx + 1) * sizeof (GNUNET_HashCode) > len)) 405 ((idx + 1) * sizeof (GNUNET_HashCode) > len))
404 { 406 {
405 GNUNET_free (fn); 407 GNUNET_free (fn);
406 return GNUNET_SYSERR; 408 return GNUNET_SYSERR;
407 } 409 }
408 fh = GNUNET_DISK_file_open (fn, GNUNET_DISK_OPEN_CREATE 410 fh = GNUNET_DISK_file_open (fn, GNUNET_DISK_OPEN_CREATE
409 | GNUNET_DISK_OPEN_READWRITE, 411 | GNUNET_DISK_OPEN_READWRITE,
410 GNUNET_DISK_PERM_USER_READ | 412 GNUNET_DISK_PERM_USER_READ |
@@ -414,10 +416,10 @@ GNUNET_PSEUDONYM_name_to_id (const struct GNUNET_CONFIGURATION_Handle *cfg,
414 GNUNET_DISK_SEEK_SET); 416 GNUNET_DISK_SEEK_SET);
415 if (sizeof (GNUNET_HashCode) != 417 if (sizeof (GNUNET_HashCode) !=
416 GNUNET_DISK_file_read (fh, nsid, sizeof (GNUNET_HashCode))) 418 GNUNET_DISK_file_read (fh, nsid, sizeof (GNUNET_HashCode)))
417 { 419 {
418 GNUNET_DISK_file_close (fh); 420 GNUNET_DISK_file_close (fh);
419 return GNUNET_SYSERR; 421 return GNUNET_SYSERR;
420 } 422 }
421 GNUNET_DISK_file_close (fh); 423 GNUNET_DISK_file_close (fh);
422 return GNUNET_OK; 424 return GNUNET_OK;
423} 425}
@@ -466,9 +468,8 @@ list_pseudonym_helper (void *cls, const char *fullname)
466 468
467 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)) 469 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded))
468 return GNUNET_OK; 470 return GNUNET_OK;
469 fn = 471 fn = &fullname[strlen (fullname) + 1 -
470 &fullname[strlen (fullname) + 1 - 472 sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)];
471 sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)];
472 if (fn[-1] != DIR_SEPARATOR) 473 if (fn[-1] != DIR_SEPARATOR)
473 return GNUNET_OK; 474 return GNUNET_OK;
474 ret = GNUNET_OK; 475 ret = GNUNET_OK;
@@ -534,10 +535,10 @@ GNUNET_PSEUDONYM_rank (const struct GNUNET_CONFIGURATION_Handle *cfg,
534 name = NULL; 535 name = NULL;
535 ret = read_info (cfg, nsid, &meta, &ranking, &name); 536 ret = read_info (cfg, nsid, &meta, &ranking, &name);
536 if (ret == GNUNET_SYSERR) 537 if (ret == GNUNET_SYSERR)
537 { 538 {
538 ranking = 0; 539 ranking = 0;
539 meta = GNUNET_CONTAINER_meta_data_create (); 540 meta = GNUNET_CONTAINER_meta_data_create ();
540 } 541 }
541 ranking += delta; 542 ranking += delta;
542 write_pseudonym_info (cfg, nsid, meta, ranking, name); 543 write_pseudonym_info (cfg, nsid, meta, ranking, name);
543 GNUNET_CONTAINER_meta_data_destroy (meta); 544 GNUNET_CONTAINER_meta_data_destroy (meta);
@@ -572,16 +573,16 @@ GNUNET_PSEUDONYM_add (const struct GNUNET_CONFIGURATION_Handle *cfg,
572 573
573 if ((0 == STAT (fn, &sbuf)) && 574 if ((0 == STAT (fn, &sbuf)) &&
574 (GNUNET_OK == read_info (cfg, id, &old, &ranking, &name))) 575 (GNUNET_OK == read_info (cfg, id, &old, &ranking, &name)))
575 { 576 {
576 GNUNET_CONTAINER_meta_data_merge (old, meta); 577 GNUNET_CONTAINER_meta_data_merge (old, meta);
577 write_pseudonym_info (cfg, id, old, ranking, name); 578 write_pseudonym_info (cfg, id, old, ranking, name);
578 GNUNET_CONTAINER_meta_data_destroy (old); 579 GNUNET_CONTAINER_meta_data_destroy (old);
579 GNUNET_free_non_null (name); 580 GNUNET_free_non_null (name);
580 } 581 }
581 else 582 else
582 { 583 {
583 write_pseudonym_info (cfg, id, meta, ranking, NULL); 584 write_pseudonym_info (cfg, id, meta, ranking, NULL);
584 } 585 }
585 GNUNET_free (fn); 586 GNUNET_free (fn);
586 internal_notify (id, meta, ranking); 587 internal_notify (id, meta, ranking);
587} 588}