From: Schanzenbach, Martin Date: Sat, 30 Nov 2019 11:34:17 +0000 (+0100) Subject: correctly convert to IDNA when transitioning to DNS X-Git-Tag: v0.12.0~63 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=61efbfb56dde7db7ede7478817d5dbb0ae1f95c1;p=oweals%2Fgnunet.git correctly convert to IDNA when transitioning to DNS --- diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am index bb319ce6e..764590589 100644 --- a/src/gns/Makefile.am +++ b/src/gns/Makefile.am @@ -237,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/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index fda2e69e0..bb319633a 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 +#elif HAVE_IDN2_IDN2_H +#include +#endif +#elif HAVE_LIBIDN +#if HAVE_IDNA_H +#include +#elif HAVE_IDN_IDNA_H +#include +#endif +#endif #include "gnunet_util_lib.h" #include "gnunet_dnsstub_lib.h" #include "gnunet_dht_service.h" @@ -1824,6 +1837,20 @@ recursive_gns2dns_resolution (struct GNS_ResolverHandle *rh, (0 != rh->name_resolution_pos) ? "." : "", ns); GNUNET_free (ns); +#ifndef 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);