* 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>
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.
libanl {
GLIBC_2.2.3
}
+libcidn {
+ GLIBC_PRIVATE
+}
/* Defined if the linker supports the -z relro option. */
#undef HAVE_Z_RELRO
+/* Defined of libidn is available. */
+#undef HAVE_LIBIDN
+
/*
\f */
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.
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
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.
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
- /* 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
# 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. */
# 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
#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)
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)
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;