gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] branch master updated: NAMESTORE: Add recordline format for zon


From: gnunet
Subject: [gnunet] branch master updated: NAMESTORE: Add recordline format for zone import and display
Date: Mon, 21 Nov 2022 06:06:15 +0100

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 9ee83b68e NAMESTORE: Add recordline format for zone import and display
     new 33f355098 Merge branch 'dev/schanzen/namestore_cli_recordline'
9ee83b68e is described below

commit 9ee83b68ee601fcfb7026c4b41f8977dba9d372b
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Sun Nov 20 20:27:49 2022 +0900

    NAMESTORE: Add recordline format for zone import and display
---
 doc/man/gnunet-namestore.1                   |  32 +-
 src/namestore/Makefile.am                    |   1 +
 src/namestore/gnunet-namestore.c             | 421 ++++++++++++---------------
 src/namestore/test_namestore_put_multiple.sh |  49 ++--
 src/namestore/test_namestore_put_stdin.sh    |  62 ++++
 5 files changed, 303 insertions(+), 262 deletions(-)

diff --git a/doc/man/gnunet-namestore.1 b/doc/man/gnunet-namestore.1
index 9391e21bb..c70e4499d 100644
--- a/doc/man/gnunet-namestore.1
+++ b/doc/man/gnunet-namestore.1
@@ -46,6 +46,7 @@
 .Op Fl r Ar PKEY | Fl -reverse= Ns Ar PKEY
 .Op Fl R Ar RECORDLINE | Fl -replace= Ns Ar RECORDLINE
 .Op Fl s | -shadow
+.Op Fl S | -from-stdin
 .Op Fl T | -include-maintenance
 .Op Fl t Ar TYPE | Fl -type= Ns Ar TYPE
 .Op Fl u Ar URI | Fl -uri= Ns Ar URI
@@ -119,6 +120,12 @@ The VALUE follows the usual human-readable value format(s) 
of DNS/GNS.
 Create a record that is a shadow record.
 Shadow records are only used once all other records of the same type
 under the same label have expired.
+.It Fl S | -from-stdin
+This reads commands from stdin until EOF is encountered.
+The commands are formatted like the arguments used for gnunet-namestore.
+Arguments that
+.B cannot
+be used for commands in this mode are: -l, -L, -D, -S, -m, -h, -c, -v, -r, -o, 
-T, -O
 .It Fl T | -include-maintenance
 Show maintenance records such as TOMBSTONEs. Use in combination with --display.
 .It Fl t Ar TYPE | Fl -type= Ns Ar TYPE
@@ -145,7 +152,30 @@ variable. The latter is useful to improve performance of 
tools like
 Ascension as it allows the command to skip IPC with the identity
 management subsystem.
 .El
-.\".Sh EXAMPLES
+.Sh EXAMPLES
+.Tp
+.Nm
+-z example -a -n www -t A -V "1.2.3.4" -e 1d -p
+.Tp
+.Pp
+.Dl Add a public record for ego "example" with name "www" containing an IP 
address.
+.sp
+.Tp
+.Nm
+-z example -D
+.Tp
+.Pp
+.Dl Show all records for ego "example"
+.sp
+.Tp
+.Nm
+--from-stdin <<EOF
+  -z alice -a -n www -t A -V "1.2.3.4" -e 3600s -p
+  -z bob -a -n www -t A -V "4.3.2.1" -e 24h -p
+ EOF
+.Tp
+.Pp
+.Dl Read record multiple import commands from stdin.
 .\".Sh FILES
 .Sh SEE ALSO
 .Xr gnunet-gns 1 ,
diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am
index fb2a670bc..a0ca32fa4 100644
--- a/src/namestore/Makefile.am
+++ b/src/namestore/Makefile.am
@@ -514,6 +514,7 @@ test_plugin_namestore_postgres_LDADD = \
 
 check_SCRIPTS = \
   test_namestore_put.sh \
+  test_namestore_put_stdin.sh \
   test_namestore_lookup.sh \
   test_namestore_delete.sh \
   test_namestore_zonefile_import.sh
