gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet] branch master updated (64c75b64f -> eb8770c02)


From: gnunet
Subject: [gnunet] branch master updated (64c75b64f -> eb8770c02)
Date: Sat, 30 Nov 2019 15:33:06 +0100

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

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

    from 64c75b64f document rval
     new e9ad4ee35 support compatibility mode for DNS names in gnunet-gns
     new 6495b7d3b fix GNS2DNS records for LSD001 UTF-8 change
     new 61efbfb56 correctly convert to IDNA when transitioning to DNS
     new 3afe75da1 invert ifdef guard
     new eb8770c02 update API description

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 po/POTFILES.in                        | 96 +++++++++++++++++------------------
 src/gns/Makefile.am                   | 12 +++++
 src/gns/gns_api.c                     |  2 +-
 src/gns/gns_tld_api.c                 |  2 +-
 src/gns/gnunet-gns.c                  | 66 +++++++++++++++++++++---
 src/gns/gnunet-service-gns_resolver.c | 33 ++++++++++++
 src/gns/nss/nss_gns_query.c           |  5 +-
 src/gns/plugin_gnsrecord_gns.c        | 37 +++++++++++---
 src/include/gnunet_gns_service.h      |  4 +-
 9 files changed, 192 insertions(+), 65 deletions(-)

diff --git a/po/POTFILES.in b/po/POTFILES.in
index ac81d134a..45cabc7cd 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,13 +10,21 @@ src/arm/arm_monitor_api.c
 src/arm/gnunet-arm.c
 src/arm/gnunet-service-arm.c
 src/arm/mockup-service.c
+src/ats-tests/ats-testing-experiment.c
+src/ats-tests/ats-testing-log.c
+src/ats-tests/ats-testing-preferences.c
+src/ats-tests/ats-testing-traffic.c
+src/ats-tests/ats-testing.c
+src/ats-tests/gnunet-ats-sim.c
+src/ats-tests/gnunet-solver-eval.c
+src/ats-tool/gnunet-ats.c
 src/ats/ats_api_connectivity.c
 src/ats/ats_api_performance.c
 src/ats/ats_api_scanner.c
 src/ats/ats_api_scheduling.c
 src/ats/gnunet-ats-solver-eval.c
-src/ats/gnunet-service-ats_addresses.c
 src/ats/gnunet-service-ats.c
+src/ats/gnunet-service-ats_addresses.c
 src/ats/gnunet-service-ats_connectivity.c
 src/ats/gnunet-service-ats_normalization.c
 src/ats/gnunet-service-ats_performance.c
@@ -25,14 +33,6 @@ src/ats/gnunet-service-ats_preferences.c
 src/ats/gnunet-service-ats_reservations.c
 src/ats/gnunet-service-ats_scheduling.c
 src/ats/plugin_ats_proportional.c
-src/ats-tests/ats-testing.c
-src/ats-tests/ats-testing-experiment.c
-src/ats-tests/ats-testing-log.c
-src/ats-tests/ats-testing-preferences.c
-src/ats-tests/ats-testing-traffic.c
-src/ats-tests/gnunet-ats-sim.c
-src/ats-tests/gnunet-solver-eval.c
-src/ats-tool/gnunet-ats.c
 src/auction/gnunet-auction-create.c
 src/auction/gnunet-auction-info.c
 src/auction/gnunet-auction-join.c
@@ -49,8 +49,8 @@ src/cadet/cadet_api_list_peers.c
 src/cadet/cadet_api_list_tunnels.c
 src/cadet/cadet_test_lib.c
 src/cadet/desirability_table.c
-src/cadet/gnunet-cadet.c
 src/cadet/gnunet-cadet-profiler.c
+src/cadet/gnunet-cadet.c
 src/cadet/gnunet-service-cadet.c
 src/cadet/gnunet-service-cadet_channel.c
 src/cadet/gnunet-service-cadet_connection.c
@@ -66,15 +66,15 @@ src/consensus/gnunet-service-consensus.c
 src/consensus/plugin_block_consensus.c
 src/conversation/conversation_api.c
 src/conversation/conversation_api_call.c
-src/conversation/gnunet-conversation.c
 src/conversation/gnunet-conversation-test.c
-src/conversation/gnunet_gst.c
-src/conversation/gnunet_gst_test.c
-src/conversation/gnunet-helper-audio-playback.c
+src/conversation/gnunet-conversation.c
 src/conversation/gnunet-helper-audio-playback-gst.c
