mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
BZ#13696: Add --disable-nscd configure option.
This commit is contained in:
39
ChangeLog
39
ChangeLog
@ -1,3 +1,42 @@
|
|||||||
|
2012-08-22 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
|
[BZ# 13696]
|
||||||
|
* configure.in (use_nscd): New substituted variable, set by
|
||||||
|
--disable-nscd. If enabled, define USE_NSCD.
|
||||||
|
* configure: Regenerated.
|
||||||
|
* config.h.in: Add USE_NSCD.
|
||||||
|
* config.make.in (use-nscd): New substituted variable.
|
||||||
|
* inet/Makefile (CFLAGS-gethstbyad_r.c): Likewise.
|
||||||
|
(CFLAGS-gethstbynm_r.c, CFLAGS-gethstbynm2_r.c): Likewise.
|
||||||
|
(CFLAGS-getsrvbynm_r.c, CFLAGS-getsrvbypt_r.c): Variables removed.
|
||||||
|
* grp/Makefile (CFLAGS-getgrgid_r.c): Remove -DUSE_NSCD.
|
||||||
|
(CFLAGS-getgrnam_r.c): Likewise.
|
||||||
|
(CFLAGS-initgroups.c): Likewise.
|
||||||
|
* posix/Makefile (CFLAGS-getaddrinfo.c): Remove -DUSE_NSCD.
|
||||||
|
* pwd/Makefile (CFLAGS-getpwuid_r.c, CFLAGS-getpwnam_r.c):
|
||||||
|
Variables removed.
|
||||||
|
* inet/getnetgrent_r.c
|
||||||
|
(nscd_setnetgrent): New function, broken out of ...
|
||||||
|
(setnetgrent): ... here. Call it.
|
||||||
|
(innetgr): Conditionalize nscd bits on [USE_NSCD].
|
||||||
|
(nscd_getnetgrent): Conditionalize on [USE_NSCD].
|
||||||
|
(__internal_getnetgrent_r): Conditionalize its use on [USE_NSCD].
|
||||||
|
* nscd/Makefile (routines, aux): Move definitions after include of
|
||||||
|
Makeconfig. Conditionalize on [$(use-nscd) != no].
|
||||||
|
* nss/nsswitch.c (nss_load_all_libraries, __nss_disable_nscd):
|
||||||
|
Conditionalize on [USE_NSCD].
|
||||||
|
(is_nscd, nscd_init_cb): Likewise.
|
||||||
|
(nss_load_library): Conditionalize init callback on [USE_NSCD].
|
||||||
|
* nss/nss_files/files-init.c: Conditionalize body on [USE_NSCD].
|
||||||
|
* nss/nss_db/db-init.c: Likewise.
|
||||||
|
* nscd/nscd.c (main): Conditionalize __nss_disable_nscd call on
|
||||||
|
[USE_NSCD].
|
||||||
|
* sysdeps/unix/sysv/linux/check_pf.c (get_nl_timestamp): New function.
|
||||||
|
(make_request): Use it.
|
||||||
|
(cache_valid_p): New function.
|
||||||
|
(__check_pf): Use it.
|
||||||
|
* NEWS: Add item for --disable-nscd.
|
||||||
|
|
||||||
2012-08-22 Dmitry V. Levin <ldv@altlinux.org>
|
2012-08-22 Dmitry V. Levin <ldv@altlinux.org>
|
||||||
|
|
||||||
* configure.in (SED): Update AC_CHECK_PROG_VER's version extract regexp
|
* configure.in (SED): Update AC_CHECK_PROG_VER's version extract regexp
|
||||||
|
9
NEWS
9
NEWS
@ -9,9 +9,9 @@ Version 2.17
|
|||||||
|
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
6778, 6808, 9685, 11607, 13717, 13939, 14042, 14090, 14166, 14150, 14151,
|
6778, 6808, 9685, 11607, 13717, 13696, 13939, 14042, 14090, 14166, 14150,
|
||||||
14154, 14157, 14166, 14173, 14195, 14252, 14283, 14298, 14303, 14307,
|
14151, 14154, 14157, 14166, 14173, 14195, 14252, 14283, 14298, 14303,
|
||||||
14328, 14331, 14336, 14337, 14347, 14349, 14505
|
14307, 14328, 14331, 14336, 14337, 14347, 14349, 14505
|
||||||
|
|
||||||
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
|
* Support for STT_GNU_IFUNC symbols added for s390 and s390x.
|
||||||
Optimized versions of memcpy, memset, and memcmp added for System z10 and
|
Optimized versions of memcpy, memset, and memcmp added for System z10 and
|
||||||
@ -34,6 +34,9 @@ Version 2.17
|
|||||||
* Optimizations of string functions memchr, wcschr, wcscpy, and wcsrchr for
|
* Optimizations of string functions memchr, wcschr, wcscpy, and wcsrchr for
|
||||||
powerpc POWER7. Implemented by Will Schmidt.
|
powerpc POWER7. Implemented by Will Schmidt.
|
||||||
|
|
||||||
|
* New configure option --disable-nscd builds the C library such that it
|
||||||
|
never attempts to contact the Name Service Caching Daemon (nscd).
|
||||||
|
|
||||||
|
|
||||||
Version 2.16
|
Version 2.16
|
||||||
|
|
||||||
|
@ -174,6 +174,9 @@
|
|||||||
/* Define if Systemtap <sys/sdt.h> probes should be defined. */
|
/* Define if Systemtap <sys/sdt.h> probes should be defined. */
|
||||||
#undef USE_STAP_PROBE
|
#undef USE_STAP_PROBE
|
||||||
|
|
||||||
|
/* Define if library functions should try to contact the nscd daemon. */
|
||||||
|
#undef USE_NSCD
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ sysdeps-add-ons = @sysdeps_add_ons@
|
|||||||
cross-compiling = @cross_compiling@
|
cross-compiling = @cross_compiling@
|
||||||
force-install = @force_install@
|
force-install = @force_install@
|
||||||
link-obsolete-rpc = @link_obsolete_rpc@
|
link-obsolete-rpc = @link_obsolete_rpc@
|
||||||
|
use-nscd = @use_nscd@
|
||||||
|
|
||||||
# Build tools.
|
# Build tools.
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
|
20
configure
vendored
20
configure
vendored
@ -597,6 +597,7 @@ libc_cv_sysconfdir
|
|||||||
libc_cv_localedir
|
libc_cv_localedir
|
||||||
libc_cv_slibdir
|
libc_cv_slibdir
|
||||||
old_glibc_headers
|
old_glibc_headers
|
||||||
|
use_nscd
|
||||||
libc_cv_gcc_unwind_find_fde
|
libc_cv_gcc_unwind_find_fde
|
||||||
libc_extra_cflags
|
libc_extra_cflags
|
||||||
CPPUNDEFS
|
CPPUNDEFS
|
||||||
@ -750,6 +751,7 @@ enable_multi_arch
|
|||||||
enable_nss_crypt
|
enable_nss_crypt
|
||||||
enable_obsolete_rpc
|
enable_obsolete_rpc
|
||||||
enable_systemtap
|
enable_systemtap
|
||||||
|
enable_nscd
|
||||||
with_cpu
|
with_cpu
|
||||||
'
|
'
|
||||||
ac_precious_vars='build_alias
|
ac_precious_vars='build_alias
|
||||||
@ -1408,6 +1410,7 @@ Optional Features:
|
|||||||
--enable-obsolete-rpc build and install the obsolete RPC code for
|
--enable-obsolete-rpc build and install the obsolete RPC code for
|
||||||
link-time usage
|
link-time usage
|
||||||
--enable-systemtap enable systemtap static probe points [default=no]
|
--enable-systemtap enable systemtap static probe points [default=no]
|
||||||
|
--disable-nscd library functions will not contact the nscd daemon
|
||||||
|
|
||||||
Optional Packages:
|
Optional Packages:
|
||||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||||
@ -3753,6 +3756,15 @@ See \`config.log' for more details" "$LINENO" 5; }
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Note the use of $use_nscd is near the bottom of the file.
|
||||||
|
# Check whether --enable-nscd was given.
|
||||||
|
if test "${enable_nscd+set}" = set; then :
|
||||||
|
enableval=$enable_nscd; use_nscd=$enableval
|
||||||
|
else
|
||||||
|
use_nscd=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# The way shlib-versions is used to generate soversions.mk uses a
|
# The way shlib-versions is used to generate soversions.mk uses a
|
||||||
# fairly simplistic model for name recognition that can't distinguish
|
# fairly simplistic model for name recognition that can't distinguish
|
||||||
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
||||||
@ -7404,6 +7416,14 @@ if test x$libc_cv_gcc_unwind_find_fde = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
|
||||||
|
# configure fragment can override the value to prevent this AC_DEFINE.
|
||||||
|
|
||||||
|
if test "x$use_nscd" != xno; then
|
||||||
|
$as_echo "#define USE_NSCD 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# Test for old glibc 2.0.x headers so that they can be removed properly
|
# Test for old glibc 2.0.x headers so that they can be removed properly
|
||||||
# Search only in includedir.
|
# Search only in includedir.
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for old glibc 2.0.x headers" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for old glibc 2.0.x headers" >&5
|
||||||
|
14
configure.in
14
configure.in
@ -293,6 +293,13 @@ void foo (int i, void *p)
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Note the use of $use_nscd is near the bottom of the file.
|
||||||
|
AC_ARG_ENABLE([nscd],
|
||||||
|
[AS_HELP_STRING([--disable-nscd],
|
||||||
|
[library functions will not contact the nscd daemon])],
|
||||||
|
[use_nscd=$enableval],
|
||||||
|
[use_nscd=yes])
|
||||||
|
|
||||||
# The way shlib-versions is used to generate soversions.mk uses a
|
# The way shlib-versions is used to generate soversions.mk uses a
|
||||||
# fairly simplistic model for name recognition that can't distinguish
|
# fairly simplistic model for name recognition that can't distinguish
|
||||||
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
# i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
|
||||||
@ -2099,6 +2106,13 @@ if test x$libc_cv_gcc_unwind_find_fde = xyes; then
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(libc_cv_gcc_unwind_find_fde)
|
AC_SUBST(libc_cv_gcc_unwind_find_fde)
|
||||||
|
|
||||||
|
# This is far from the AC_ARG_ENABLE that sets it so that a sysdeps
|
||||||
|
# configure fragment can override the value to prevent this AC_DEFINE.
|
||||||
|
AC_SUBST(use_nscd)
|
||||||
|
if test "x$use_nscd" != xno; then
|
||||||
|
AC_DEFINE([USE_NSCD])
|
||||||
|
fi
|
||||||
|
|
||||||
# Test for old glibc 2.0.x headers so that they can be removed properly
|
# Test for old glibc 2.0.x headers so that they can be removed properly
|
||||||
# Search only in includedir.
|
# Search only in includedir.
|
||||||
AC_MSG_CHECKING(for old glibc 2.0.x headers)
|
AC_MSG_CHECKING(for old glibc 2.0.x headers)
|
||||||
|
@ -38,14 +38,14 @@ include ../Rules
|
|||||||
|
|
||||||
ifeq ($(have-thread-library),yes)
|
ifeq ($(have-thread-library),yes)
|
||||||
|
|
||||||
CFLAGS-getgrgid_r.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-getgrgid_r.c = -fexceptions
|
||||||
CFLAGS-getgrnam_r.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-getgrnam_r.c = -fexceptions
|
||||||
CFLAGS-getgrent_r.c = -fexceptions
|
CFLAGS-getgrent_r.c = -fexceptions
|
||||||
CFLAGS-getgrent.c = -fexceptions
|
CFLAGS-getgrent.c = -fexceptions
|
||||||
CFLAGS-fgetgrent.c = -fexceptions
|
CFLAGS-fgetgrent.c = -fexceptions
|
||||||
CFLAGS-fgetgrent_r.c = -fexceptions $(libio-mtsafe)
|
CFLAGS-fgetgrent_r.c = -fexceptions $(libio-mtsafe)
|
||||||
CFLAGS-putgrent.c = -fexceptions $(libio-mtsafe)
|
CFLAGS-putgrent.c = -fexceptions $(libio-mtsafe)
|
||||||
CFLAGS-initgroups.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-initgroups.c = -fexceptions
|
||||||
CFLAGS-getgrgid.c = -fexceptions
|
CFLAGS-getgrgid.c = -fexceptions
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
@ -56,11 +56,11 @@ include ../Rules
|
|||||||
|
|
||||||
ifeq ($(have-thread-library),yes)
|
ifeq ($(have-thread-library),yes)
|
||||||
|
|
||||||
CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-gethstbyad_r.c = -fexceptions
|
||||||
CFLAGS-gethstbyad.c = -fexceptions
|
CFLAGS-gethstbyad.c = -fexceptions
|
||||||
CFLAGS-gethstbynm_r.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-gethstbynm_r.c = -fexceptions
|
||||||
CFLAGS-gethstbynm.c = -fexceptions
|
CFLAGS-gethstbynm.c = -fexceptions
|
||||||
CFLAGS-gethstbynm2_r.c = -DUSE_NSCD=1 -fexceptions
|
CFLAGS-gethstbynm2_r.c = -fexceptions
|
||||||
CFLAGS-gethstbynm2.c = -fexceptions
|
CFLAGS-gethstbynm2.c = -fexceptions
|
||||||
CFLAGS-gethstent_r.c = -fexceptions
|
CFLAGS-gethstent_r.c = -fexceptions
|
||||||
CFLAGS-gethstent.c = -fexceptions
|
CFLAGS-gethstent.c = -fexceptions
|
||||||
@ -77,8 +77,6 @@ CFLAGS-getrpcent_r.c = -fexceptions
|
|||||||
CFLAGS-getrpcent.c = -fexceptions
|
CFLAGS-getrpcent.c = -fexceptions
|
||||||
CFLAGS-getservent_r.c = -fexceptions
|
CFLAGS-getservent_r.c = -fexceptions
|
||||||
CFLAGS-getservent.c = -fexceptions
|
CFLAGS-getservent.c = -fexceptions
|
||||||
CFLAGS-getsrvbynm_r.c = -DUSE_NSCD=1
|
|
||||||
CFLAGS-getsrvbypt_r.c = -DUSE_NSCD=1
|
|
||||||
CFLAGS-getprtent_r.c = -fexceptions
|
CFLAGS-getprtent_r.c = -fexceptions
|
||||||
CFLAGS-getprtent.c = -fexceptions
|
CFLAGS-getprtent.c = -fexceptions
|
||||||
CFLAGS-either_ntoh.c = -fexceptions
|
CFLAGS-either_ntoh.c = -fexceptions
|
||||||
|
@ -182,6 +182,21 @@ __internal_setnetgrent (const char *group, struct __netgrent *datap)
|
|||||||
}
|
}
|
||||||
libc_hidden_def (__internal_setnetgrent)
|
libc_hidden_def (__internal_setnetgrent)
|
||||||
|
|
||||||
|
static int
|
||||||
|
nscd_setnetgrent (const char *group)
|
||||||
|
{
|
||||||
|
#ifdef USE_NSCD
|
||||||
|
if (__nss_not_use_nscd_netgroup > 0
|
||||||
|
&& ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY)
|
||||||
|
__nss_not_use_nscd_netgroup = 0;
|
||||||
|
|
||||||
|
if (!__nss_not_use_nscd_netgroup
|
||||||
|
&& !__nss_database_custom[NSS_DBSIDX_netgroup])
|
||||||
|
return __nscd_setnetgrent (group, &dataset);
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
setnetgrent (const char *group)
|
setnetgrent (const char *group)
|
||||||
{
|
{
|
||||||
@ -189,21 +204,10 @@ setnetgrent (const char *group)
|
|||||||
|
|
||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
|
|
||||||
if (__nss_not_use_nscd_netgroup > 0
|
result = nscd_setnetgrent (group);
|
||||||
&& ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY)
|
if (result < 0)
|
||||||
__nss_not_use_nscd_netgroup = 0;
|
result = __internal_setnetgrent (group, &dataset);
|
||||||
|
|
||||||
if (!__nss_not_use_nscd_netgroup
|
|
||||||
&& !__nss_database_custom[NSS_DBSIDX_netgroup])
|
|
||||||
{
|
|
||||||
result = __nscd_setnetgrent (group, &dataset);
|
|
||||||
if (result >= 0)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = __internal_setnetgrent (group, &dataset);
|
|
||||||
|
|
||||||
out:
|
|
||||||
__libc_lock_unlock (lock);
|
__libc_lock_unlock (lock);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -230,7 +234,7 @@ endnetgrent (void)
|
|||||||
__libc_lock_unlock (lock);
|
__libc_lock_unlock (lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_NSCD
|
||||||
static enum nss_status
|
static enum nss_status
|
||||||
nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
|
nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
|
||||||
int *errnop)
|
int *errnop)
|
||||||
@ -248,7 +252,7 @@ nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
|
|||||||
|
|
||||||
return NSS_STATUS_SUCCESS;
|
return NSS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
internal_function
|
internal_function
|
||||||
@ -267,9 +271,14 @@ __internal_getnetgrent_r (char **hostp, char **userp, char **domainp,
|
|||||||
int no_more = datap->nip == NULL;
|
int no_more = datap->nip == NULL;
|
||||||
if (! no_more)
|
if (! no_more)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_NSCD
|
||||||
|
/* This bogus function pointer is a special marker left by
|
||||||
|
__nscd_setnetgrent to tell us to use the data it left
|
||||||
|
before considering any modules. */
|
||||||
if (datap->nip == (service_user *) -1l)
|
if (datap->nip == (service_user *) -1l)
|
||||||
fct = nscd_getnetgrent;
|
fct = nscd_getnetgrent;
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
fct = __nss_lookup_function (datap->nip, "getnetgrent_r");
|
fct = __nss_lookup_function (datap->nip, "getnetgrent_r");
|
||||||
no_more = fct == NULL;
|
no_more = fct == NULL;
|
||||||
@ -375,6 +384,7 @@ int
|
|||||||
innetgr (const char *netgroup, const char *host, const char *user,
|
innetgr (const char *netgroup, const char *host, const char *user,
|
||||||
const char *domain)
|
const char *domain)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_NSCD
|
||||||
if (__nss_not_use_nscd_netgroup > 0
|
if (__nss_not_use_nscd_netgroup > 0
|
||||||
&& ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY)
|
&& ++__nss_not_use_nscd_netgroup > NSS_NSCD_RETRY)
|
||||||
__nss_not_use_nscd_netgroup = 0;
|
__nss_not_use_nscd_netgroup = 0;
|
||||||
@ -386,6 +396,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
|
|||||||
if (result >= 0)
|
if (result >= 0)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
|
@ -20,11 +20,13 @@
|
|||||||
#
|
#
|
||||||
subdir := nscd
|
subdir := nscd
|
||||||
|
|
||||||
|
include ../Makeconfig
|
||||||
|
|
||||||
|
ifneq ($(use-nscd),no)
|
||||||
routines := nscd_getpw_r nscd_getgr_r nscd_gethst_r nscd_getai \
|
routines := nscd_getpw_r nscd_getgr_r nscd_gethst_r nscd_getai \
|
||||||
nscd_initgroups nscd_getserv_r nscd_netgroup
|
nscd_initgroups nscd_getserv_r nscd_netgroup
|
||||||
aux := nscd_helper
|
aux := nscd_helper
|
||||||
|
endif
|
||||||
include ../Makeconfig
|
|
||||||
|
|
||||||
# To find xmalloc.c
|
# To find xmalloc.c
|
||||||
vpath %.c ../locale/programs
|
vpath %.c ../locale/programs
|
||||||
|
@ -305,8 +305,10 @@ main (int argc, char **argv)
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_NSCD
|
||||||
/* Make sure we do not get recursive calls. */
|
/* Make sure we do not get recursive calls. */
|
||||||
__nss_disable_nscd (register_traced_file);
|
__nss_disable_nscd (register_traced_file);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Init databases. */
|
/* Init databases. */
|
||||||
nscd_init ();
|
nscd_init ();
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
License along with the GNU C Library; if not, see
|
License along with the GNU C Library; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifdef USE_NSCD
|
||||||
|
|
||||||
#include <paths.h>
|
#include <paths.h>
|
||||||
#include <nscd/nscd.h>
|
#include <nscd/nscd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -51,3 +53,5 @@ _nss_db_init (void (*cb) (size_t, struct traced_file *))
|
|||||||
strcpy (serv_traced_file.file.fname, _PATH_VARDB "services.db");
|
strcpy (serv_traced_file.file.fname, _PATH_VARDB "services.db");
|
||||||
cb (servdb, &serv_traced_file.file);
|
cb (servdb, &serv_traced_file.file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Initialization in nss_files module.
|
/* Initialization in nss_files module.
|
||||||
Copyright (C) 2011 Free Software Foundation, Inc.
|
Copyright (C) 2011-2012 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -16,6 +16,8 @@
|
|||||||
License along with the GNU C Library; if not, see
|
License along with the GNU C Library; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifdef USE_NSCD
|
||||||
|
|
||||||
#include <nscd/nscd.h>
|
#include <nscd/nscd.h>
|
||||||
|
|
||||||
|
|
||||||
@ -55,3 +57,5 @@ _nss_files_init (void (*cb) (size_t, struct traced_file *))
|
|||||||
|
|
||||||
cb (netgrdb, &netgr_traced_file.file);
|
cb (netgrdb, &netgr_traced_file.file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -92,10 +92,12 @@ static name_database *service_table;
|
|||||||
static name_database_entry *defconfig_entries;
|
static name_database_entry *defconfig_entries;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef USE_NSCD
|
||||||
/* Nonzero if this is the nscd process. */
|
/* Nonzero if this is the nscd process. */
|
||||||
static bool is_nscd;
|
static bool is_nscd;
|
||||||
/* The callback passed to the init functions when nscd is used. */
|
/* The callback passed to the init functions when nscd is used. */
|
||||||
static void (*nscd_init_cb) (size_t, struct traced_file *);
|
static void (*nscd_init_cb) (size_t, struct traced_file *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* -1 == database not found
|
/* -1 == database not found
|
||||||
@ -358,6 +360,7 @@ nss_load_library (service_user *ni)
|
|||||||
ni->library->lib_handle = (void *) -1l;
|
ni->library->lib_handle = (void *) -1l;
|
||||||
__set_errno (saved_errno);
|
__set_errno (saved_errno);
|
||||||
}
|
}
|
||||||
|
# ifdef USE_NSCD
|
||||||
else if (is_nscd)
|
else if (is_nscd)
|
||||||
{
|
{
|
||||||
/* Call the init function when nscd is used. */
|
/* Call the init function when nscd is used. */
|
||||||
@ -377,12 +380,13 @@ nss_load_library (service_user *ni)
|
|||||||
if (ifct != NULL)
|
if (ifct != NULL)
|
||||||
{
|
{
|
||||||
void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
|
void (*cb) (size_t, struct traced_file *) = nscd_init_cb;
|
||||||
# ifdef PTR_DEMANGLE
|
# ifdef PTR_DEMANGLE
|
||||||
PTR_DEMANGLE (cb);
|
PTR_DEMANGLE (cb);
|
||||||
# endif
|
# endif
|
||||||
ifct (cb);
|
ifct (cb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -808,7 +812,7 @@ nss_new_service (name_database *database, const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef SHARED
|
#if defined SHARED && defined USE_NSCD
|
||||||
/* Load all libraries for the service. */
|
/* Load all libraries for the service. */
|
||||||
static void
|
static void
|
||||||
nss_load_all_libraries (const char *service, const char *def)
|
nss_load_all_libraries (const char *service, const char *def)
|
||||||
|
@ -134,7 +134,7 @@ $(objpfx)config-name.h: $(..)scripts/config-uname.sh $(common-objpfx)config.make
|
|||||||
mv -f $@.new $@
|
mv -f $@.new $@
|
||||||
|
|
||||||
CFLAGS-regex.c = -Wno-strict-prototypes
|
CFLAGS-regex.c = -Wno-strict-prototypes
|
||||||
CFLAGS-getaddrinfo.c = -DRESOLVER -fexceptions -DUSE_NSCD
|
CFLAGS-getaddrinfo.c = -DRESOLVER -fexceptions
|
||||||
CFLAGS-pread.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-pread.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-pread64.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-pread64.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
CFLAGS-pwrite.c = -fexceptions -fasynchronous-unwind-tables
|
CFLAGS-pwrite.c = -fexceptions -fasynchronous-unwind-tables
|
||||||
|
@ -31,8 +31,6 @@ include ../Rules
|
|||||||
|
|
||||||
ifeq ($(have-thread-library),yes)
|
ifeq ($(have-thread-library),yes)
|
||||||
|
|
||||||
CFLAGS-getpwuid_r.c = -DUSE_NSCD=1
|
|
||||||
CFLAGS-getpwnam_r.c = -DUSE_NSCD=1
|
|
||||||
CFLAGS-getpwent_r.c = -fexceptions
|
CFLAGS-getpwent_r.c = -fexceptions
|
||||||
CFLAGS-getpwent.c = -fexceptions
|
CFLAGS-getpwent.c = -fexceptions
|
||||||
CFLAGS-getpw.c = -fexceptions
|
CFLAGS-getpw.c = -fexceptions
|
||||||
|
@ -78,6 +78,29 @@ __bump_nl_timestamp (void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
get_nl_timestamp (void)
|
||||||
|
{
|
||||||
|
#ifdef IS_IN_nscd
|
||||||
|
return nl_timestamp;
|
||||||
|
#elif defined USE_NSCD
|
||||||
|
return __nscd_get_nl_timestamp ();
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
cache_valid_p (void)
|
||||||
|
{
|
||||||
|
if (cache != NULL)
|
||||||
|
{
|
||||||
|
uint32_t timestamp = get_nl_timestamp ();
|
||||||
|
return timestamp != 0 && cache->timestamp == timestamp;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static struct cached_data *
|
static struct cached_data *
|
||||||
make_request (int fd, pid_t pid)
|
make_request (int fd, pid_t pid)
|
||||||
@ -253,11 +276,7 @@ make_request (int fd, pid_t pid)
|
|||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
|
|
||||||
#ifdef IS_IN_nscd
|
result->timestamp = get_nl_timestamp ();
|
||||||
result->timestamp = nl_timestamp;
|
|
||||||
#else
|
|
||||||
result->timestamp = __nscd_get_nl_timestamp ();
|
|
||||||
#endif
|
|
||||||
result->usecnt = 2;
|
result->usecnt = 2;
|
||||||
result->seen_ipv4 = seen_ipv4;
|
result->seen_ipv4 = seen_ipv4;
|
||||||
result->seen_ipv6 = true;
|
result->seen_ipv6 = true;
|
||||||
@ -302,14 +321,7 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
|
|||||||
|
|
||||||
__libc_lock_lock (lock);
|
__libc_lock_lock (lock);
|
||||||
|
|
||||||
#ifdef IS_IN_nscd
|
if (cache_valid_p ())
|
||||||
# define cache_valid() nl_timestamp != 0 && cache->timestamp == nl_timestamp
|
|
||||||
#else
|
|
||||||
# define cache_valid() \
|
|
||||||
({ uint32_t val = __nscd_get_nl_timestamp (); \
|
|
||||||
val != 0 && cache->timestamp == val; })
|
|
||||||
#endif
|
|
||||||
if (cache != NULL && cache_valid ())
|
|
||||||
{
|
{
|
||||||
data = cache;
|
data = cache;
|
||||||
atomic_increment (&cache->usecnt);
|
atomic_increment (&cache->usecnt);
|
||||||
|
Reference in New Issue
Block a user