diff --git a/src/namestore/gnunet-namestore.c b/src/namestore/gnunet-namestore.c
index cc887c845..ee59e7432 100644
--- a/src/namestore/gnunet-namestore.c
+++ b/src/namestore/gnunet-namestore.c
@@ -32,6 +32,7 @@
 #include <gnunet_gnsrecord_lib.h>
 #include <gnunet_gns_service.h>
 #include <gnunet_namestore_service.h>
+#include <inttypes.h>
 
 /**
  * The upper bound for the zone iteration interval
@@ -128,11 +129,6 @@ static struct GNUNET_IDENTITY_Handle *idh;
  */
 static char *ego_name;
 
-/**
- * Desired action is to add a record.
- */
-static int add;
-
 /**
  * Queue entry for the 'add-uri' operation.
  */
@@ -178,11 +174,6 @@ static struct EgoEntry *ego_head;
  */
 static struct EgoEntry *ego_tail;
 
-/**
- * Desired action is to list records.
- */
-static int list;
-
 /**
  * List iterator for the 'list' operation.
  */
@@ -193,6 +184,16 @@ static struct GNUNET_NAMESTORE_ZoneIterator *list_it;
  */
 static int read_from_stdin;
 
+/**
+ * Desired action is to list records.
+ */
+static int list;
+
+/**
+ * Desired action is to add a record.
+ */
+static int add;
+
 /**
  * Desired action is to remove a record.
  */
@@ -213,6 +214,12 @@ static int is_shadow;
  */
 static int omit_private;
 
+/**
+ * Output in recordline format
+ */
+static int output_recordline;
+
+
 /**
  * Purge zone contents
  */
@@ -386,79 +393,46 @@ parse_expiration (const char *expirationstring,
 }
 
 
-
-/**
- * Command-line option parser function that allows the user to specify
- * a complete record as one argument for adding/removing.  A pointer
- * to the head of the list of record sets must be passed as the "scls"
- * argument.
- *
- * @param ctx command line processor context
- * @param scls must be of type "struct GNUNET_FS_Uri **"
- * @param option name of the option (typically 'R')
- * @param value command line argument given; format is
- *        "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
- *         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)
+parse_recordline (const char *line)
 {
-  struct RecordSetEntry **head = scls;
+  struct RecordSetEntry **head = &recordset;
   struct RecordSetEntry *r;
   struct GNUNET_GNSRECORD_Data record;
   char *cp;
   char *tok;
   char *saveptr;
-  int etime_is_rel;
   void *raw_data;
 
-  (void) ctx;
-  (void) option;
-  cp = GNUNET_strdup (value);
+  cp = GNUNET_strdup (line);
   tok = strtok_r (cp, " ", &saveptr);
   if (NULL == tok)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _ ("Empty record line argument is not allowed.\n"));
+                _ ("Missing entries in record line `%s'.\n"),
+                line);
     GNUNET_free (cp);
     return GNUNET_SYSERR;
   }
+  record.record_type = GNUNET_GNSRECORD_typename_to_number (tok);
+  if (UINT32_MAX == record.record_type)
   {
-    char *etime_in_s;
-
-    GNUNET_asprintf (&etime_in_s, "%s s", tok);
-    if (GNUNET_OK !=
-        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);
-      GNUNET_free (cp);
-      GNUNET_free (etime_in_s);
-      return GNUNET_SYSERR;
-    }
-    GNUNET_free (etime_in_s);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _ ("Unknown record type `%s'\n"), 
tok);
+    GNUNET_free (cp);
+    return GNUNET_SYSERR;
   }
   tok = strtok_r (NULL, " ", &saveptr);
   if (NULL == tok)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _ ("Missing entries in record line `%s'.\n"),
-                value);
+                _ ("Empty record line argument is not allowed.\n"));
     GNUNET_free (cp);
     return GNUNET_SYSERR;
   }
-  record.record_type = GNUNET_GNSRECORD_typename_to_number (tok);
-  if (UINT32_MAX == record.record_type)
+  if (1 != sscanf (tok, "%" SCNu64, &record.expiration_time))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _ ("Unknown record type `%s'\n"), 
tok);
+    fprintf (stderr,
+             _ ("Error parsing expiration time %s.\n"), tok);
     GNUNET_free (cp);
     return GNUNET_SYSERR;
   }
@@ -466,30 +440,29 @@ multirecord_process (struct 
GNUNET_GETOPT_CommandLineProcessorContext *ctx,
   if (NULL == tok)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _ ("Missing entries in record line `%s'.\n"),
-                value);
+                _ ("Empty record line argument is not allowed.\n"));
     GNUNET_free (cp);
     return GNUNET_SYSERR;
   }
   record.flags = GNUNET_GNSRECORD_RF_NONE;
-  if (etime_is_rel)
+  if (NULL != strchr (tok, (unsigned char) 'r'))
     record.flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
   if (NULL == strchr (tok, (unsigned char) 'p')) /* p = public */
     record.flags |= GNUNET_GNSRECORD_RF_PRIVATE;