-src/conversation/gnunet-helper-audio-record.c
+src/conversation/gnunet-helper-audio-playback.c
 src/conversation/gnunet-helper-audio-record-gst.c
+src/conversation/gnunet-helper-audio-record.c
 src/conversation/gnunet-service-conversation.c
+src/conversation/gnunet_gst.c
+src/conversation/gnunet_gst_test.c
 src/conversation/microphone.c
 src/conversation/plugin_gnsrecord_conversation.c
 src/conversation/speaker.c
@@ -104,7 +104,6 @@ src/dht/dht_api.c
 src/dht/dht_test_lib.c
 src/dht/gnunet-dht-get.c
 src/dht/gnunet-dht-monitor.c
-src/dht/gnunet_dht_profiler.c
 src/dht/gnunet-dht-put.c
 src/dht/gnunet-service-dht.c
 src/dht/gnunet-service-dht_clients.c
@@ -113,6 +112,7 @@ src/dht/gnunet-service-dht_hello.c
 src/dht/gnunet-service-dht_neighbours.c
 src/dht/gnunet-service-dht_nse.c
 src/dht/gnunet-service-dht_routing.c
+src/dht/gnunet_dht_profiler.c
 src/dht/plugin_block_dht.c
 src/dns/dns_api.c
 src/dns/gnunet-dns-monitor.c
@@ -147,8 +147,8 @@ src/fs/gnunet-auto-share.c
 src/fs/gnunet-daemon-fsprofiler.c
 src/fs/gnunet-directory.c
 src/fs/gnunet-download.c
-src/fs/gnunet-fs.c
 src/fs/gnunet-fs-profiler.c
+src/fs/gnunet-fs.c
 src/fs/gnunet-helper-fs-publish.c
 src/fs/gnunet-publish.c
 src/fs/gnunet-search.c
@@ -168,9 +168,9 @@ src/gns/gns_tld_api.c
 src/gns/gnunet-bcd.c
 src/gns/gnunet-dns2gns.c
 src/gns/gnunet-gns-benchmark.c
-src/gns/gnunet-gns.c
 src/gns/gnunet-gns-import.c
 src/gns/gnunet-gns-proxy.c
+src/gns/gnunet-gns.c
 src/gns/gnunet-service-gns.c
 src/gns/gnunet-service-gns_interceptor.c
 src/gns/gnunet-service-gns_resolver.c
@@ -186,8 +186,8 @@ src/gnsrecord/gnsrecord_serialization.c
 src/gnsrecord/plugin_gnsrecord_dns.c
 src/hello/address.c
 src/hello/gnunet-hello.c
-src/hello/hello.c
 src/hello/hello-ng.c
+src/hello/hello.c
 src/hostlist/gnunet-daemon-hostlist.c
 src/hostlist/gnunet-daemon-hostlist_client.c
 src/hostlist/gnunet-daemon-hostlist_server.c
@@ -212,8 +212,8 @@ src/namecache/namecache_api.c
 src/namecache/plugin_namecache_flat.c
 src/namecache/plugin_namecache_postgres.c
 src/namecache/plugin_namecache_sqlite.c
-src/namestore/gnunet-namestore.c
 src/namestore/gnunet-namestore-fcfsd.c
+src/namestore/gnunet-namestore.c
 src/namestore/gnunet-service-namestore.c
 src/namestore/gnunet-zoneimport.c
 src/namestore/namestore_api.c
@@ -239,17 +239,17 @@ src/nat/gnunet-service-nat_mini.c
 src/nat/gnunet-service-nat_stun.c
 src/nat/nat_api.c
 src/nat/nat_api_stun.c
-src/nse/gnunet-nse.c
 src/nse/gnunet-nse-profiler.c
+src/nse/gnunet-nse.c
 src/nse/gnunet-service-nse.c
 src/nse/nse_api.c
 src/nt/nt.c
-src/peerinfo/gnunet-service-peerinfo.c
-src/peerinfo/peerinfo_api.c
-src/peerinfo/peerinfo_api_notify.c
 src/peerinfo-tool/gnunet-peerinfo.c
 src/peerinfo-tool/gnunet-peerinfo_plugins.c
 src/peerinfo-tool/plugin_rest_peerinfo.c
