Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 8 Mar 2004 04:10:31 +0000 (04:10 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 8 Mar 2004 04:10:31 +0000 (04:10 +0000)
* config.h.in: Add entry for HAVE_LIBIDN.
* configure.in: If libidn add-on present define HAVE_LIBIDN.
* Versions.def: Add entry for libcidn.

2004-03-07  Simon Josefsson  <jas@extundo.com>

* resolv/netdb.h [__USE_GNU]: Add new AI_IDN ai_flags for addrinfo.
[__USE_GNU]: Add new error code EAI_IDN_ENCODE for getaddrinfo.
* sysdeps/posix/getaddrinfo.c: Add prototype for __idna_to_ascii_lz
and define IDNA_SUCCESS.
(gaih_inet): If ai_flags have AI_IDN, invoke __idna_to_ascii_lz.
(getaddrinfo): Fix EAI_BADFLAGS test to include AI_IDN.
All changes only applicable when glibc is compiled with the libidn
add-on.

2004-03-07  Ulrich Drepper  <drepper@redhat.com>

ChangeLog
Versions.def
config.h.in
configure
configure.in
resolv/netdb.h
sysdeps/posix/getaddrinfo.c

index 68a9ea4..c3d439f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2004-03-07  Ulrich Drepper  <drepper@redhat.com>
 
+       * config.h.in: Add entry for HAVE_LIBIDN.
+       * configure.in: If libidn add-on present define HAVE_LIBIDN.
+       * Versions.def: Add entry for libcidn.
+
+2004-03-07  Simon Josefsson  <jas@extundo.com>
+
+       * resolv/netdb.h [__USE_GNU]: Add new AI_IDN ai_flags for addrinfo.
+       [__USE_GNU]: Add new error code EAI_IDN_ENCODE for getaddrinfo.
+       * sysdeps/posix/getaddrinfo.c: Add prototype for __idna_to_ascii_lz
+       and define IDNA_SUCCESS.
+       (gaih_inet): If ai_flags have AI_IDN, invoke __idna_to_ascii_lz.
+       (getaddrinfo): Fix EAI_BADFLAGS test to include AI_IDN.
+       All changes only applicable when glibc is compiled with the libidn
+       add-on.
+
+2004-03-07  Ulrich Drepper  <drepper@redhat.com>
+
        * sysdeps/unix/sysv/linux/ia64/dl-static.c (_dl_static_init): Call
        _dl_lookup_symbol_x not _dl_lookup_symbol.
 
index 4e015dc..67f0e5e 100644 (file)
@@ -108,3 +108,6 @@ libthread_db {
 libanl {
   GLIBC_2.2.3
 }
+libcidn {
+  GLIBC_PRIVATE
+}
index ed6e701..86b1e39 100644 (file)
 /* Defined if the linker supports the -z relro option.  */
 #undef HAVE_Z_RELRO
 
+/* Defined of libidn is available.  */
+#undef HAVE_LIBIDN
+
 /*
 \f */
 
index 24d5ee3..4fdb465 100755 (executable)
--- a/configure
+++ b/configure
@@ -7293,6 +7293,7 @@ use_ldconfig=no
 ldd_rewrite_script=no
 libc_cv_sysconfdir=$sysconfdir
 libc_cv_gcc_unwind_find_fde=no
+libc_cv_idn=no
 
 # Iterate over all the sysdep directories we will use, running their
 # configure fragments, and looking for a uname implementation.
@@ -7467,6 +7468,13 @@ if test $shared = default; then
   fi
 fi
 
+if test x"$libc_cv_idn" = xyes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBIDN 1
+_ACEOF
+
+fi
+
 echo "$as_me:$LINENO: checking whether -fPIC is default" >&5
 echo $ECHO_N "checking whether -fPIC is default... $ECHO_C" >&6
 if test "${pic_default+set}" = set; then
index ba7fc3d..30cf012 100644 (file)
@@ -1903,6 +1903,7 @@ use_ldconfig=no
 ldd_rewrite_script=no
 libc_cv_sysconfdir=$sysconfdir
 libc_cv_gcc_unwind_find_fde=no
+libc_cv_idn=no
 
 # Iterate over all the sysdep directories we will use, running their
 # configure fragments, and looking for a uname implementation.
@@ -2045,6 +2046,10 @@ if test $shared = default; then
   fi
 fi
 
+if test x"$libc_cv_idn" = xyes; then
+  AC_DEFINE(HAVE_LIBIDN)
+fi
+
 AC_CACHE_CHECK([whether -fPIC is default], pic_default,
 [pic_default=yes
 cat > conftest.c <<EOF
index cca9ffc..5aaa387 100644 (file)
@@ -1,4 +1,4 @@
-  /* Copyright (C) 1996-2002, 2003 Free Software Foundation, Inc.
+  /* Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -573,6 +573,11 @@ struct gaicb
 # define AI_ALL                0x0010  /* Return IPv4 mapped and IPv6 addresses.  */
 # define AI_ADDRCONFIG 0x0020  /* Use configuration of this host to choose
                                   returned address type..  */
+# ifdef __USE_GNU
+#  define AI_IDN       0x0040  /* IDN encode input (assuming it is encoded
+                                  in the current locale's character set)
+                                  before looking it up. */
+# endif
 
 /* Error values for `getaddrinfo' function.  */
 # define EAI_BADFLAGS    -1    /* Invalid value for `ai_flags' field.  */
@@ -592,6 +597,7 @@ struct gaicb
 #  define EAI_NOTCANCELED -102 /* Request not canceled.  */
 #  define EAI_ALLDONE    -103  /* All requests done.  */
 #  define EAI_INTR       -104  /* Interrupted by a signal.  */
+#  define EAI_IDN_ENCODE  -105 /* IDN encoding failed.  */
 # endif
 
 # define NI_MAXHOST      1025
index afdefdf..2b6f0ba 100644 (file)
@@ -55,6 +55,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <nsswitch.h>
 #include <not-cancel.h>
 
+extern int __idna_to_ascii_lz (const char *input, char **output, int flags);
+#define IDNA_SUCCESS 0
+
 #define GAIH_OKIFUNSPEC 0x0100
 #define GAIH_EAI        ~(GAIH_OKIFUNSPEC)
 
@@ -539,6 +542,18 @@ gaih_inet (const char *name, const struct gaih_service *service,
       at->scopeid = 0;
       at->next = NULL;
 
+#ifdef HAVE_LIBIDN
+      if (req->ai_flags & AI_IDN)
+       {
+         char *p = NULL;
+         rc = __idna_to_ascii_lz (name, &p, 0);
+         if (rc != IDNA_SUCCESS)
+           return -EAI_IDN_ENCODE;
+         name = strdupa (p);
+         free (p);
+       }
+#endif
+
       if (inet_pton (AF_INET, name, at->addr) > 0)
        {
          if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET)
@@ -1252,6 +1267,9 @@ getaddrinfo (const char *name, const char *service,
 
   if (hints->ai_flags
       & ~(AI_PASSIVE|AI_CANONNAME|AI_NUMERICHOST|AI_ADDRCONFIG|AI_V4MAPPED
+#ifdef HAVE_LIBIDN
+         |AI_IDN
+#endif
          |AI_ALL))
     return EAI_BADFLAGS;