+  if (NULL != strchr (tok, (unsigned char) 'S'))
+    record.flags |= GNUNET_GNSRECORD_RF_SUPPLEMENTAL;
   if (NULL != strchr (tok, (unsigned char) 's'))
     record.flags |= GNUNET_GNSRECORD_RF_SHADOW;
-  /* find beginning of record value */
-  tok = strchr (&value[tok - cp], (unsigned char) ' ');
+  if (NULL != strchr (tok, (unsigned char) 'C'))
+    record.flags |= GNUNET_GNSRECORD_RF_CRITICAL;
+  tok = strtok_r (NULL, " ", &saveptr);
   if (NULL == tok)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _ ("Missing entries in record line `%s'.\n"),
-                value);
+                _ ("Empty record line argument is not allowed.\n"));
     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,
@@ -512,44 +485,45 @@ multirecord_process (struct 
GNUNET_GETOPT_CommandLineProcessorContext *ctx,
   return GNUNET_OK;
 }
 
-/**
- * Allow user to specify keywords.
- *
- * @param shortName short name of the option
- * @param name long name of the option
- * @param argumentHelp help text for the option argument
- * @param description long help text for the option
- * @param[out] topKeywords set to the desired value
- */
-struct GNUNET_GETOPT_CommandLineOption
-multirecord_option (char shortName,
-                    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 };
-
-  return clo;
-}
-
 static void
 reset_handles (void)
 {
   struct MarkedRecord *mrec;
   struct MarkedRecord *mrec_tmp;
+  struct RecordSetEntry *rs_entry;
+
+  rs_entry = recordset;
+  while (NULL != (rs_entry = recordset))
+  {
+    recordset = recordset->next;
+    GNUNET_free (rs_entry);
+  }
+  recordset = NULL;
   if (NULL != ego_name)
   {
     GNUNET_free (ego_name);
     ego_name = NULL;
   }
+  if (NULL != name)
+  {
+    GNUNET_free (name);
+    name = NULL;
+  }
+  if (NULL != value)
+  {
+    GNUNET_free (value);
+    value = NULL;
+  }
+  if (NULL != uri)
+  {
+    GNUNET_free (uri);
+    uri = NULL;
+  }
+  if (NULL != expirationstring)
+  {
+    GNUNET_free (expirationstring);
+    expirationstring = NULL;
+  }
   if (NULL != purge_task)
   {
     GNUNET_SCHEDULER_cancel (purge_task);
@@ -598,11 +572,6 @@ reset_handles (void)
     reverse_qe = NULL;
   }
   memset (&zone_pkey, 0, sizeof(zone_pkey));
-  if (NULL != uri)
-  {
-    GNUNET_free (uri);
-    uri = NULL;
-  }
   if (NULL != zm)
   {
     GNUNET_NAMESTORE_zone_monitor_stop (zm);
@@ -613,6 +582,15 @@ reset_handles (void)
     GNUNET_free (data);
     data = NULL;
   }
+  if (NULL != typestring)
+  {
+    GNUNET_free (typestring);
+    typestring = NULL;
+  }
+  list = 0;
+  is_public = 0;
+  is_shadow = 0;
+  purge_zone = 0;
 }
 
 
