first step to remove plibc
[oweals/gnunet.git] / src / gns / plugin_gnsrecord_gns.c
index 6adad0f3480ab4a24e7442009db1dbd5a757d4d8..8cb76cffe4a525a68cda90142a072c35df7617ea 100644 (file)
@@ -2,20 +2,20 @@
      This file is part of GNUnet
      Copyright (C) 2013, 2014, 2016 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
+     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 <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 
 /**
@@ -61,85 +61,68 @@ gns_value_to_string (void *cls,
     return GNUNET_strndup (data, data_size);
   case GNUNET_GNSRECORD_TYPE_LEHO:
     return GNUNET_strndup (data, data_size);
-  case GNUNET_GNSRECORD_TYPE_GNS2DNS:
+  case GNUNET_GNSRECORD_TYPE_GNS2DNS: {
+    char *ns;
+    char *ip;
+    size_t off;
+    char *nstr;
+
+    off = 0;
+    ns = GNUNET_DNSPARSER_parse_name (data, data_size, &off);
+    ip = GNUNET_DNSPARSER_parse_name (data, data_size, &off);
+    if ((NULL == ns) || (NULL == ip) || (off != data_size))
     {
-      char *ns;
-      char *ip;
-      size_t off;
-      char *nstr;
-
-      off = 0;
-      ns = GNUNET_DNSPARSER_parse_name (data,
-                                       data_size,
-                                       &off);
-      ip = GNUNET_DNSPARSER_parse_name (data,
-                                       data_size,
-                                       &off);
-      if ( (NULL == ns) ||
-           (NULL == ip) ||
-          (off != data_size) )
-      {
-       GNUNET_break_op (0);
-       GNUNET_free_non_null (ns);
-       GNUNET_free_non_null (ip);
-       return NULL;
-      }
-      GNUNET_asprintf (&nstr,
-                       "%s@%s",
-                       ns,
-                       ip);
+      GNUNET_break_op (0);
       GNUNET_free_non_null (ns);
       GNUNET_free_non_null (ip);
-      return nstr;
-    }
-  case GNUNET_GNSRECORD_TYPE_VPN:
-    {
-      struct GNUNET_TUN_GnsVpnRecord vpn;
-      char* vpn_str;
-
-      cdata = data;
-      if ( (data_size <= sizeof (vpn)) ||
-          ('\0' != cdata[data_size - 1]) )
-       return NULL; /* malformed */
-      /* need to memcpy for alignment */
-      memcpy (&vpn,
-              data,
-              sizeof (vpn));
-      GNUNET_asprintf (&vpn_str,
-                       "%u %s %s",
-                       (unsigned int) ntohs (vpn.proto),
-                       (const char*) GNUNET_i2s_full (&vpn.peer),
-                       (const char*) &cdata[sizeof (vpn)]);
-      return vpn_str;
-    }
-  case GNUNET_GNSRECORD_TYPE_BOX:
-    {
-      struct GNUNET_GNSRECORD_BoxRecord box;
-      uint32_t rt;
-      char *box_str;
-      char *ival;
-
-      cdata = data;
-      if (data_size < sizeof (struct GNUNET_GNSRECORD_BoxRecord))
-       return NULL; /* malformed */
-      memcpy (&box,
-              data,
-              sizeof (box));
-      rt = ntohl (box.record_type);
-      ival = GNUNET_GNSRECORD_value_to_string (rt,
-                                               &cdata[sizeof (box)],
-                                               data_size - sizeof (box));
-      if (NULL == ival)
-        return NULL; /* malformed */
-      GNUNET_asprintf (&box_str,
-                       "%u %u %u %s",
-                       (unsigned int) ntohs (box.protocol),
-                       (unsigned int) ntohs (box.service),
-                       (unsigned int) rt,
-                       ival);
-      GNUNET_free (ival);
-      return box_str;
+      return NULL;
     }
