* nis/Makefile (libnsl-routimes): Add nss-default.

* nis/Versions (libnsl) [GLIBC_PRIVATE]: Export _nsl_default_nss.
	* nis/nss-nis.c: Move /etc/default/nss handling to...
	* nis/nss-default.c: ...here.  New file.
	* nis/libnsl.h: New file.
	* nis/nss-nis.h: Remove NSS_FLAG_* definitions and _nis_default_nss
	plus auxilary definitions.
	* nis/nss_nis/nis-initgroups.c: Use _nsl_default_nss instead of
	_nis_default_nss.
	* nis/nss_nis/nis-service.c: Likewise.

2006-04-07  Steven Munroe  <sjmunroe@us.ibm.com>

	* sysdeps/powerpc/fpu/bits/mathinline.h
	[__WORDSIZE == 64 || _ARCH_PWR4]: Define __CPU_HAS_FSQRT.
	(__ieee754_sqrt): Fix comment.
	(__ieee754_sqrtf): Fix comment.
	* sysdeps/powerpc/fpu/e_sqrt.c (__ieee754_sqrt): Fix comment.
	Check __CPU_HAS_FSQRT instead of dl_hwcap.
	* sysdeps/powerpc/fpu/e_sqrtf.c (__ieee754_sqrtf): Likewise.
This commit is contained in:
Ulrich Drepper 2006-04-14 05:51:51 +00:00
parent 70e228a7b7
commit 433f49c402
12 changed files with 182 additions and 110 deletions

View File

@ -1,3 +1,26 @@
2006-04-13 Ulrich Drepper <drepper@redhat.com>
* nis/Makefile (libnsl-routimes): Add nss-default.
* nis/Versions (libnsl) [GLIBC_PRIVATE]: Export _nsl_default_nss.
* nis/nss-nis.c: Move /etc/default/nss handling to...
* nis/nss-default.c: ...here. New file.
* nis/libnsl.h: New file.
* nis/nss-nis.h: Remove NSS_FLAG_* definitions and _nis_default_nss
plus auxilary definitions.
* nis/nss_nis/nis-initgroups.c: Use _nsl_default_nss instead of
_nis_default_nss.
* nis/nss_nis/nis-service.c: Likewise.
2006-04-07 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/powerpc/fpu/bits/mathinline.h
[__WORDSIZE == 64 || _ARCH_PWR4]: Define __CPU_HAS_FSQRT.
(__ieee754_sqrt): Fix comment.
(__ieee754_sqrtf): Fix comment.
* sysdeps/powerpc/fpu/e_sqrt.c (__ieee754_sqrt): Fix comment.
Check __CPU_HAS_FSQRT instead of dl_hwcap.
* sysdeps/powerpc/fpu/e_sqrtf.c (__ieee754_sqrtf): Likewise.
2006-04-08 Ulrich Drepper <drepper@redhat.com>
* inet/inet_ntoa.c: Rewrite to use TLS instead of TSD.

View File

@ -1,4 +1,4 @@
# Copyright (C) 1996, 1997, 1998, 2001, 2004 Free Software Foundation, Inc.
# Copyright (C) 1996,1997,1998,2001,2004,2006 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@ -54,7 +54,7 @@ libnsl-routines = yp_xdr ypclnt ypupdate_xdr \
nis_print_group_entry nis_domain_of nis_domain_of_r\
nis_modify nis_remove nis_add nis_defaults\
nis_findserv nis_callback nis_clone_dir nis_clone_obj\
nis_clone_res
nis_clone_res nss-default
libnss_compat-routines := $(addprefix compat-,grp pwd spwd initgroups)
libnss_compat-inhibit-o = $(filter-out .os,$(object-suffixes))

View File

