Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 17 Mar 2004 20:02:19 +0000 (20:02 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 17 Mar 2004 20:02:19 +0000 (20:02 +0000)
2004-03-17  Ulrich Drepper  <drepper@redhat.com>

* resolv/netdb.h: Define AI_IDN_ALLOW_UNASSIGNED,
AI_IDN_USE_STD3_ASCII_RULES, NI_IDN_ALLOW_UNASSIGNED, and
NI_IDN_USE_STD3_ASCII_RULES.
* inet/getnameinfo.c (getnameinfo): Implement handling of
NI_IDN_ALLOW_UNASSIGNED and NI_IDN_USE_STD3_ASCII_RULES.
* sysdeps/posix/getaddrinfo.c (gaih_inet): Implement handling of
AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES.

ChangeLog
inet/getnameinfo.c
resolv/netdb.h
sysdeps/posix/getaddrinfo.c

index 228b876..a2f6dbe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2004-03-17  Ulrich Drepper  <drepper@redhat.com>
+
+       * resolv/netdb.h: Define AI_IDN_ALLOW_UNASSIGNED,
+       AI_IDN_USE_STD3_ASCII_RULES, NI_IDN_ALLOW_UNASSIGNED, and
+       NI_IDN_USE_STD3_ASCII_RULES.
+       * inet/getnameinfo.c (getnameinfo): Implement handling of
+       NI_IDN_ALLOW_UNASSIGNED and NI_IDN_USE_STD3_ASCII_RULES.
+       * sysdeps/posix/getaddrinfo.c (gaih_inet): Implement handling of
+       AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES.
+
 2004-03-17  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/x86_64/hp-timing.h (HP_TIMING_NOW): Make asm volatile.
index e62d575..493a423 100644 (file)
@@ -169,7 +169,7 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
 
   if (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV|NI_NOFQDN|NI_NAMEREQD|NI_DGRAM
 #ifdef HAVE_LIBIDN
-               |NI_IDN
+               |NI_IDN|NI_IDN_ALLOW_UNASSIGNED|NI_IDN_USE_STD3_ASCII_RULES
 #endif
                ))
     return EAI_BADFLAGS;
@@ -262,8 +262,15 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
                /* If requested, convert from the IDN format.  */
                if (flags & NI_IDN)
                  {
+                   int idn_flags = 0;
+                   if  (flags & NI_IDN_ALLOW_UNASSIGNED)
+                     idn_flags |= IDNA_ALLOW_UNASSIGNED;
+                   if (flags & NI_IDN_USE_STD3_ASCII_RULES)
+                     idn_flags |= IDNA_USE_STD3_ASCII_RULES;
+
                    char *out;
-                   int rc = __idna_to_unicode_lzlz (h->h_name, &out, 0);
+                   int rc = __idna_to_unicode_lzlz (h->h_name, &out,
+                                                    idn_flags);
                    if (rc != IDNA_SUCCESS)
                      {
                        if (rc == IDNA_MALLOC_ERROR)
index 204ba2e..53025ab 100644 (file)
@@ -578,6 +578,10 @@ struct gaicb
                                   in the current locale's character set)
                                   before looking it up. */
 #  define AI_CANONIDN  0x0080  /* Translate canonical name from IDN format. */
+#  define AI_IDN_ALLOW_UNASSIGNED 0x0100 /* Don't reject unassigned Unicode
+                                           code points.  */
+#  define AI_IDN_USE_STD3_ASCII_RULES 0x0200 /* Validate strings according to
+                                               STD3 rules.  */
 # endif
 
 /* Error values for `getaddrinfo' function.  */
@@ -612,6 +616,10 @@ struct gaicb
 # define NI_DGRAM      16      /* Look up UDP service rather than TCP.  */
 # ifdef __USE_GNU
 #  define NI_IDN       32      /* Convert name from IDN format.  */
+#  define NI_IDN_ALLOW_UNASSIGNED 64 /* Don't reject unassigned Unicode
+                                       code points.  */
+#  define NI_IDN_USE_STD3_ASCII_RULES 128 /* Validate strings according to
+                                            STD3 rules.  */
 # endif
 
 /* Translate name of a service location and/or a service name to set of
index 4597fea..e3b83e5 100644 (file)
@@ -549,8 +549,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
 #ifdef HAVE_LIBIDN
       if (req->ai_flags & AI_IDN)
        {
+         int idn_flags = 0;
+         if (req->ai_flags & AI_IDN_ALLOW_UNASSIGNED)
+           idn_flags |= IDNA_ALLOW_UNASSIGNED;
+         if (req->ai_flags & AI_IDN_USE_STD3_ASCII_RULES)
+           idn_flags |= IDNA_USE_STD3_ASCII_RULES;
+
          char *p = NULL;
-         rc = __idna_to_ascii_lz (name, &p, 0);
+         rc = __idna_to_ascii_lz (name, &p, idn_flags);
          if (rc != IDNA_SUCCESS)
            {
              if (rc == IDNA_MALLOC_ERROR)
@@ -838,8 +844,14 @@ gaih_inet (const char *name, const struct gaih_service *service,
 #ifdef HAVE_LIBIDN
            if (req->ai_flags & AI_CANONIDN)
              {
+               int idn_flags = 0;
+               if (req->ai_flags & AI_IDN_ALLOW_UNASSIGNED)
+                 idn_flags |= IDNA_ALLOW_UNASSIGNED;
+               if (req->ai_flags & AI_IDN_USE_STD3_ASCII_RULES)
+                 idn_flags |= IDNA_USE_STD3_ASCII_RULES;
+
                char *out;
-               int rc = __idna_to_unicode_lzlz (c, &out, 0);
+               int rc = __idna_to_unicode_lzlz (c, &out, idn_flags);
                if (rc != IDNA_SUCCESS)
                  {
                    if (rc == IDNA_MALLOC_ERROR)
@@ -1306,7 +1318,8 @@ 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|AI_CANONIDN
+         |AI_IDN|AI_CANONIDN|AI_IDN_ALLOW_UNASSIGNED
+         |AI_IDN_USE_STD3_ASCII_RULES
 #endif
          |AI_ALL))
     return EAI_BADFLAGS;