mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
[BZ #2389]
* resolv/res_hconf.c: Remove 'order' parsing. Just ignore the line. * resolv/res_hconf.h: Remove Name_Service definition. (struct hconf): Replace service related fields with placeholders. * version.h (VERSION): Bump to 2.4.90 for the trunk.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995-2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993, 1995-2005, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger (davidm@azstarnet.com).
|
||||
|
||||
@@ -53,15 +53,12 @@
|
||||
|
||||
/* Environment vars that all user to override default behavior: */
|
||||
#define ENV_HOSTCONF "RESOLV_HOST_CONF"
|
||||
#define ENV_SERVORDER "RESOLV_SERV_ORDER"
|
||||
#define ENV_SPOOF "RESOLV_SPOOF_CHECK"
|
||||
#define ENV_TRIM_OVERR "RESOLV_OVERRIDE_TRIM_DOMAINS"
|
||||
#define ENV_TRIM_ADD "RESOLV_ADD_TRIM_DOMAINS"
|
||||
#define ENV_MULTI "RESOLV_MULTI"
|
||||
#define ENV_REORDER "RESOLV_REORDER"
|
||||
|
||||
static const char *arg_service_list (const char *, int, const char *,
|
||||
unsigned int);
|
||||
static const char *arg_trimdomain_list (const char *, int, const char *,
|
||||
unsigned int);
|
||||
static const char *arg_spoof (const char *, int, const char *, unsigned int);
|
||||
@@ -75,7 +72,7 @@ static const struct cmd
|
||||
unsigned int arg;
|
||||
} cmd[] =
|
||||
{
|
||||
{"order", arg_service_list, 0},
|
||||
{"order", NULL, 0},
|
||||
{"trim", arg_trimdomain_list, 0},
|
||||
{"spoof", arg_spoof, 0},
|
||||
{"multi", arg_bool, HCONF_FLAG_MULTI},
|
||||
@@ -106,101 +103,6 @@ skip_string (const char *str)
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
arg_service_list (const char *fname, int line_num, const char *args,
|
||||
unsigned int arg)
|
||||
{
|
||||
enum Name_Service service;
|
||||
const char *start;
|
||||
size_t len;
|
||||
size_t i;
|
||||
static const struct
|
||||
{
|
||||
const char name[6];
|
||||
int16_t service;
|
||||
} svcs[] =
|
||||
{
|
||||
{"bind", SERVICE_BIND},
|
||||
{"hosts", SERVICE_HOSTS},
|
||||
{"nis", SERVICE_NIS},
|
||||
};
|
||||
|
||||
do
|
||||
{
|
||||
start = args;
|
||||
args = skip_string (args);
|
||||
len = args - start;
|
||||
|
||||
service = SERVICE_NONE;
|
||||
for (i = 0; i < sizeof (svcs) / sizeof (svcs[0]); ++i)
|
||||
{
|
||||
if (__strncasecmp (start, svcs[i].name, len) == 0
|
||||
&& len == strlen (svcs[i].name))
|
||||
{
|
||||
service = svcs[i].service;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (service == SERVICE_NONE)
|
||||
{
|
||||
char *buf;
|
||||
|
||||
if (__asprintf (&buf,
|
||||
_("%s: line %d: expected service, found `%s'\n"),
|
||||
fname, line_num, start) < 0)
|
||||
return 0;
|
||||
|
||||
__fxprintf (NULL, "%s", buf);
|
||||
|
||||
free (buf);
|
||||
return 0;
|
||||
}
|
||||
if (_res_hconf.num_services >= SERVICE_MAX)
|
||||
{
|
||||
char *buf;
|
||||
|
||||
if (__asprintf (&buf, _("\
|
||||
%s: line %d: cannot specify more than %d services"),
|
||||
fname, line_num, SERVICE_MAX) < 0)
|
||||
return 0;
|
||||
|
||||
__fxprintf (NULL, "%s", buf);
|
||||
|
||||
free (buf);
|
||||
return 0;
|
||||
}
|
||||
_res_hconf.service[_res_hconf.num_services++] = service;
|
||||
|
||||
args = skip_ws (args);
|
||||
switch (*args)
|
||||
{
|
||||
case ',':
|
||||
case ';':
|
||||
case ':':
|
||||
args = skip_ws (++args);
|
||||
if (!*args || *args == '#')
|
||||
{
|
||||
char *buf;
|
||||
|
||||
if (__asprintf (&buf, _("\
|
||||
%s: line %d: list delimiter not followed by keyword"),
|
||||
fname, line_num) < 0)
|
||||
return 0;
|
||||
|
||||
__fxprintf (NULL, "%s", buf);
|
||||
|
||||
free (buf);
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (*args && *args != '#');
|
||||
return args;
|
||||
}
|
||||
|
||||
|
||||
static const char *
|
||||
arg_trimdomain_list (const char *fname, int line_num, const char *args,
|
||||
unsigned int flag)
|
||||
@@ -351,6 +253,11 @@ parse_line (const char *fname, int line_num, const char *str)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Ignore lines for which no parser is set. This is used for
|
||||
obsolete commands. */
|
||||
if (c->parse_args == NULL)
|
||||
return;
|
||||
|
||||
/* process args: */
|
||||
str = skip_ws (str);
|
||||
str = (*c->parse_args) (fname, line_num, str, c->arg);
|
||||
@@ -396,10 +303,7 @@ do_init (void)
|
||||
hconf_name = _PATH_HOSTCONF;
|
||||
|
||||
fp = fopen (hconf_name, "rc");
|
||||
if (!fp)
|
||||
/* make up something reasonable: */
|
||||
_res_hconf.service[_res_hconf.num_services++] = SERVICE_BIND;
|
||||
else
|
||||
if (fp)
|
||||
{
|
||||
/* No threads using this stream. */
|
||||
__fsetlocking (fp, FSETLOCKING_BYCALLER);
|
||||
@@ -413,13 +317,6 @@ do_init (void)
|
||||
fclose (fp);
|
||||
}
|
||||
|
||||
envval = getenv (ENV_SERVORDER);
|
||||
if (envval)
|
||||
{
|
||||
_res_hconf.num_services = 0;
|
||||
arg_service_list (ENV_SERVORDER, 1, envval, 0);
|
||||
}
|
||||
|
||||
envval = getenv (ENV_SPOOF);
|
||||
if (envval)
|
||||
arg_spoof (ENV_SPOOF, 1, envval, 0);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993, 1995-1998, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger (davidm@azstarnet.com).
|
||||
|
||||
@@ -24,18 +24,11 @@
|
||||
|
||||
#define TRIMDOMAINS_MAX 4
|
||||
|
||||
enum Name_Service
|
||||
{
|
||||
SERVICE_NONE = 0,
|
||||
SERVICE_BIND, SERVICE_HOSTS, SERVICE_NIS,
|
||||
SERVICE_MAX
|
||||
};
|
||||
|
||||
struct hconf
|
||||
{
|
||||
int initialized;
|
||||
int num_services;
|
||||
enum Name_Service service[SERVICE_MAX];
|
||||
int unused1;
|
||||
int unused2[4];
|
||||
int num_trimdomains;
|
||||
const char *trimdomain[TRIMDOMAINS_MAX];
|
||||
unsigned int flags;
|
||||
|
Reference in New Issue
Block a user