@@ -928,18 +906,33 @@ display_record (const struct GNUNET_IDENTITY_PrivateKey 
*zone_key,
       at.abs_value_us = rd[i].expiration_time;
       ets = GNUNET_STRINGS_absolute_time_to_string (at);
     }
-    fprintf (stdout,
-             "\t%s: %s (%s)\t%s\t%s\n",
-             typestr,
-             s,
-             ets,
-             (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) ? "PRIVATE"
+    char flgstr[16];
+    sprintf (flgstr, "[%s%s%s%s%s]",
+             (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE) ? "" : "p",
+             (rd[i].flags & GNUNET_GNSRECORD_RF_SUPPLEMENTAL) ? "S" : "",
+             (rd[i].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION) ? "r" : 
"",
+             (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW) ? "S" : "",
+             (rd[i].flags & GNUNET_GNSRECORD_RF_CRITICAL) ? "C" : "");
+    if (output_recordline)
+      fprintf (stdout,
+               "  %s %" PRIu64 " %s %s\n",
+               typestr,
+               rd[i].expiration_time,
+               flgstr,
+               s);
+    else
+      fprintf (stdout,
+               "\t%s: %s (%s)\t%s\t%s\n",
+               typestr,
+               s,
+               ets,
+               (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_PRIVATE)) ? "PRIVATE"
              : "PUBLIC",
-             (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW)) ? "SHADOW"
+               (0 != (rd[i].flags & GNUNET_GNSRECORD_RF_SHADOW)) ? "SHADOW"
              : "");
     GNUNET_free (s);
   }
-  fprintf (stdout, "%s", "\n");
+  // fprintf (stdout, "%s", "\n");
 }
 
 static void
@@ -1377,22 +1370,21 @@ run_with_zone_pkey (const struct 
GNUNET_CONFIGURATION_Handle *cfg)
     unsigned int rd_count;
     struct GNUNET_GNSRECORD_Data *rd;
 
-    if (NULL == ego_name)
+    /* FIXME: We could easily support append and delete with this as well */
+    if (!add)
     {
-      fprintf (stderr,
-               _ ("Missing option `%s' for operation `%s'\n"),
-               "-z",
-               _ ("replace"));
+      fprintf (stderr, _("Recordlines only work with option `%s'\n"),
+               "-a");
       ret = 1;
-      finish_command ();
+      finish_command();
       return;
     }
     if (NULL == name)
     {
       fprintf (stderr,
                _ ("Missing option `%s' for operation `%s'\n"),
-               "-R",
-               _ ("replace"));
+               "-n",
+               _ ("name"));
       ret = 1;
       finish_command ();
       return;
@@ -1754,120 +1746,90 @@ process_command_stdin ()
 {
   struct EgoEntry *ego_entry;
   char buf[MAX_LINE_LEN];
-  char *tmp_argv[MAX_ARGS];
-  unsigned int tmp_argc = 0;
+  static struct GNUNET_IDENTITY_PrivateKey next_zone_key;
+  static char next_name[GNUNET_DNSPARSER_MAX_NAME_LENGTH];
+  static int finished = GNUNET_NO;
+  static int have_next_zonekey = GNUNET_NO;
+  int zonekey_set = GNUNET_NO;
   char *tmp;
-  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_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_string ('n',
-                                 "name",
-                                 "NAME",
-                                 gettext_noop (
-                                   "name of the record to add/delete/display"),
-                                 &name),
-    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 ('P',
-                               "purge-orphans",
-                               gettext_noop (
-                                 "purge namestore of all orphans"),
-                               &purge_orphaned),
-    GNUNET_GETOPT_option_flag ('X',
-                               "purge-zone-records",
-                               gettext_noop (
-                                 "delete all records in specified zone"),
-                               &purge_zone),
-    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 (NULL == fgets (buf, sizeof (buf), stdin))
-  {
-    ns_qe = GNUNET_NAMESTORE_transaction_commit (ns, &commit_cb, NULL);
-    return;
-  }
-  if (buf[strlen (buf) - 1] == '\n')
-    buf[strlen (buf) - 1] = '\0';
-  /* We need to build a char *const *argv here */
-  /* I guess strtok on space */
-  tmp = strtok (buf, " ");
-  if (NULL == tmp)
+  if (GNUNET_YES == have_next_zonekey)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                "Error parsing line %s\n", buf);
-    GNUNET_SCHEDULER_shutdown ();
-    return;
+    zone_pkey = next_zone_key;
+    if (NULL != name)
+      GNUNET_free (name);
+    name = GNUNET_strdup (next_name);
+    zonekey_set = GNUNET_YES;
   }