+src/peerinfo/gnunet-service-peerinfo.c
+src/peerinfo/peerinfo_api.c
+src/peerinfo/peerinfo_api_notify.c
 src/peerstore/gnunet-peerstore.c
 src/peerstore/gnunet-service-peerstore.c
 src/peerstore/peerstore_api.c
@@ -297,22 +297,22 @@ src/revocation/gnunet-revocation.c
 src/revocation/gnunet-service-revocation.c
 src/revocation/plugin_block_revocation.c
 src/revocation/revocation_api.c
-src/rps/gnunet-rps.c
 src/rps/gnunet-rps-profiler.c
+src/rps/gnunet-rps.c
 src/rps/gnunet-service-rps.c
 src/rps/gnunet-service-rps_custommap.c
 src/rps/gnunet-service-rps_sampler.c
 src/rps/gnunet-service-rps_sampler_elem.c
 src/rps/gnunet-service-rps_view.c
-src/rps/rps_api.c
 src/rps/rps-sampler_client.c
 src/rps/rps-sampler_common.c
 src/rps/rps-test_util.c
+src/rps/rps_api.c
 src/scalarproduct/gnunet-scalarproduct.c
-src/scalarproduct/gnunet-service-scalarproduct_alice.c
-src/scalarproduct/gnunet-service-scalarproduct_bob.c
 src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
 src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
+src/scalarproduct/gnunet-service-scalarproduct_alice.c
+src/scalarproduct/gnunet-service-scalarproduct_bob.c
 src/scalarproduct/scalarproduct_api.c
 src/secretsharing/gnunet-secretsharing-profiler.c
 src/secretsharing/gnunet-service-secretsharing.c
@@ -338,15 +338,16 @@ src/statistics/gnunet-statistics.c
 src/statistics/statistics_api.c
 src/template/gnunet-service-template.c
 src/template/gnunet-template.c
+src/testbed-logger/gnunet-service-testbed-logger.c
+src/testbed-logger/testbed_logger_api.c
 src/testbed/generate-underlay-topology.c
 src/testbed/gnunet-daemon-latency-logger.c
 src/testbed/gnunet-daemon-testbed-blacklist.c
 src/testbed/gnunet-daemon-testbed-underlay.c
 src/testbed/gnunet-helper-testbed.c
-src/testbed/gnunet_mpi_test.c
 src/testbed/gnunet-service-test-barriers.c
-src/testbed/gnunet-service-testbed_barriers.c
 src/testbed/gnunet-service-testbed.c
+src/testbed/gnunet-service-testbed_barriers.c
 src/testbed/gnunet-service-testbed_cache.c
 src/testbed/gnunet-service-testbed_connectionpool.c
 src/testbed/gnunet-service-testbed_cpustatus.c
@@ -354,20 +355,19 @@ src/testbed/gnunet-service-testbed_links.c
 src/testbed/gnunet-service-testbed_meminfo.c
 src/testbed/gnunet-service-testbed_oc.c
 src/testbed/gnunet-service-testbed_peers.c
-src/testbed/gnunet_testbed_mpi_spawn.c
 src/testbed/gnunet-testbed-profiler.c
-src/testbed-logger/gnunet-service-testbed-logger.c
-src/testbed-logger/testbed_logger_api.c
-src/testbed/testbed_api_barriers.c
+src/testbed/gnunet_mpi_test.c
+src/testbed/gnunet_testbed_mpi_spawn.c
 src/testbed/testbed_api.c
+src/testbed/testbed_api_barriers.c
 src/testbed/testbed_api_hosts.c
 src/testbed/testbed_api_operations.c
 src/testbed/testbed_api_peers.c
 src/testbed/testbed_api_sd.c
 src/testbed/testbed_api_services.c
 src/testbed/testbed_api_statistics.c
-src/testbed/testbed_api_testbed.c
 src/testbed/testbed_api_test.c
+src/testbed/testbed_api_testbed.c
 src/testbed/testbed_api_topology.c
 src/testbed/testbed_api_underlay.c
 src/testing/gnunet-testing.c
@@ -379,34 +379,40 @@ src/transport/gnunet-communicator-tcp.c
 src/transport/gnunet-communicator-udp.c
 src/transport/gnunet-communicator-unix.c
 src/transport/gnunet-helper-transport-bluetooth.c
