diff options
Diffstat (limited to 'src/util/pseudonym.c')
-rw-r--r-- | src/util/pseudonym.c | 223 |
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 | } |