-  tmp_argv[0] = tmp;
-  tmp_argc = 1;
-  while (NULL != (tmp = strtok (NULL, " ")))
+  while (NULL != fgets (buf, sizeof (buf), stdin))
   {
-    tmp_argv[tmp_argc] = tmp;
-    tmp_argc++;
+    if (1 >= strlen (buf))
+      continue;
+    if (buf[strlen (buf) - 1] == '\n')
+      buf[strlen (buf) - 1] = '\0';
+    /**
+     * Check if this is a new name. If yes, and we have records, store them.
+     */
+    if (buf[strlen (buf) - 1] == ':')
+    {
+      memset (next_name, 0, sizeof (next_name));
+      strncpy (next_name, buf, strlen (buf) - 1);
+      tmp = strchr (next_name, '.');
+      if (NULL == tmp)
+      {
+        fprintf (stderr, "Error parsing name `%s'\n", next_name);
+        ns_qe = GNUNET_NAMESTORE_transaction_commit (ns, &commit_cb, NULL);
+        ret = 1;
+        return;
+      }
+      for (ego_entry = ego_head; NULL != ego_entry; ego_entry = 
ego_entry->next)
+      {
+        /** FIXME: Check for zTLD? **/
+        if (0 != strcmp (tmp + 1, ego_entry->identifier))
+          continue;
+        next_zone_key = *GNUNET_IDENTITY_ego_get_private_key (ego_entry->ego);
+        break;
+      }
+      *tmp = '\0';
+      printf ("Switching to new name `%s' in zone `%s'\n", next_name, tmp + 1);
+      have_next_zonekey = GNUNET_YES;
+      /* Run a command for the previous record set */
+      if (NULL != recordset)
+      {
+        run_with_zone_pkey (cfg);
+        return;
+      }
+      zone_pkey = next_zone_key;
+      if (NULL != name)
+        GNUNET_free (name);
+      name = GNUNET_strdup (next_name);
+      zonekey_set = GNUNET_YES;
+      continue;
+    }
+    if (GNUNET_NO == zonekey_set)
+    {
+      fprintf (stderr, "Warning, encountered recordline without zone\n");
+      continue;
+    }
+    printf ("Parsing `%s'\n", buf);
+    parse_recordline (buf);
   }
-  GNUNET_GETOPT_run ("gnunet-namestore", options, tmp_argc, tmp_argv);
-  for (ego_entry = ego_head; NULL != ego_entry; ego_entry = ego_entry->next)
+  if (GNUNET_NO == finished)
   {
-    if (0 != strcmp (ego_entry->identifier, ego_name))
-      continue;
-    zone_pkey = *GNUNET_IDENTITY_ego_get_private_key (ego_entry->ego);
-    break;
+    if (GNUNET_NO == zonekey_set)
+    {
+      fprintf (stderr, "Warning, encountered recordline without zone\n");
+    }
+    else if (NULL != recordset)
+    {
+      run_with_zone_pkey (cfg); /** one last time **/
+      finished = GNUNET_YES;
+      return;
+    }
   }
-  run_with_zone_pkey (cfg);
+  ns_qe = GNUNET_NAMESTORE_transaction_commit (ns, &commit_cb, NULL);
+  return;
 }
 
 