-src/transport/gnunet-helper-transport-wlan.c
 src/transport/gnunet-helper-transport-wlan-dummy.c
+src/transport/gnunet-helper-transport-wlan.c
 src/transport/gnunet-service-tng.c
-src/transport/gnunet-service-transport_ats.c
 src/transport/gnunet-service-transport.c
+src/transport/gnunet-service-transport_ats.c
 src/transport/gnunet-service-transport_hello.c
 src/transport/gnunet-service-transport_manipulation.c
 src/transport/gnunet-service-transport_neighbours.c
 src/transport/gnunet-service-transport_plugins.c
 src/transport/gnunet-service-transport_validation.c
-src/transport/gnunet-transport.c
 src/transport/gnunet-transport-profiler.c
 src/transport/gnunet-transport-wlan-receiver.c
 src/transport/gnunet-transport-wlan-sender.c
+src/transport/gnunet-transport.c
 src/transport/plugin_transport_http_client.c
 src/transport/plugin_transport_http_common.c
 src/transport/plugin_transport_http_server.c
 src/transport/plugin_transport_smtp.c
 src/transport/plugin_transport_tcp.c
 src/transport/plugin_transport_template.c
-src/transport/plugin_transport_udp_broadcasting.c
 src/transport/plugin_transport_udp.c
+src/transport/plugin_transport_udp_broadcasting.c
 src/transport/plugin_transport_unix.c
 src/transport/plugin_transport_wlan.c
 src/transport/tcp_connection_legacy.c
 src/transport/tcp_server_legacy.c
 src/transport/tcp_server_mst_legacy.c
 src/transport/tcp_service_legacy.c
+src/transport/transport-testing-filenames.c
+src/transport/transport-testing-loggers.c
+src/transport/transport-testing-main.c
+src/transport/transport-testing-send.c
+src/transport/transport-testing.c
+src/transport/transport-testing2.c
 src/transport/transport_api2_application.c
 src/transport/transport_api2_communication.c
 src/transport/transport_api2_core.c
@@ -419,12 +425,6 @@ src/transport/transport_api_manipulation.c
 src/transport/transport_api_monitor_peers.c
 src/transport/transport_api_monitor_plugins.c
 src/transport/transport_api_offer_hello.c
-src/transport/transport-testing2.c
-src/transport/transport-testing.c
-src/transport/transport-testing-filenames.c
-src/transport/transport-testing-loggers.c
-src/transport/transport-testing-main.c
-src/transport/transport-testing-send.c
 src/util/bandwidth.c
 src/util/benchmark.c
 src/util/bio.c
@@ -437,8 +437,8 @@ src/util/configuration_loader.c
 src/util/container_bloomfilter.c
 src/util/container_heap.c
 src/util/container_meta_data.c
-src/util/container_multihashmap32.c
 src/util/container_multihashmap.c
+src/util/container_multihashmap32.c
 src/util/container_multipeermap.c
 src/util/container_multishortmap.c
 src/util/container_multiuuidmap.c
@@ -461,8 +461,8 @@ src/util/dnsparser.c
 src/util/dnsstub.c
 src/util/getopt.c
 src/util/getopt_helpers.c
-src/util/gnunet-config.c
 src/util/gnunet-config-diff.c
+src/util/gnunet-config.c
 src/util/gnunet-ecc.c
 src/util/gnunet-qr.c
 src/util/gnunet-resolver.c
@@ -499,8 +499,8 @@ src/vpn/gnunet-helper-vpn.c
 src/vpn/gnunet-service-vpn.c
 src/vpn/gnunet-vpn.c
 src/vpn/vpn_api.c
-src/zonemaster/gnunet-service-zonemaster.c
 src/zonemaster/gnunet-service-zonemaster-monitor.c
+src/zonemaster/gnunet-service-zonemaster.c
 src/fs/fs_api.h
 src/testbed/testbed_api.h
 src/testbed/testbed_api_operations.h
diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am
index 846507b6f..764590589 100644
--- a/src/gns/Makefile.am
+++ b/src/gns/Makefile.am
@@ -10,7 +10,17 @@ SUBDIRS = . $(NSS_SUBDIR)
 pkgdata_DATA = \
   gnunet-gns-proxy-ca.template
 
+if HAVE_LIBIDN
+  LIBIDN= -lidn
+else
+  LIBIDN=
+endif
 
