aboutsummaryrefslogtreecommitdiff
path: root/src/util/pseudonym.c
diff options
context:
space:
mode:
authorJi Lu <jilu@140774ce-b5e7-0310-ab8b-a85725594a96>2009-11-12 11:55:45 +0000
committerJi Lu <jilu@140774ce-b5e7-0310-ab8b-a85725594a96>2009-11-12 11:55:45 +0000
commitd0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711 (patch)
tree8d368f25a54ebe4e08628a62442870adb587ccf6 /src/util/pseudonym.c
parent6f3c4c19d2813158e974883f01026e13361b062b (diff)
downloadgnunet-d0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711.tar.gz
gnunet-d0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711.zip
fixed all null problems
Diffstat (limited to 'src/util/pseudonym.c')
-rw-r--r--src/util/pseudonym.c131
1 files changed, 21 insertions, 110 deletions
diff --git a/src/util/pseudonym.c b/src/util/pseudonym.c
index 0465b1b2c..bc7229c72 100644
--- a/src/util/pseudonym.c
+++ b/src/util/pseudonym.c
@@ -29,6 +29,7 @@
29#include "gnunet_container_lib.h" 29#include "gnunet_container_lib.h"
30#include "gnunet_disk_lib.h" 30#include "gnunet_disk_lib.h"
31#include "gnunet_pseudonym_lib.h" 31#include "gnunet_pseudonym_lib.h"
32#include "gnunet_bio_lib.h"
32 33
33/** 34/**
34 * FIXME 35 * FIXME
@@ -175,46 +176,18 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
175 const struct GNUNET_CONTAINER_MetaData *meta, 176 const struct GNUNET_CONTAINER_MetaData *meta,
176 int32_t ranking, const char *ns_name) 177 int32_t ranking, const char *ns_name)
177{ 178{
178 size_t size;
179 size_t tag;
180 size_t off;
181 char *buf;
182 char *fn; 179 char *fn;
183 180
184 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); 181 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid);
185 GNUNET_assert (fn != NULL); 182 GNUNET_assert (fn != NULL);
186 size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta, 183 struct GNUNET_BIO_WriteHandle *fileW;
187 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); 184 fileW = GNUNET_BIO_write_open(fn);
188 tag = size + sizeof (int32_t) + 1; 185 GNUNET_assert (NULL != fileW);
189 off = 0; 186 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32(fileW, ranking));
190 if (ns_name != NULL) 187 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string(fileW, ns_name));
191 { 188 GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data(fileW, meta));
192 off = strlen (ns_name); 189 GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_close(fileW));
193 tag += off;
194 }
195 buf = GNUNET_malloc (tag);
196 ((int32_t *) buf)[0] = htonl (ranking); /* ranking */
197 if (ns_name != NULL)
198 {
199 memcpy (&buf[sizeof (int32_t)], ns_name, off + 1);
200 }
201 else
202 {
203 buf[sizeof (int)] = '\0';
204 }
205 GNUNET_assert
206 (size == GNUNET_CONTAINER_meta_data_serialize (meta,
207 &buf[sizeof
208 (int32_t) +
209 off + 1],
210 size,
211 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL));
212 GNUNET_break
213 (tag == GNUNET_DISK_fn_write (fn, buf, tag, GNUNET_DISK_PERM_USER_READ
214 | GNUNET_DISK_PERM_USER_WRITE |
215 GNUNET_DISK_PERM_GROUP_READ));
216 GNUNET_free (fn); 190 GNUNET_free (fn);
217 GNUNET_free (buf);
218 /* create entry for pseudonym name in names */ 191 /* create entry for pseudonym name in names */
219 GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid)); 192 GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid));
220} 193}
@@ -229,84 +202,19 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg,
229 struct GNUNET_CONTAINER_MetaData **meta, 202 struct GNUNET_CONTAINER_MetaData **meta,
230 int32_t * ranking, char **ns_name) 203 int32_t * ranking, char **ns_name)
231{ 204{
232 uint64_t len;
233 size_t size;
234 size_t zend;
235 struct stat sbuf;
236 char *buf;
237 char *fn; 205 char *fn;
206 char *emsg;
238 207
239 if (meta != NULL)
240 *meta = NULL;
241 if (ns_name != NULL)
242 *ns_name = NULL;
243 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); 208 fn = get_data_filename (cfg, PS_METADATA_DIR, nsid);
244 GNUNET_assert (fn != NULL); 209 GNUNET_assert (fn != NULL);
245 210 struct GNUNET_BIO_ReadHandle *fileR;
246 if ((0 != STAT (fn, &sbuf)) 211 fileR = GNUNET_BIO_read_open(fn);
247 || (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) 212 GNUNET_assert (NULL != fileR);
248 { 213 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int32__(fileR, "Read int32 error!", ranking));
249 GNUNET_free (fn); 214 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_string(fileR, "Read string error!", ns_name, 200));
250 return GNUNET_SYSERR; 215 GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_meta_data(fileR, "Read meta data error!", meta));
251 } 216 GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_close(fileR, &emsg));
252 if (len <= sizeof (int32_t) + 1)
253 {
254 GNUNET_free (fn);
255 return GNUNET_SYSERR;
256 }
257 if (len > 16 * 1024 * 1024)
258 {
259 /* too big, must be invalid! remove! */
260 GNUNET_break (0);
261 if (0 != UNLINK (fn))
262 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "unlink", fn);
263 GNUNET_free (fn);
264 return GNUNET_SYSERR;
265 }
266 buf = GNUNET_malloc (len);
267 if (len != GNUNET_DISK_fn_read (fn, buf, len))
268 {
269 GNUNET_free (buf);
270 GNUNET_free (fn);
271 return GNUNET_SYSERR;
272 }
273 if (ranking != NULL)
274 *ranking = ntohl (((int32_t *) buf)[0]);
275 zend = sizeof (int32_t);
276 while ((zend < len) && (buf[zend] != '\0'))
277 zend++;
278 if (zend == len)
279 {
280 GNUNET_free (buf);
281 GNUNET_free (fn);
282 return GNUNET_SYSERR;
283 }
284 if (ns_name != NULL)
285 {
286 if (zend != sizeof (int32_t))
287 *ns_name = GNUNET_strdup (&buf[sizeof (int32_t)]);
288 else
289 *ns_name = NULL;
290 }
291 zend++;
292 size = len - zend;
293 if (meta != NULL)
294 {
295 *meta = GNUNET_CONTAINER_meta_data_deserialize (&buf[zend], size);
296 if ((*meta) == NULL)
297 {
298 /* invalid data! remove! */
299 GNUNET_break (0);
300 if (0 != UNLINK (fn))
301 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
302 "unlink", fn);
303 GNUNET_free (buf);
304 GNUNET_free (fn);
305 return GNUNET_SYSERR;
306 }
307 }
308 GNUNET_free (fn); 217 GNUNET_free (fn);
309 GNUNET_free (buf);
310 return GNUNET_OK; 218 return GNUNET_OK;
311} 219}
312 220
@@ -333,10 +241,12 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg,
333 unsigned int idx; 241 unsigned int idx;
334 char *ret; 242 char *ret;
335 struct stat sbuf; 243 struct stat sbuf;
244 int32_t temp = 0;
245 int32_t *rank = &temp;
336 246
337 meta = NULL; 247 meta = NULL;
338 name = NULL; 248 name = NULL;
339 if (GNUNET_OK == read_info (cfg, nsid, &meta, NULL, &name)) 249 if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name))
340 { 250 {
341 if ((meta != NULL) && (name == NULL)) 251 if ((meta != NULL) && (name == NULL))
342 name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta, 252 name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
@@ -493,6 +403,7 @@ list_pseudonym_helper (void *cls, const char *fullname)
493 int rating; 403 int rating;
494 struct GNUNET_CONTAINER_MetaData *meta; 404 struct GNUNET_CONTAINER_MetaData *meta;
495 const char *fn; 405 const char *fn;
406 const char *str = "not null";
496 407
497 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)) 408 if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded))
498 return GNUNET_OK; 409 return GNUNET_OK;
@@ -504,7 +415,7 @@ list_pseudonym_helper (void *cls, const char *fullname)
504 ret = GNUNET_OK; 415 ret = GNUNET_OK;
505 if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id)) 416 if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id))
506 return GNUNET_OK; /* invalid name */ 417 return GNUNET_OK; /* invalid name */
507 if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, NULL)) 418 if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, &str))
508 return GNUNET_OK; /* ignore entry */ 419 return GNUNET_OK; /* ignore entry */
509 if (c->iterator != NULL) 420 if (c->iterator != NULL)
510 ret = c->iterator (c->closure, &id, meta, rating); 421 ret = c->iterator (c->closure, &id, meta, rating);