Enable IDN support in getent.

This commit is contained in:
Ulrich Drepper 2010-05-06 22:23:13 -07:00
parent 9b1edf50c4
commit a160f8d808
2 changed files with 16 additions and 1 deletions

View File

@ -1,5 +1,10 @@
2010-05-06 Ulrich Drepper <drepper@redhat.com> 2010-05-06 Ulrich Drepper <drepper@redhat.com>
* nss/getent.c (idn_flags): Default to AI_IDN|AI_CANONIDN.
(args_options): Add no-idn option.
(ahosts_keys_int): Add idn_flags to ai_flags.
(parse_option): Handle 'i' option to clear idn_flags.
* malloc/malloc.c (_int_free): Possible race in the most recently * malloc/malloc.c (_int_free): Possible race in the most recently
added check. Only act on the data if no current modification added check. Only act on the data if no current modification
happened. happened.

View File

@ -31,6 +31,7 @@
#include <netdb.h> #include <netdb.h>
#include <pwd.h> #include <pwd.h>
#include <shadow.h> #include <shadow.h>
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -56,6 +57,7 @@ static const char args_doc[] = N_("database [key ...]");
static const struct argp_option args_options[] = static const struct argp_option args_options[] =
{ {
{ "service", 's', "CONFIG", 0, N_("Service configuration to be used") }, { "service", 's', "CONFIG", 0, N_("Service configuration to be used") },
{ "no-idn", 'i', NULL, 0, N_("disable IDN encoding") },
{ NULL, 0, NULL, 0, NULL }, { NULL, 0, NULL, 0, NULL },
}; };
@ -74,6 +76,9 @@ static struct argp argp =
args_options, parse_option, args_doc, doc, NULL, more_help args_options, parse_option, args_doc, doc, NULL, more_help
}; };
/* Additional getaddrinfo flags for IDN encoding. */
static int idn_flags = AI_IDN | AI_CANONIDN;
/* Print the version information. */ /* Print the version information. */
static void static void
print_version (FILE *stream, struct argp_state *state) print_version (FILE *stream, struct argp_state *state)
@ -377,7 +382,8 @@ ahosts_keys_int (int af, int xflags, int number, char *key[])
struct addrinfo hint; struct addrinfo hint;
memset (&hint, '\0', sizeof (hint)); memset (&hint, '\0', sizeof (hint));
hint.ai_flags = AI_V4MAPPED | AI_ADDRCONFIG | AI_CANONNAME | xflags; hint.ai_flags = (AI_V4MAPPED | AI_ADDRCONFIG | AI_CANONNAME
| idn_flags | xflags);
hint.ai_family = af; hint.ai_family = af;
for (i = 0; i < number; ++i) for (i = 0; i < number; ++i)
@ -861,6 +867,10 @@ parse_option (int key, char *arg, struct argp_state *state)
} }
break; break;
case 'i':
idn_flags = 0;
break;
default: default:
return ARGP_ERR_UNKNOWN; return ARGP_ERR_UNKNOWN;
} }