+if HAVE_LIBIDN2
+  LIBIDN2= -lidn2
+else
+  LIBIDN2=
+endif
 
 EXTRA_DIST = \
   test_gns_defaults.conf \
@@ -139,6 +149,7 @@ gnunet_gns_LDADD = \
   libgnunetgns.la \
   $(top_builddir)/src/gnsrecord/libgnunetgnsrecord.la \
   $(top_builddir)/src/util/libgnunetutil.la \
+  $(LIBIDN) $(LIBIDN2) \
   $(GN_LIBINTL)
 
 gnunet_gns_benchmark_SOURCES = \
@@ -226,6 +237,7 @@ gnunet_service_gns_LDADD = \
   $(top_builddir)/src/dns/libgnunetdns.la \
   $(top_builddir)/src/dht/libgnunetdht.la \
   $(top_builddir)/src/namecache/libgnunetnamecache.la \
+  $(LIBIDN) $(LIBIDN2) \
   $(USE_VPN) \
   $(GN_LIBINTL)
 
diff --git a/src/gns/gns_api.c b/src/gns/gns_api.c
index 4b3202bc5..4a4003b2a 100644
--- a/src/gns/gns_api.c
+++ b/src/gns/gns_api.c
@@ -324,7 +324,7 @@ GNUNET_GNS_lookup_cancel (struct GNUNET_GNS_LookupRequest 
*lr)
  * Perform an asynchronous lookup operation on the GNS.
  *
  * @param handle handle to the GNS service
- * @param name the name to look up
+ * @param name the name to look up (in UTF-8 encoding)
  * @param zone the zone to start the resolution in
  * @param type the record type to look up
  * @param options local options for the lookup
diff --git a/src/gns/gns_tld_api.c b/src/gns/gns_tld_api.c
index e8253ee4c..1db5baacb 100644
--- a/src/gns/gns_tld_api.c
+++ b/src/gns/gns_tld_api.c
@@ -230,7 +230,7 @@ identity_zone_cb (void *cls,
  * and the current configuration to resolve TLDs to zones.
  *
  * @param handle handle to the GNS service
- * @param name the name to look up, including TLD
+ * @param name the name to look up, including TLD (in UTF-8 encoding)
  * @param type the record type to look up
  * @param options local options for the lookup
  * @param proc processor to call on result
diff --git a/src/gns/gnunet-gns.c b/src/gns/gnunet-gns.c
index c3ba0a1f8..fe51013ed 100644
--- a/src/gns/gnunet-gns.c
+++ b/src/gns/gnunet-gns.c
@@ -23,12 +23,26 @@
  * @author Christian Grothoff
  */
 #include "platform.h"
+#if HAVE_LIBIDN2
+#if HAVE_IDN2_H
+#include <idn2.h>
+#elif HAVE_IDN2_IDN2_H
+#include <idn2/idn2.h>
+#endif
+#elif HAVE_LIBIDN
+#if HAVE_IDNA_H
+#include <idna.h>
+#elif HAVE_IDN_IDNA_H
+#include <idn/idna.h>
+#endif
+#endif
 #include <gnunet_util_lib.h>
 #include <gnunet_dnsparser_lib.h>
 #include <gnunet_gnsrecord_lib.h>
 #include <gnunet_namestore_service.h>
 #include <gnunet_gns_service.h>
 
+
 /**
  * Configuration we are using.
  */
@@ -44,6 +58,16 @@ static struct GNUNET_GNS_Handle *gns;
  */
 static char *lookup_name;
 
+/**
+ * DNS IDNA name to lookup. (set if -d option is set)
+ */
+char *idna_name;
+
+/**
+ * DNS compatibility (name is given as DNS name, possible IDNA).
+ */
+static int dns_compat;
+
 /**
  * record type to look up (-t option)
  */
@@ -108,6 +132,11 @@ do_shutdown (void *cls)
     GNUNET_GNS_disconnect (gns);
     gns = NULL;
   }
+  if (NULL != idna_name)
+  {
+    GNUNET_free (idna_name);
+    idna_name = NULL;
+  }
 }
 
 