@@ -2030,19 +1992,16 @@ main (int argc, char *const *argv)
                                  gettext_noop (
                                    "name of the record to add/delete/display"),
                                  &name),
-    GNUNET_GETOPT_option_string ('r',
-                                 "reverse",
-                                 "PKEY",
+    GNUNET_GETOPT_option_flag ('r',
+                               "recordline",
+                               gettext_noop ("Output in recordline format"),
+                               &output_recordline),
+    GNUNET_GETOPT_option_string ('Z',
+                                 "zone-to-name",
+                                 "KEY",
                                  gettext_noop (
-                                   "determine our name for the given PKEY"),
+                                   "determine our name for the given KEY"),
                                  &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",
diff --git a/src/namestore/test_namestore_put_multiple.sh 
b/src/namestore/test_namestore_put_multiple.sh
old mode 100644
new mode 100755
index f33fb1c3a..4c7340440
--- a/src/namestore/test_namestore_put_multiple.sh
+++ b/src/namestore/test_namestore_put_multiple.sh
@@ -24,25 +24,9 @@ if [ 0 -ne $ret ]; then
     gnunet-identity -C randomtestingid
 fi
 
-function minimize_ttl {
-    ttl=10000000
-    arr=$1
-    # parse each element and update ttl to smallest one
-    for i in "${arr[@]}"
-    do
-        currttl=$(echo -n "$i" | cut -d' ' -f1)
-        if [ "$currttl"  -lt "$ttl" ]
-        then
-            ttl=$currttl
-        fi
-
-    done
-    echo "$ttl"
-}
-
 function get_record_type {
     arr=$1
-    typ=$(echo -n "${arr[0]}" | cut -d' ' -f2)
+    typ=$(echo -n "${arr[0]}" | cut -d' ' -f1)
     echo "$typ"
 }
 
@@ -59,10 +43,14 @@ function testing {
     typ=$(get_record_type "${records[@]}")
     for i in "${records[@]}"
     do
-        recordstring+="-R $i"
+        recordstring+="$i"$'\n'
     done
-    #echo "$recordstring"
-    gnunet-namestore -z randomtestingid -n "$label" "$recordstring" 2>&1  
/dev/null
+    echo "$recordstring"
+    gnunet-namestore -a -S <<EOF
+$label.randomtestingid:
+      $recordstring
+EOF
+    ret=$?
     if [ 0 -ne $ret ]; then
         echo "failed to add record $label: $recordstring"
     fi
@@ -75,26 +63,27 @@ function testing {
 # TEST CASES
 # 1
 echo "Testing adding of single A record with -R"
+declare -a arr=('A 1200 [r] 127.0.0.1')
 testing test1 "${arr[@]}"
 # 2
 echo "Testing adding of multiple A records with -R"
-declare -a arr=('1200 A n 127.0.0.1' '2400 A n 127.0.0.2')
+declare -a arr=('A 1200 [r] 127.0.0.1' 'A 2400 [r] 127.0.0.2')
 testing test2 "${arr[@]}"
 # 3
 echo "Testing adding of multiple different records with -R"
-declare -a arr=('1200 A n 127.0.0.1' '2400 AAAA n 2002::')
+declare -a arr=('A 1200 [r] 127.0.0.1' 'AAAA 2400 [r] 2002::')
 testing test3 "${arr[@]}"
 # 4
 echo "Testing adding of single GNS2DNS record with -R"
-declare -a arr=('86400 GNS2DNS n gnu.org@127.0.0.1')
+declare -a arr=('GNS2DNS 86400 [r] gnu.org@127.0.0.1')
 testing test4 "${arr[@]}"
 # 5
 echo "Testing adding of single GNS2DNS shadow record with -R"
-declare -a arr=('86409 GNS2DNS s gnu.org@127.0.0.250')
+declare -a arr=('GNS2DNS 86409 [rs] gnu.org@127.0.0.250')
 testing test5 "${arr[@]}"
 # 6
 echo "Testing adding of multiple GNS2DNS record with -R"
-declare -a arr=('1 GNS2DNS n gnunet.org@127.0.0.1' '3600 GNS2DNS s 
gnunet.org@127.0.0.2')
+declare -a arr=('GNS2DNS 1 [r] gnunet.org@127.0.0.1' 'GNS2DNS 3600 [s] 
gnunet.org@127.0.0.2')
 testing test6 "${arr[@]}"
 val=$(gnunet-gns -t GNS2DNS -u test6.randomtestingid)
 if [[ $val == *"127.0.0.1"* ]]; then
@@ -108,16 +97,16 @@ if [[ $val == *"127.0.0.2"* ]]; then
 fi
 # 7
 echo "Testing adding MX record with -R"
-declare -a arr=('3600 MX n 10,mail')
+declare -a arr=('MX 3600 [r] 10,mail')
 testing test7 "${arr[@]}"
 # 8
 echo "Testing adding TXT record with -R"
-declare -a arr=('3600 TXT n Pretty_Unicorns')
+declare -a arr=('TXT 3600 [r] Pretty_Unicorns')
 testing test8 "${arr[@]}"
 # 8
-echo "Testing adding TXT record with -R"
-declare -a arr=('3600 SRV n _autodiscover_old._tcp.bfh.ch.')
-testing test8 "${arr[@]}"
+#echo "Testing adding TXT record with -R"
+#declare -a arr=('SRV 3600 [r] _autodiscover_old._tcp.bfh.ch.')
+#testing test8 "${arr[@]}"
 
 # CLEANUP
 gnunet-identity -D randomtestingid
diff --git a/src/namestore/test_namestore_put_stdin.sh 
b/src/namestore/test_namestore_put_stdin.sh
new file mode 100755
index 000000000..8fdcaa23f
--- /dev/null
+++ b/src/namestore/test_namestore_put_stdin.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+CONFIGURATION="test_namestore_api.conf"
+trap "gnunet-arm -e -c $CONFIGURATION" SIGINT
+
+LOCATION=$(which gnunet-config)
+if [ -z $LOCATION ]
+then
+  LOCATION="gnunet-config"
+fi
+$LOCATION --version 1> /dev/null
+if test $? != 0
+then
+       echo "GNUnet command line tools cannot be found, check environmental 
variables PATH and GNUNET_PREFIX"
+       exit 77
+fi
+
+rm -rf `$LOCATION -c $CONFIGURATION -s PATHS -o GNUNET_HOME`
+TEST_RECORD_NAME="www3"
+TEST_RECORD_NAME2="www"
+TEST_IP="8.7.6.5"
+TEST_IP2="1.2.3.4"
+
+which timeout &> /dev/null && DO_TIMEOUT="timeout 5"
+
+function start_peer
+{
+       gnunet-arm -s -c $CONFIGURATION
+       gnunet-identity -C testego -c $CONFIGURATION
+}
+
+function stop_peer
+{
+       gnunet-identity -D testego -c $CONFIGURATION
+       gnunet-arm -e -c $CONFIGURATION
+}
+
+
+start_peer
+# Create a public record
+gnunet-namestore -a -c $CONFIGURATION -S <<EOF
+$TEST_RECORD_NAME.testego:
+  A 3600000000 [pr] $TEST_IP
+  TXT 21438201833 [r] $TEST_IP2
+
+  TXT 21438201833 [r] aslkdj asdlkjaslkd 232!
+
+$TEST_RECORD_NAME2.testego:
+  AAAA 324241223 [prS] ::dead:beef
+  A 111324241223000000 [pC] 1.1.1.1
+
+EOF
+NAMESTORE_RES=$?
+gnunet-namestore -z testego -D -r -c $CONFIGURATION
+stop_peer
+
+if [ $NAMESTORE_RES = 0 ]
+then
+  echo "PASS: Creating name in namestore"
+else
+  echo "FAIL: Creating name in namestore failed with $NAMESTORE_RES."
+  exit 1
+fi

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]