diff --git a/ChangeLog b/ChangeLog index 68a9ea47fc..c3d439f164 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-03-07 Ulrich Drepper + + * 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 + + * 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 * sysdeps/unix/sysv/linux/ia64/dl-static.c (_dl_static_init): Call diff --git a/Versions.def b/Versions.def index 4e015dc260..67f0e5ed3d 100644 --- a/Versions.def +++ b/Versions.def @@ -108,3 +108,6 @@ libthread_db { libanl { GLIBC_2.2.3 } +libcidn { + GLIBC_PRIVATE +} diff --git a/config.h.in b/config.h.in index ed6e701df0..86b1e39a7e 100644 --- a/config.h.in +++ b/config.h.in @@ -205,6 +205,9 @@ /* Defined if the linker supports the -z relro option. */ #undef HAVE_Z_RELRO +/* Defined of libidn is available. */ +#undef HAVE_LIBIDN + /* */ diff --git a/configure b/configure index 24d5ee3375..4fdb46511d 100755 --- 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 diff --git a/configure.in b/configure.in index ba7fc3d9d9..30cf01266c 100644 --- a/configure.in +++ b/configure.in @@ -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 < #include +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;