From 57636ddf7839aaeedd14c90afcd28b375ec516a6 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 30 Apr 2019 11:49:52 +0200 Subject: [PATCH] implement filtering by record type in gnunet-namestore --- src/namestore/gnunet-namestore.c | 723 ++++++++++++++----------------- 1 file changed, 331 insertions(+), 392 deletions(-) diff --git a/src/namestore/gnunet-namestore.c b/src/namestore/gnunet-namestore.c index 34bbf0111..916f994b7 100644 --- a/src/namestore/gnunet-namestore.c +++ b/src/namestore/gnunet-namestore.c @@ -11,7 +11,7 @@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. - + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . @@ -48,7 +48,6 @@ struct RecordSetEntry * The record to add/remove. */ struct GNUNET_GNSRECORD_Data record; - }; @@ -307,12 +306,8 @@ do_shutdown (void *cls) static void test_finished () { - if ( (NULL == add_qe) && - (NULL == add_qe_uri) && - (NULL == get_qe) && - (NULL == del_qe) && - (NULL == reverse_qe) && - (NULL == list_it) ) + if ((NULL == add_qe) && (NULL == add_qe_uri) && (NULL == get_qe) && + (NULL == del_qe) && (NULL == reverse_qe) && (NULL == list_it)) GNUNET_SCHEDULER_shutdown (); } @@ -328,9 +323,7 @@ test_finished () * @param emsg NULL on success, otherwise an error message */ static void -add_continuation (void *cls, - int32_t success, - const char *emsg) +add_continuation (void *cls, int32_t success, const char *emsg) { struct GNUNET_NAMESTORE_QueueEntry **qe = cls; @@ -338,8 +331,8 @@ add_continuation (void *cls, if (GNUNET_YES != success) { fprintf (stderr, - _("Adding record failed: %s\n"), - (GNUNET_NO == success) ? "record exists" : emsg); + _ ("Adding record failed: %s\n"), + (GNUNET_NO == success) ? "record exists" : emsg); if (GNUNET_NO != success) ret = 1; } @@ -359,23 +352,21 @@ add_continuation (void *cls, * @param emsg NULL on success, otherwise an error message */ static void -del_continuation (void *cls, - int32_t success, - const char *emsg) +del_continuation (void *cls, int32_t success, const char *emsg) { (void) cls; del_qe = NULL; if (GNUNET_NO == success) { fprintf (stderr, - _("Deleting record failed, record does not exist%s%s\n"), - (NULL != emsg) ? ": " : "", - (NULL != emsg) ? emsg : ""); + _ ("Deleting record failed, record does not exist%s%s\n"), + (NULL != emsg) ? ": " : "", + (NULL != emsg) ? emsg : ""); } if (GNUNET_SYSERR == success) { fprintf (stderr, - _("Deleting record failed%s%s\n"), + _ ("Deleting record failed%s%s\n"), (NULL != emsg) ? ": " : "", (NULL != emsg) ? emsg : ""); } @@ -403,8 +394,7 @@ zone_iteration_error_cb (void *cls) { (void) cls; list_it = NULL; - fprintf (stderr, - "Error iterating over zone\n"); + fprintf (stderr, "Error iterating over zone\n"); ret = 1; test_finished (); } @@ -419,40 +409,41 @@ zone_iteration_error_cb (void *cls) */ static void display_record (const char *rname, - unsigned int rd_len, - const struct GNUNET_GNSRECORD_Data *rd) + unsigned int rd_len, + const struct GNUNET_GNSRECORD_Data *rd) { - const char *typestring; + const char *typestr; char *s; const char *ets; struct GNUNET_TIME_Absolute at; struct GNUNET_TIME_Relative rt; - if ( (NULL != name) && - (0 != strcmp (name, rname)) ) + if ((NULL != name) && (0 != strcmp (name, rname))) { - GNUNET_NAMESTORE_zone_iterator_next (list_it, - 1); + GNUNET_NAMESTORE_zone_iterator_next (list_it, 1); return; } - FPRINTF (stdout, - "%s:\n", - rname); - for (unsigned int i=0;idata = data; rde->data_size = data_size; @@ -733,12 +717,12 @@ get_existing_record (void *cls, rde->expiration_time = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us; GNUNET_assert (NULL != name); add_qe = GNUNET_NAMESTORE_records_store (ns, - &zone_pkey, - name, - rd_count + 1, - rde, - &add_continuation, - &add_qe); + &zone_pkey, + name, + rd_count + 1, + rde, + &add_continuation, + &add_qe); } @@ -750,9 +734,7 @@ reverse_error_cb (void *cls) { (void) cls; reverse_qe = NULL; - FPRINTF (stdout, - "%s.zkey\n", - reverse_pkey); + FPRINTF (stdout, "%s.zkey\n", reverse_pkey); } @@ -779,14 +761,9 @@ handle_reverse_lookup (void *cls, (void) rd; reverse_qe = NULL; if (NULL == label) - FPRINTF (stdout, - "%s\n", - reverse_pkey); + FPRINTF (stdout, "%s\n", reverse_pkey); else - FPRINTF (stdout, - "%s.%s\n", - label, - ego_name); + FPRINTF (stdout, "%s.%s\n", label, ego_name); test_finished (); } @@ -834,14 +811,14 @@ del_monitor (void *cls, if (0 == rd_count) { FPRINTF (stderr, - _("There are no records under label `%s' that could be deleted.\n"), + _ ( + "There are no records under label `%s' that could be deleted.\n"), label); ret = 1; test_finished (); return; } - if ( (NULL == value) && - (NULL == typestring) ) + if ((NULL == value) && (NULL == typestring)) { /* delete everything */ del_qe = GNUNET_NAMESTORE_records_store (ns, @@ -858,25 +835,28 @@ del_monitor (void *cls, type = GNUNET_GNSRECORD_typename_to_number (typestring); else type = GNUNET_GNSRECORD_TYPE_ANY; - for (unsigned int i=0;inext) rd_count++; - rd = GNUNET_new_array (rd_count, - struct GNUNET_GNSRECORD_Data); + rd = GNUNET_new_array (rd_count, struct GNUNET_GNSRECORD_Data); rd_count = 0; for (struct RecordSetEntry *e = recordset; NULL != e; e = e->next) { @@ -1058,23 +1029,24 @@ identity_cb (void *cls, rd_count++; } set_qe = GNUNET_NAMESTORE_records_store (ns, - &zone_pkey, - name, - rd_count, - rd, - &replace_cont, - NULL); + &zone_pkey, + name, + rd_count, + rd, + &replace_cont, + NULL); GNUNET_free (rd); return; } - + if (add) { if (NULL == name) { fprintf (stderr, - _("Missing option `%s' for operation `%s'\n"), - "-n", _("add")); + _ ("Missing option `%s' for operation `%s'\n"), + "-n", + _ ("add")); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1082,8 +1054,9 @@ identity_cb (void *cls, if (NULL == typestring) { fprintf (stderr, - _("Missing option `%s' for operation `%s'\n"), - "-t", _("add")); + _ ("Missing option `%s' for operation `%s'\n"), + "-t", + _ ("add")); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1091,9 +1064,7 @@ identity_cb (void *cls, type = GNUNET_GNSRECORD_typename_to_number (typestring); if (UINT32_MAX == type) { - fprintf (stderr, - _("Unsupported type `%s'\n"), - typestring); + fprintf (stderr, _ ("Unsupported type `%s'\n"), typestring); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1101,22 +1072,20 @@ identity_cb (void *cls, if (NULL == value) { fprintf (stderr, - _("Missing option `%s' for operation `%s'\n"), - "-V", _("add")); + _ ("Missing option `%s' for operation `%s'\n"), + "-V", + _ ("add")); ret = 1; GNUNET_SCHEDULER_shutdown (); return; } if (GNUNET_OK != - GNUNET_GNSRECORD_string_to_value (type, - value, - &data, - &data_size)) + GNUNET_GNSRECORD_string_to_value (type, value, &data, &data_size)) { fprintf (stderr, - _("Value `%s' invalid for record type `%s'\n"), - value, - typestring); + _ ("Value `%s' invalid for record type `%s'\n"), + value, + typestring); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1124,21 +1093,16 @@ identity_cb (void *cls, if (NULL == expirationstring) { fprintf (stderr, - _("Missing option `%s' for operation `%s'\n"), - "-e", - _("add")); + _ ("Missing option `%s' for operation `%s'\n"), + "-e", + _ ("add")); GNUNET_SCHEDULER_shutdown (); ret = 1; return; } - if (GNUNET_OK != - parse_expiration (expirationstring, - &etime_is_rel, - &etime)) + if (GNUNET_OK != parse_expiration (expirationstring, &etime_is_rel, &etime)) { - fprintf (stderr, - _("Invalid time format `%s'\n"), - expirationstring); + fprintf (stderr, _ ("Invalid time format `%s'\n"), expirationstring); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1156,8 +1120,9 @@ identity_cb (void *cls, if (NULL == name) { fprintf (stderr, - _("Missing option `%s' for operation `%s'\n"), - "-n", _("del")); + _ ("Missing option `%s' for operation `%s'\n"), + "-n", + _ ("del")); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1196,11 +1161,11 @@ identity_cb (void *cls, if (GNUNET_OK != GNUNET_CRYPTO_ecdsa_public_key_from_string (reverse_pkey, - strlen (reverse_pkey), - &pubkey)) + strlen (reverse_pkey), + &pubkey)) { fprintf (stderr, - _("Invalid public key for reverse lookup `%s'\n"), + _ ("Invalid public key for reverse lookup `%s'\n"), reverse_pkey); GNUNET_SCHEDULER_shutdown (); } @@ -1219,18 +1184,11 @@ identity_cb (void *cls, struct GNUNET_CRYPTO_EcdsaPublicKey pkey; GNUNET_STRINGS_utf8_tolower (uri, uri); - if ( (2 != (sscanf (uri, - "gnunet://gns/%52s/%63s", - sh, - sname)) ) || - (GNUNET_OK != - GNUNET_CRYPTO_ecdsa_public_key_from_string (sh, - strlen (sh), - &pkey)) ) + if ((2 != (sscanf (uri, "gnunet://gns/%52s/%63s", sh, sname))) || + (GNUNET_OK != + GNUNET_CRYPTO_ecdsa_public_key_from_string (sh, strlen (sh), &pkey))) { - fprintf (stderr, - _("Invalid URI `%s'\n"), - uri); + fprintf (stderr, _ ("Invalid URI `%s'\n"), uri); GNUNET_SCHEDULER_shutdown (); ret = 1; return; @@ -1240,46 +1198,44 @@ identity_cb (void *cls, rd.data_size = sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey); rd.record_type = GNUNET_GNSRECORD_TYPE_PKEY; rd.expiration_time = etime; - if (GNUNET_YES == etime_is_rel) + if (GNUNET_YES == etime_is_rel) rd.flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION; if (1 == is_shadow) rd.flags |= GNUNET_GNSRECORD_RF_SHADOW_RECORD; add_qe_uri = GNUNET_NAMESTORE_records_store (ns, - &zone_pkey, - sname, - 1, - &rd, - &add_continuation, - &add_qe_uri); + &zone_pkey, + sname, + 1, + &rd, + &add_continuation, + &add_qe_uri); } if (NULL != nickstring) { - if (0 == strlen(nickstring)) + if (0 == strlen (nickstring)) { - fprintf (stderr, - _("Invalid nick `%s'\n"), - nickstring); + fprintf (stderr, _ ("Invalid nick `%s'\n"), nickstring); GNUNET_SCHEDULER_shutdown (); ret = 1; return; } add_qe_uri = GNUNET_NAMESTORE_set_nick (ns, - &zone_pkey, - nickstring, - &add_continuation, - &add_qe_uri); + &zone_pkey, + nickstring, + &add_continuation, + &add_qe_uri); } if (monitor) { zm = GNUNET_NAMESTORE_zone_monitor_start (cfg, - &zone_pkey, + &zone_pkey, GNUNET_YES, &monitor_error_cb, NULL, - &display_record_monitor, + &display_record_monitor, NULL, - &sync_cb, - NULL); + &sync_cb, + NULL); } } @@ -1296,8 +1252,7 @@ default_ego_cb (void *cls, get_default = NULL; if (NULL == ego) { - fprintf (stderr, - _("No default ego configured in identity service\n")); + fprintf (stderr, _ ("No default ego configured in identity service\n")); GNUNET_SCHEDULER_shutdown (); ret = -1; return; @@ -1322,10 +1277,8 @@ id_connect_cb (void *cls, (void) name; if (NULL == ego) { - get_default = GNUNET_IDENTITY_get (idh, - "namestore", - &default_ego_cb, - (void *) cfg); + get_default = + GNUNET_IDENTITY_get (idh, "namestore", &default_ego_cb, (void *) cfg); } } @@ -1348,31 +1301,24 @@ run (void *cls, (void) args; (void) cfgfile; if (NULL != args[0]) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Superfluous command line arguments (starting with `%s') ignored\n"), - args[0]); - if ( (NULL != args[0]) && - (NULL == uri) ) + GNUNET_log ( + GNUNET_ERROR_TYPE_WARNING, + _ ("Superfluous command line arguments (starting with `%s') ignored\n"), + args[0]); + if ((NULL != args[0]) && (NULL == uri)) uri = GNUNET_strdup (args[0]); - GNUNET_SCHEDULER_add_shutdown (&do_shutdown, - (void *) cfg); + GNUNET_SCHEDULER_add_shutdown (&do_shutdown, (void *) cfg); if (NULL == ego_name) { - idh = GNUNET_IDENTITY_connect (cfg, - &id_connect_cb, - (void *) cfg); + idh = GNUNET_IDENTITY_connect (cfg, &id_connect_cb, (void *) cfg); if (NULL == idh) - fprintf (stderr, - _("Cannot connect to identity service\n")); + fprintf (stderr, _ ("Cannot connect to identity service\n")); ret = -1; return; } - el = GNUNET_IDENTITY_ego_lookup (cfg, - ego_name, - &identity_cb, - (void *) cfg); + el = GNUNET_IDENTITY_ego_lookup (cfg, ego_name, &identity_cb, (void *) cfg); } @@ -1389,15 +1335,15 @@ run (void *cls, * "TTL TYPE FLAGS VALUE" where TTL is an expiration time (rel or abs), * always given in seconds (without the unit), * TYPE is a DNS/GNS record type, FLAGS is either "n" for no flags or - * a combination of 's' (shadow) and 'p' (public) and VALUE is the + * a combination of 's' (shadow) and 'p' (public) and VALUE is the * value (in human-readable format) * @return #GNUNET_OK on success */ static int multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, - void *scls, - const char *option, - const char *value) + void *scls, + const char *option, + const char *value) { struct RecordSetEntry **head = scls; struct RecordSetEntry *r; @@ -1415,24 +1361,20 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, if (NULL == tok) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Empty record line argument is not allowed.\n")); + _ ("Empty record line argument is not allowed.\n")); GNUNET_free (cp); return GNUNET_SYSERR; } { char *etime_in_s; - GNUNET_asprintf (&etime_in_s, - "%s s", - tok); + GNUNET_asprintf (&etime_in_s, "%s s", tok); if (GNUNET_OK != - parse_expiration (etime_in_s, - &etime_is_rel, - &record.expiration_time)) + parse_expiration (etime_in_s, &etime_is_rel, &record.expiration_time)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Invalid expiration time `%s' (must be without unit)\n"), - tok); + _ ("Invalid expiration time `%s' (must be without unit)\n"), + tok); GNUNET_free (cp); GNUNET_free (etime_in_s); return GNUNET_SYSERR; @@ -1443,17 +1385,15 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, if (NULL == tok) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Missing entries in record line `%s'.\n"), - value); + _ ("Missing entries in record line `%s'.\n"), + value); GNUNET_free (cp); return GNUNET_SYSERR; } record.record_type = GNUNET_GNSRECORD_typename_to_number (tok); if (UINT32_MAX == record.record_type) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Unknown record type `%s'\n"), - tok); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _ ("Unknown record type `%s'\n"), tok); GNUNET_free (cp); return GNUNET_SYSERR; } @@ -1461,8 +1401,8 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, if (NULL == tok) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Missing entries in record line `%s'.\n"), - value); + _ ("Missing entries in record line `%s'.\n"), + value); GNUNET_free (cp); return GNUNET_SYSERR; } @@ -1470,7 +1410,7 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, if (etime_is_rel) record.flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION; if (NULL == strchr (tok, (unsigned char) 'p')) /* p = public */ - record.flags |= GNUNET_GNSRECORD_RF_PRIVATE; + record.flags |= GNUNET_GNSRECORD_RF_PRIVATE; if (NULL != strchr (tok, (unsigned char) 's')) record.flags |= GNUNET_GNSRECORD_RF_SHADOW_RECORD; /* find beginning of record value */ @@ -1478,34 +1418,31 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, if (NULL == tok) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Missing entries in record line `%s'.\n"), - value); + _ ("Missing entries in record line `%s'.\n"), + value); GNUNET_free (cp); return GNUNET_SYSERR; } GNUNET_free (cp); tok++; /* skip space */ - if (GNUNET_OK != - GNUNET_GNSRECORD_string_to_value (record.record_type, - tok, - &raw_data, - &record.data_size)) + if (GNUNET_OK != GNUNET_GNSRECORD_string_to_value (record.record_type, + tok, + &raw_data, + &record.data_size)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Invalid record data for type %s: `%s'.\n"), - GNUNET_GNSRECORD_number_to_typename (record.record_type), - tok); + _ ("Invalid record data for type %s: `%s'.\n"), + GNUNET_GNSRECORD_number_to_typename (record.record_type), + tok); return GNUNET_SYSERR; } - + r = GNUNET_malloc (sizeof (struct RecordSetEntry) + record.data_size); r->next = *head; record.data = &r[1]; - memcpy (&r[1], - raw_data, - record.data_size); + memcpy (&r[1], raw_data, record.data_size); GNUNET_free (raw_data); - r->record = record; + r->record = record; *head = r; return GNUNET_OK; } @@ -1522,26 +1459,24 @@ multirecord_process (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, */ struct GNUNET_GETOPT_CommandLineOption multirecord_option (char shortName, - const char *name, - const char *argumentHelp, - const char *description, - struct RecordSetEntry **rs) + const char *name, + const char *argumentHelp, + const char *description, + struct RecordSetEntry **rs) { - struct GNUNET_GETOPT_CommandLineOption clo = { - .shortName = shortName, - .name = name, - .argumentHelp = argumentHelp, - .description = description, - .require_argument = 1, - .processor = &multirecord_process, - .scls = (void *) rs - }; + struct GNUNET_GETOPT_CommandLineOption clo = {.shortName = shortName, + .name = name, + .argumentHelp = argumentHelp, + .description = description, + .require_argument = 1, + .processor = + &multirecord_process, + .scls = (void *) rs}; return clo; } - /** * The main function for gnunet-namestore. * @@ -1550,105 +1485,109 @@ multirecord_option (char shortName, * @return 0 ok, 1 on error */ int -main (int argc, - char *const *argv) +main (int argc, char *const *argv) { - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_option_flag ('a', - "add", - gettext_noop ("add record"), - &add), - GNUNET_GETOPT_option_flag ('d', - "delete", - gettext_noop ("delete record"), - &del), - GNUNET_GETOPT_option_flag ('D', - "display", - gettext_noop ("display records"), - &list), - GNUNET_GETOPT_option_string ('e', - "expiration", - "TIME", - gettext_noop ("expiration time for record to use (for adding only), \"never\" is possible"), - &expirationstring), - GNUNET_GETOPT_option_string ('i', - "nick", - "NICKNAME", - gettext_noop ("set the desired nick name for the zone"), - &nickstring), - GNUNET_GETOPT_option_flag ('m', - "monitor", - gettext_noop ("monitor changes in the namestore"), - &monitor), - GNUNET_GETOPT_option_string ('n', - "name", - "NAME", - gettext_noop ("name of the record to add/delete/display"), - &name), - GNUNET_GETOPT_option_string ('r', - "reverse", - "PKEY", - gettext_noop ("determine our name for the given PKEY"), - &reverse_pkey), - multirecord_option ('R', - "replace", - "RECORDLINE", - gettext_noop ("set record set to values given by (possibly multiple) RECORDLINES; can be specified multiple times"), - &recordset), - GNUNET_GETOPT_option_string ('t', - "type", - "TYPE", - gettext_noop ("type of the record to add/delete/display"), - &typestring), - GNUNET_GETOPT_option_string ('u', - "uri", - "URI", - gettext_noop ("URI to import into our zone"), - &uri), - GNUNET_GETOPT_option_string ('V', - "value", - "VALUE", - gettext_noop ("value of the record to add/delete"), - &value), - GNUNET_GETOPT_option_flag ('p', - "public", - gettext_noop ("create or list public record"), - &is_public), - GNUNET_GETOPT_option_flag ('s', - "shadow", - gettext_noop ("create shadow record (only valid if all other records of the same type have expired"), - &is_shadow), - GNUNET_GETOPT_option_string ('z', - "zone", - "EGO", - gettext_noop ("name of the ego controlling the zone"), - &ego_name), - GNUNET_GETOPT_OPTION_END - }; - - if (GNUNET_OK != - GNUNET_STRINGS_get_utf8_args (argc, argv, - &argc, &argv)) + struct GNUNET_GETOPT_CommandLineOption options[] = + {GNUNET_GETOPT_option_flag ('a', "add", gettext_noop ("add record"), &add), + GNUNET_GETOPT_option_flag ('d', + "delete", + gettext_noop ("delete record"), + &del), + GNUNET_GETOPT_option_flag ('D', + "display", + gettext_noop ("display records"), + &list), + GNUNET_GETOPT_option_string ( + 'e', + "expiration", + "TIME", + gettext_noop ( + "expiration time for record to use (for adding only), \"never\" is possible"), + &expirationstring), + GNUNET_GETOPT_option_string ('i', + "nick", + "NICKNAME", + gettext_noop ( + "set the desired nick name for the zone"), + &nickstring), + GNUNET_GETOPT_option_flag ('m', + "monitor", + gettext_noop ( + "monitor changes in the namestore"), + &monitor), + GNUNET_GETOPT_option_string ('n', + "name", + "NAME", + gettext_noop ( + "name of the record to add/delete/display"), + &name), + GNUNET_GETOPT_option_string ('r', + "reverse", + "PKEY", + gettext_noop ( + "determine our name for the given PKEY"), + &reverse_pkey), + multirecord_option ( + 'R', + "replace", + "RECORDLINE", + gettext_noop ( + "set record set to values given by (possibly multiple) RECORDLINES; can be specified multiple times"), + &recordset), + GNUNET_GETOPT_option_string ('t', + "type", + "TYPE", + gettext_noop ( + "type of the record to add/delete/display"), + &typestring), + GNUNET_GETOPT_option_string ('u', + "uri", + "URI", + gettext_noop ("URI to import into our zone"), + &uri), + GNUNET_GETOPT_option_string ('V', + "value", + "VALUE", + gettext_noop ( + "value of the record to add/delete"), + &value), + GNUNET_GETOPT_option_flag ('p', + "public", + gettext_noop ("create or list public record"), + &is_public), + GNUNET_GETOPT_option_flag ( + 's', + "shadow", + gettext_noop ( + "create shadow record (only valid if all other records of the same type have expired"), + &is_shadow), + GNUNET_GETOPT_option_string ('z', + "zone", + "EGO", + gettext_noop ( + "name of the ego controlling the zone"), + &ego_name), + GNUNET_GETOPT_OPTION_END}; + + if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) return 2; is_public = -1; is_shadow = -1; - GNUNET_log_setup ("gnunet-namestore", - "WARNING", - NULL); - if (GNUNET_OK != - GNUNET_PROGRAM_run (argc, - argv, - "gnunet-namestore", - _("GNUnet zone manipulation tool"), - options, - &run, NULL)) + GNUNET_log_setup ("gnunet-namestore", "WARNING", NULL); + if (GNUNET_OK != GNUNET_PROGRAM_run (argc, + argv, + "gnunet-namestore", + _ ("GNUnet zone manipulation tool"), + options, + &run, + NULL)) { - GNUNET_free ((void*) argv); + GNUNET_free ((void *) argv); GNUNET_CRYPTO_ecdsa_key_clear (&zone_pkey); return 1; } - GNUNET_free ((void*) argv); + GNUNET_free ((void *) argv); GNUNET_CRYPTO_ecdsa_key_clear (&zone_pkey); return ret; } -- 2.25.1