@@ -200,6 +229,7 @@ run (void *cls,
   (void) cls;
   (void) args;
   (void) cfgfile;
+  Idna_rc rc;
 
   cfg = c;
   to_task = NULL;
@@ -209,13 +239,32 @@ run (void *cls,
     if (NULL != (colon = strchr (lookup_name, ':')))
       *colon = '\0';
   }
-  if (GNUNET_OK != GNUNET_DNSPARSER_check_name (lookup_name))
+  /**
+   * If DNS compatibility is requested, we first verify that the
+   * lookup_name is in a DNS format. If yes, we convert it to UTF-8.
+   */
+  if (GNUNET_YES == dns_compat)
   {
-    fprintf (stderr,
-             _ ("`%s' is not a valid domain name\n"),
-             lookup_name);
-    global_ret = 3;
-    return;
+    if (GNUNET_OK != GNUNET_DNSPARSER_check_name (lookup_name))
+    {
+      fprintf (stderr,
+               _ ("`%s' is not a valid DNS domain name\n"),
+               lookup_name);
+      global_ret = 3;
+      return;
+    }
+    if (IDNA_SUCCESS !=
+        (rc = idna_to_unicode_8z8z (lookup_name, &idna_name,
+                                    IDNA_ALLOW_UNASSIGNED)))
+    {
+      fprintf (stderr,
+               _ ("Failed to convert DNS IDNA name `%s' to UTF-8: %s\n"),
+               lookup_name,
+               idna_strerror (rc));
+      global_ret = 3;
+      return;
+    }
+    lookup_name = idna_name;
   }
   if (GNUNET_YES !=
       GNUNET_CLIENT_test (cfg,
@@ -299,6 +348,11 @@ main (int argc, char *const *argv)
                                "raw",
                                gettext_noop ("No unneeded output"),
                                &raw),
+    GNUNET_GETOPT_option_flag ('d',
+                               "dns",
+                               gettext_noop (
+                                 "DNS Compatibility: Name is passed in IDNA 
instead of UTF-8"),
+                               &dns_compat),
     GNUNET_GETOPT_OPTION_END };
   int ret;
 
diff --git a/src/gns/gnunet-service-gns_resolver.c 
b/src/gns/gnunet-service-gns_resolver.c
index 01af17fdc..9792aff58 100644
--- a/src/gns/gnunet-service-gns_resolver.c
+++ b/src/gns/gnunet-service-gns_resolver.c
@@ -25,6 +25,19 @@
  * @author Christian Grothoff
  */
 #include "platform.h"
+#if HAVE_LIBIDN2
+#if HAVE_IDN2_H
+#include <idn2.h>
+#elif HAVE_IDN2_IDN2_H
+#include <idn2/idn2.h>
+#endif
+#elif HAVE_LIBIDN
+#if HAVE_IDNA_H
+#include <idna.h>
+#elif HAVE_IDN_IDNA_H
+#include <idn/idna.h>
+#endif
+#endif
 #include "gnunet_util_lib.h"
 #include "gnunet_dnsstub_lib.h"
 #include "gnunet_dht_service.h"
@@ -1697,9 +1710,15 @@ recursive_gns2dns_resolution (struct GNS_ResolverHandle 
*rh,
     n = GNUNET_DNSPARSER_parse_name (rd[i].data,
                                      rd[i].data_size,
                                      &off);
+#ifdef LSD001
+    ip = GNUNET_strdup (&rd[i].data[off]);
+    off += strlen (ip) + 1;
+#else
     ip = GNUNET_DNSPARSER_parse_name (rd[i].data,
                                       rd[i].data_size,
                                       &off);
+#endif
+
     if ((NULL == n) ||
         (NULL == ip) ||
         (off != rd[i].data_size))
@@ -1818,6 +1837,20 @@ recursive_gns2dns_resolution (struct GNS_ResolverHandle 
*rh,
                    (0 != rh->name_resolution_pos) ? "." : "",
                    ns);
   GNUNET_free (ns);
+#ifdef LSD001
+  /* the GNS name is UTF-8 and may include multibyte chars.
+   * We have to convert the combined name to a DNS-compatible IDNA.
+   */
+  char *tmp = ac->label;
+  if (IDNA_SUCCESS != idna_to_ascii_8z (tmp, &ac->label, 
IDNA_ALLOW_UNASSIGNED))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                _("Name `%s' cannot be converted to IDNA."), tmp);
+    return GNUNET_SYSERR;
+  }
+  GNUNET_free (tmp);
+#endif
+
   GNUNET_CONTAINER_DLL_insert_tail (rh->ac_head,
                                     rh->ac_tail,
                                     ac);
diff --git a/src/gns/nss/nss_gns_query.c b/src/gns/nss/nss_gns_query.c
index 9ebdcb31f..4f5f06cfa 100644
--- a/src/gns/nss/nss_gns_query.c
+++ b/src/gns/nss/nss_gns_query.c
@@ -71,7 +71,10 @@ gns_resolve_name (int af, const char *name, struct userdata 
*u)
   if (0 == pid)
   {
     char *argv[] = { "gnunet-gns",
-                     "-r",
+                     "-r", //Raw output for easier parsing
+#ifdef LSD001
+                     "-d", //DNS compatibility (allow IDNA names, no UTF-8)
+#endif
                      "-t",
                      (AF_INET6 == af) ? "AAAA" : "A",
                      "-u",
diff --git a/src/gns/plugin_gnsrecord_gns.c b/src/gns/plugin_gnsrecord_gns.c
index cffd5a965..38c3582c1 100644
--- a/src/gns/plugin_gnsrecord_gns.c
+++ b/src/gns/plugin_gnsrecord_gns.c
@@ -72,14 +72,25 @@ gns_value_to_string (void *cls,
 
       off = 0;
       ns = GNUNET_DNSPARSER_parse_name (data, data_size, &off);
+      if (NULL == ns)
+      {
+        GNUNET_break_op (0);
+        GNUNET_free_non_null (ns);
+        return NULL;
+      }
+#ifdef LSD001 //DNS server IP/name must be UTF-8
+      ip = GNUNET_strdup((char*) &data[off]);
+#else
+      // Must be IP or DNS name
       ip = GNUNET_DNSPARSER_parse_name (data, data_size, &off);
-      if ((NULL == ns) || (NULL == ip) || (off != data_size))
+      if ((NULL == ip) || (off != data_size))
       {
         GNUNET_break_op (0);
         GNUNET_free_non_null (ns);
         GNUNET_free_non_null (ip);
         return NULL;
       }
+#endif
       GNUNET_asprintf (&nstr, "%s@%s", ns, ip);
       GNUNET_free_non_null (ns);
       GNUNET_free_non_null (ip);
@@ -203,19 +214,33 @@ gns_string_to_value (void *cls,
       at++;
 
       off = 0;
-      if ((GNUNET_OK != GNUNET_DNSPARSER_builder_add_name (nsbuf,
+      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)))
+                                                           cpy))
+      {
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                    _ (
+                      "Failed to serialize GNS2DNS record with value `%s': Not 
a DNS name.\n"),
+                    s);
+        GNUNET_free (cpy);
+        return GNUNET_SYSERR;
+      }
+#ifdef LSD001 //The DNS server location/name is in UTF-8
+      GNUNET_memcpy (&nsbuf[off], at, strlen (at) + 1);
+      off += strlen (at) + 1;
+#else
+      if (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"),
+                    _ (
+                      "Failed to serialize GNS2DNS record with value `%s': Not 
a DNS name\n"),
                     s);
         GNUNET_free (cpy);
         return GNUNET_SYSERR;
       }
+#endif
       GNUNET_free (cpy);
       *data_size = off;
       *data = GNUNET_malloc (off);
diff --git a/src/include/gnunet_gns_service.h b/src/include/gnunet_gns_service.h
index 9a8114e90..5d2b7246a 100644
--- a/src/include/gnunet_gns_service.h
+++ b/src/include/gnunet_gns_service.h
@@ -128,7 +128,7 @@ enum GNUNET_GNS_LocalOptions
  * Perform an asynchronous lookup operation on the GNS.
  *
  * @param handle handle to the GNS service
- * @param name the name to look up
+ * @param name the name to look up (in UTF-8 encoding)
  * @param zone zone to look in
  * @param type the GNS record type to look for
  * @param options local options for the lookup
@@ -179,7 +179,7 @@ typedef void (*GNUNET_GNS_LookupResultProcessor2) (
  * and the current configuration to resolve TLDs to zones.
  *
  * @param handle handle to the GNS service
- * @param name the name to look up, including TLD
+ * @param name the name to look up, including TLD (in UTF-8 encoding)
  * @param type the record type to look up
  * @param options local options for the lookup
  * @param proc processor to call on result

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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