@ -57,6 +57,9 @@ libnsl {
GLIBC_2.2 {
xdr_ypall;
}
GLIBC_PRIVATE {
_nsl_default_nss;
}
}
libnss_compat {

24
nis/libnsl.h Normal file
View File

@ -0,0 +1,24 @@
/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#define NSS_FLAG_NETID_AUTHORITATIVE 1
#define NSS_FLAG_SERVICES_AUTHORITATIVE 2
/* Get current set of default flags. */
extern int _nsl_default_nss (void);

117
nis/nss-default.c Normal file
View File

@ -0,0 +1,117 @@
/* Copyright (C) 1996, 2001, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <ctype.h>
#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
#include <string.h>
#include <bits/libc-lock.h>
#include <libnsl.h>
/* Path of the file. */
static const char default_nss[] = "/etc/default/nss";
/* Flags once read from the file. */
static int default_nss_flags;
/* Code to make sure we call 'init' once. */
__libc_once_define (static, once);
static void
init (void)
{
FILE *fp = fopen (default_nss, "rc");
if (fp != NULL)
{
char *line = NULL;
size_t linelen = 0;
__fsetlocking (fp, FSETLOCKING_BYCALLER);
while (!feof_unlocked (fp))
{
ssize_t n = getline (&line, &linelen, fp);
if (n <= 0)
break;
/* There currently are only two variables we expect, so
simplify the parsing. Recognize only
NETID_AUTHORITATIVE = TRUE
SERVICES_AUTHORITATIVE = TRUE
with arbitrary white spaces. */
char *cp = line;
while (isspace (*cp))
++cp;
/* Recognize comment lines. */
if (*cp == '#')
continue;
static const char netid_authoritative[] = "NETID_AUTHORITATIVE";
static const char services_authoritative[]
= "SERVICES_AUTHORITATIVE";
size_t flag_len;
if (strncmp (cp, netid_authoritative,
flag_len = sizeof (netid_authoritative) - 1) != 0
&& strncmp (cp, services_authoritative,
flag_len = sizeof (services_authoritative) - 1)
!= 0)
continue;
cp += flag_len;
while (isspace (*cp))
++cp;
if (*cp++ != '=')
continue;
while (isspace (*cp))
++cp;
if (strncmp (cp, "TRUE", 4) != 0)
continue;
cp += 4;
while (isspace (*cp))
++cp;
if (*cp == '\0')
default_nss_flags |= (flag_len == sizeof (netid_authoritative) - 1
? NSS_FLAG_NETID_AUTHORITATIVE
: NSS_FLAG_SERVICES_AUTHORITATIVE);
}
free (line);
fclose (fp);
}
}
int
_nsl_default_nss (void)
{
/* If we have not yet read the file yet do it now. */
__libc_once (once, init);
return default_nss_flags;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996, 2001, 2004 Free Software Foundation, Inc.
/* Copyright (C) 1996, 2001, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -16,13 +16,6 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#include <ctype.h>
#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
#include <string.h>
#include <rpcsvc/ypclnt.h>
#include "nss-nis.h"
#include "nsswitch.h"
@ -50,81 +43,3 @@ const enum nss_status __yperr2nss_tab[] =
};
const unsigned int __yperr2nss_count = (sizeof (__yperr2nss_tab)
/ sizeof (__yperr2nss_tab[0]));
int _nis_default_nss_flags;
static const char default_nss[] = "/etc/default/nss";
int
_nis_check_default_nss (void)
{
FILE *fp = fopen (default_nss, "rc");
int flags = NSS_FLAG_SET;
if (fp != NULL)
{
char *line = NULL;
size_t linelen = 0;
__fsetlocking (fp, FSETLOCKING_BYCALLER);
while (!feof_unlocked (fp))
{
ssize_t n = getline (&line, &linelen, fp);
if (n <= 0)
break;
/* There currently are only two variables we expect, so
simplify the parsing. Recognize only
NETID_AUTHORITATIVE = TRUE
SERVICES_AUTHORITATIVE = TRUE
with arbitrary white spaces. */
char *cp = line;
while (isspace (*cp))
++cp;
/* Recognize comment lines. */
if (*cp == '#')
continue;
static const char netid_authoritative[] = "NETID_AUTHORITATIVE";
static const char services_authoritative[]
= "SERVICES_AUTHORITATIVE";
size_t flag_len;
if (strncmp (cp, netid_authoritative,
flag_len = sizeof (netid_authoritative) - 1) != 0
&& strncmp (cp, services_authoritative,
flag_len = sizeof (services_authoritative) - 1)
!= 0)
continue;
cp += flag_len;
while (isspace (*cp))
++cp;
if (*cp++ != '=')
continue;
while (isspace (*cp))
++cp;
if (strncmp (cp, "TRUE", 4) != 0)
continue;
cp += 4;
while (isspace (*cp))
++cp;
if (*cp == '\0')
flags |= flag_len == sizeof (netid_authoritative) - 1
? NSS_FLAG_NETID_AUTHORITATIVE
: NSS_FLAG_SERVICES_AUTHORITATIVE;
}
free (line);
fclose (fp);
}
_nis_default_nss_flags = flags;
return flags;
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1996, 2004 Free Software Foundation, Inc.
/* Copyright (C) 1996, 2004, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -36,16 +36,4 @@ yperr2nss (int errval)
return __yperr2nss_tab[(unsigned int) errval];
}
#define NSS_FLAG_SET 1
#define NSS_FLAG_NETID_AUTHORITATIVE 2
#define NSS_FLAG_SERVICES_AUTHORITATIVE 4
extern int _nis_default_nss_flags attribute_hidden;
extern int _nis_check_default_nss (void) attribute_hidden;
extern inline __attribute__((always_inline)) int
_nis_default_nss (void)
{
return _nis_default_nss_flags ?: _nis_check_default_nss ();
}
#endif /* nis/nss-nis.h */