+    GNUNET_asprintf (&nstr, "%s@%s", ns, ip);
+    GNUNET_free_non_null (ns);
+    GNUNET_free_non_null (ip);
+    return nstr;
+  }
+  case GNUNET_GNSRECORD_TYPE_VPN: {
+    struct GNUNET_TUN_GnsVpnRecord vpn;
+    char *vpn_str;
+
+    cdata = data;
+    if ((data_size <= sizeof (vpn)) || ('\0' != cdata[data_size - 1]))
+      return NULL; /* malformed */
+    /* need to memcpy for alignment */
+    GNUNET_memcpy (&vpn, data, sizeof (vpn));
+    GNUNET_asprintf (&vpn_str,
+                     "%u %s %s",
+                     (unsigned int) ntohs (vpn.proto),
+                     (const char *) GNUNET_i2s_full (&vpn.peer),
+                     (const char *) &cdata[sizeof (vpn)]);
+    return vpn_str;
+  }
+  case GNUNET_GNSRECORD_TYPE_BOX: {
+    struct GNUNET_GNSRECORD_BoxRecord box;
+    uint32_t rt;
+    char *box_str;
+    char *ival;
+
+    cdata = data;
+    if (data_size < sizeof (struct GNUNET_GNSRECORD_BoxRecord))
+      return NULL; /* malformed */
+    GNUNET_memcpy (&box, data, sizeof (box));
+    rt = ntohl (box.record_type);
+    ival = GNUNET_GNSRECORD_value_to_string (rt,
+                                             &cdata[sizeof (box)],
+                                             data_size - sizeof (box));
+    if (NULL == ival)
+      return NULL; /* malformed */
+    GNUNET_asprintf (&box_str,
+                     "%u %u %u %s",
+                     (unsigned int) ntohs (box.protocol),
+                     (unsigned int) ntohs (box.service),
+                     (unsigned int) rt,
+                     ival);
+    GNUNET_free (ival);
+    return box_str;
+  }
   default:
     return NULL;
   }
