+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.
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;
/* 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)
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. */
# 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
#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)
#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)
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;