View File

@ -30,6 +30,7 @@
#include <sys/param.h>
#include "nss-nis.h"
#include <libnsl.h>
/* Get the declaration of the parser function. */
#define ENTNAME grent
@ -243,7 +244,7 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
return NSS_STATUS_UNAVAIL;
/* Check whether we are supposed to use the netid.byname map. */
if (_nis_default_nss () & NSS_FLAG_NETID_AUTHORITATIVE)
if (_nsl_default_nss () & NSS_FLAG_NETID_AUTHORITATIVE)
{
/* We need the user ID. */
uid_t uid;

View File

@ -27,6 +27,7 @@
#include <rpcsvc/ypclnt.h>
#include "nss-nis.h"
#include <libnsl.h>
/* Get the declaration of the parser function. */
@ -324,7 +325,7 @@ _nss_nis_getservbyname_r (const char *name, const char *protocol,
}
/* Check if it is safe to rely on services.byservicename. */
if (_nis_default_nss () & NSS_FLAG_SERVICES_AUTHORITATIVE)
if (_nsl_default_nss () & NSS_FLAG_SERVICES_AUTHORITATIVE)
return status;
struct ypall_callback ypcb;

View File

@ -129,7 +129,7 @@ __NTH (fdimf (float __x, float __y))
#include <ldsodefs.h>
#include <dl-procinfo.h>
# if __WORDSIZE == 64
# if __WORDSIZE == 64 || defined _ARCH_PWR4
# define __CPU_HAS_FSQRT 1
# else
# define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
@ -141,7 +141,7 @@ __NTH (__ieee754_sqrt (double __x))
{
double __z;
/* If the CPU is 64-bit we can use the optional FP instructions we. */
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the
@ -163,7 +163,7 @@ __NTH (__ieee754_sqrtf (float __x))
{
float __z;
/* If the CPU is 64-bit we can use the optional FP instructions we. */
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the

View File

@ -169,8 +169,8 @@ __ieee754_sqrt (x)
{
double z;
/* If the CPU is 64-bit we can use the optional FP instructions we. */
if ((GLRO (dl_hwcap) & PPC_FEATURE_64) != 0)
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the
fsqrt instruction above the branch. */

View File

@ -146,8 +146,8 @@ __ieee754_sqrtf (x)
{
double z;
/* If the CPU is 64-bit we can use the optional FP instructions we. */
if ((GLRO (dl_hwcap) & PPC_FEATURE_64) != 0)
/* If the CPU is 64-bit we can use the optional FP instructions. */
if (__CPU_HAS_FSQRT)
{
/* Volatile is required to prevent the compiler from moving the
fsqrt instruction above the branch. */