@@ -171,148 +154,128 @@ gns_string_to_value (void *cls,
   switch (type)
   {
 
-    case GNUNET_GNSRECORD_TYPE_PKEY:
-      if (GNUNET_OK !=
-          GNUNET_CRYPTO_ecdsa_public_key_from_string (s, strlen (s), &pkey))
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                    _("Unable to parse PKEY record `%s'\n"),
-                    s);
-        return GNUNET_SYSERR;
-      }
-      *data = GNUNET_new (struct GNUNET_CRYPTO_EcdsaPublicKey);
-      GNUNET_memcpy (*data, &pkey, sizeof (pkey));
-      *data_size = sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey);
-      return GNUNET_OK;
-
-    case GNUNET_GNSRECORD_TYPE_NICK:
-      *data = GNUNET_strdup (s);
-      *data_size = strlen (s);
-      return GNUNET_OK;
-    case GNUNET_GNSRECORD_TYPE_LEHO:
-      *data = GNUNET_strdup (s);
-      *data_size = strlen (s);
-      return GNUNET_OK;
-    case GNUNET_GNSRECORD_TYPE_GNS2DNS:
-      {
-        char nsbuf[514];
-        char *cpy;
-        char *at;
-        size_t off;
-
-        cpy = GNUNET_strdup (s);
-        at = strchr (cpy, '@');
-        if (NULL == at)
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      _("Unable to parse GNS2DNS record `%s'\n"),
-                      s);
-          GNUNET_free (cpy);
-          return GNUNET_SYSERR;
-        }
-        *at = '\0';
-        at++;
-
-        off = 0;
-        if ( (GNUNET_OK !=
-              GNUNET_DNSPARSER_builder_add_name (nsbuf,
-                                                 sizeof (nsbuf),
-                                                 &off,
-                                                 cpy)) ||
-             (GNUNET_OK !=
-              GNUNET_DNSPARSER_builder_add_name (nsbuf,
-                                                 sizeof (nsbuf),
-                                                 &off,
-                                                 at)) )
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      _("Failed to serialize GNS2DNS record with value `%s'\n"),
-                      s);
-          GNUNET_free (cpy);
-          return GNUNET_SYSERR;
-        }
-        GNUNET_free (cpy);
-        *data_size = off;
-        *data = GNUNET_malloc (off);
-        GNUNET_memcpy (*data, nsbuf, off);
-        return GNUNET_OK;
-      }
-    case GNUNET_GNSRECORD_TYPE_VPN:
-      {
-        struct GNUNET_TUN_GnsVpnRecord *vpn;
-        char s_peer[103 + 1];
-        char s_serv[253 + 1];
-        unsigned int proto;
-
-        if (3 != SSCANF (s,
-                         "%u %103s %253s",
-                         &proto, s_peer, s_serv))
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      _("Unable to parse VPN record string `%s'\n"),
-                      s);
-          return GNUNET_SYSERR;
-        }
-        *data_size = sizeof (struct GNUNET_TUN_GnsVpnRecord) + strlen (s_serv) + 1;
-        *data = vpn = GNUNET_malloc (*data_size);
-        if (GNUNET_OK !=
-            GNUNET_CRYPTO_eddsa_public_key_from_string ((char*) s_peer,
-                                                        strlen (s_peer),
-                                                        &vpn->peer.public_key))
-        {
-          GNUNET_free (vpn);
-          *data_size = 0;
-          return GNUNET_SYSERR;
-        }
-        vpn->proto = htons ((uint16_t) proto);
-        strcpy ((char*)&vpn[1], s_serv);
-        return GNUNET_OK;
-      }
-    case GNUNET_GNSRECORD_TYPE_BOX:
-      {
-        struct GNUNET_GNSRECORD_BoxRecord *box;
-        size_t rest;
-        unsigned int protocol;
-        unsigned int service;
-        unsigned int record_type;
-        void *bval;
-        size_t bval_size;
-
-        if (3 != SSCANF (s,
-                         "%u %u %u ",
-                         &protocol,
-                         &service,
-                         &record_type))
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                      _("Unable to parse BOX record string `%s'\n"),
-                      s);
-          return GNUNET_SYSERR;
-        }
-        rest = snprintf (NULL, 0,
-                         "%u %u %u ",
-                         protocol,
-                         service,
-                         record_type);
-        if (GNUNET_OK !=
-            GNUNET_GNSRECORD_string_to_value (record_type,
-                                              &s[rest],
-                                              &bval,
-                                              &bval_size))
-          return GNUNET_SYSERR;
-        *data_size = sizeof (struct GNUNET_GNSRECORD_BoxRecord) + bval_size;
-        *data = box = GNUNET_malloc (*data_size);
-        box->protocol = htons (protocol);
-        box->service = htons (service);
-        box->record_type = htonl (record_type);
-        GNUNET_memcpy (&box[1],
-                       bval,
-                       bval_size);
-        GNUNET_free (bval);
-        return GNUNET_OK;
-      }
-    default:
+  case GNUNET_GNSRECORD_TYPE_PKEY:
+    if (GNUNET_OK !=
+        GNUNET_CRYPTO_ecdsa_public_key_from_string (s, strlen (s), &pkey))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _ ("Unable to parse PKEY record `%s'\n"),
+                  s);
+      return GNUNET_SYSERR;
+    }
+    *data = GNUNET_new (struct GNUNET_CRYPTO_EcdsaPublicKey);
+    GNUNET_memcpy (*data, &pkey, sizeof (pkey));
+    *data_size = sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey);
+    return GNUNET_OK;
+
+  case GNUNET_GNSRECORD_TYPE_NICK:
+    *data = GNUNET_strdup (s);
+    *data_size = strlen (s);
+    return GNUNET_OK;
+  case GNUNET_GNSRECORD_TYPE_LEHO:
+    *data = GNUNET_strdup (s);
+    *data_size = strlen (s);
+    return GNUNET_OK;
+  case GNUNET_GNSRECORD_TYPE_GNS2DNS: {
+    char nsbuf[514];
+    char *cpy;
+    char *at;
+    size_t off;
+
+    cpy = GNUNET_strdup (s);
+    at = strchr (cpy, '@');
+    if (NULL == at)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _ ("Unable to parse GNS2DNS record `%s'\n"),
+                  s);
+      GNUNET_free (cpy);
+      return GNUNET_SYSERR;
+    }
+    *at = '\0';
+    at++;
+
+    off = 0;
+    if ((GNUNET_OK != GNUNET_DNSPARSER_builder_add_name (nsbuf,
+                                                         sizeof (nsbuf),
+                                                         &off,
+                                                         cpy)) ||
+        (GNUNET_OK !=
+         GNUNET_DNSPARSER_builder_add_name (nsbuf, sizeof (nsbuf), &off, at)))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _ ("Failed to serialize GNS2DNS record with value `%s'\n"),
+                  s);
+      GNUNET_free (cpy);
       return GNUNET_SYSERR;
+    }
+    GNUNET_free (cpy);
+    *data_size = off;
+    *data = GNUNET_malloc (off);
+    GNUNET_memcpy (*data, nsbuf, off);
+    return GNUNET_OK;
+  }
+  case GNUNET_GNSRECORD_TYPE_VPN: {
+    struct GNUNET_TUN_GnsVpnRecord *vpn;
+    char s_peer[103 + 1];
+    char s_serv[253 + 1];
+    unsigned int proto;
+
+    if (3 != sscanf (s, "%u %103s %253s", &proto, s_peer, s_serv))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _ ("Unable to parse VPN record string `%s'\n"),
+                  s);
+      return GNUNET_SYSERR;
+    }
+    *data_size = sizeof (struct GNUNET_TUN_GnsVpnRecord) + strlen (s_serv) + 1;
+    *data = vpn = GNUNET_malloc (*data_size);
+    if (GNUNET_OK !=
+        GNUNET_CRYPTO_eddsa_public_key_from_string ((char *) s_peer,
+                                                    strlen (s_peer),
+                                                    &vpn->peer.public_key))
+    {
+      GNUNET_free (vpn);
+      *data_size = 0;
+      return GNUNET_SYSERR;
+    }
+    vpn->proto = htons ((uint16_t) proto);
+    strcpy ((char *) &vpn[1], s_serv);
+    return GNUNET_OK;
+  }
+  case GNUNET_GNSRECORD_TYPE_BOX: {
+    struct GNUNET_GNSRECORD_BoxRecord *box;
+    size_t rest;
+    unsigned int protocol;
+    unsigned int service;
+    unsigned int record_type;
+    void *bval;
+    size_t bval_size;
+
+    if (3 != sscanf (s, "%u %u %u ", &protocol, &service, &record_type))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _ ("Unable to parse BOX record string `%s'\n"),
+                  s);
+      return GNUNET_SYSERR;
+    }
+    rest = snprintf (NULL, 0, "%u %u %u ", protocol, service, record_type);
+    if (GNUNET_OK != GNUNET_GNSRECORD_string_to_value (record_type,
+                                                       &s[rest],
+                                                       &bval,
+                                                       &bval_size))
+      return GNUNET_SYSERR;
+    *data_size = sizeof (struct GNUNET_GNSRECORD_BoxRecord) + bval_size;
+    *data = box = GNUNET_malloc (*data_size);
+    box->protocol = htons (protocol);
+    box->service = htons (service);
+    box->record_type = htonl (record_type);
+    GNUNET_memcpy (&box[1], bval, bval_size);
+    GNUNET_free (bval);
+    return GNUNET_OK;
+  }
+  default:
+    return GNUNET_SYSERR;
   }
 }
 
@@ -321,18 +284,17 @@ gns_string_to_value (void *cls,
  * Mapping of record type numbers to human-readable
  * record type names.
  */
-static struct {
+static struct
+{
   const char *name;
   uint32_t number;
-} gns_name_map[] = {
-  { "PKEY",  GNUNET_GNSRECORD_TYPE_PKEY },
-  { "NICK",  GNUNET_GNSRECORD_TYPE_NICK },
-  { "LEHO",  GNUNET_GNSRECORD_TYPE_LEHO },
-  { "VPN", GNUNET_GNSRECORD_TYPE_VPN },
-  { "GNS2DNS", GNUNET_GNSRECORD_TYPE_GNS2DNS },
-  { "BOX", GNUNET_GNSRECORD_TYPE_BOX },
-  { NULL, UINT32_MAX }
-};
+} gns_name_map[] = {{"PKEY", GNUNET_GNSRECORD_TYPE_PKEY},
+                    {"NICK", GNUNET_GNSRECORD_TYPE_NICK},
+                    {"LEHO", GNUNET_GNSRECORD_TYPE_LEHO},
+                    {"VPN", GNUNET_GNSRECORD_TYPE_VPN},
+                    {"GNS2DNS", GNUNET_GNSRECORD_TYPE_GNS2DNS},
+                    {"BOX", GNUNET_GNSRECORD_TYPE_BOX},
+                    {NULL, UINT32_MAX}};
 
 
 /**
@@ -343,15 +305,13 @@ static struct {
  * @return corresponding number, UINT32_MAX on error
  */
 static uint32_t
-gns_typename_to_number (void *cls,
-                        const char *gns_typename)
+gns_typename_to_number (void *cls, const char *gns_typename)
 {
   unsigned int i;
 
-  i=0;
-  while ( (NULL != gns_name_map[i].name) &&
-          (0 != strcasecmp (gns_typename,
-                            gns_name_map[i].name)) )
+  i = 0;
+  while ((NULL != gns_name_map[i].name) &&
+         (0 != strcasecmp (gns_typename, gns_name_map[i].name)))
     i++;
   return gns_name_map[i].number;
 }
@@ -365,14 +325,12 @@ gns_typename_to_number (void *cls,
  * @return corresponding typestring, NULL on error
  */
 static const char *
-gns_number_to_typename (void *cls,
-                        uint32_t type)
+gns_number_to_typename (void *cls, uint32_t type)
 {
   unsigned int i;
 
-  i=0;
-  while ( (NULL != gns_name_map[i].name) &&
-          (type != gns_name_map[i].number) )
+  i = 0;
+  while ((NULL != gns_name_map[i].name) && (type != gns_name_map[i].number))
     i++;
   return gns_name_map[i].name;
 }