Skip to content

Commit

Permalink
Update.
Browse files Browse the repository at this point in the history
2004-09-16  Ulrich Drepper  <drepper@redhat.com>

	* configure.in: Add test for required SELinux features.
	* config.make.in: Add have-selinux entry.
	* config.h.in: Add HAVE_SELINUX entry.
	* nscd/Makefile (nscd-modules): Add selinux.
	(CFLAGS-selinux.c): Add -fpie.
	Define selinux-LIBS and use in link line.
	* nscd/connections.c (handle_request): Check access SELinux permissions
	before processing request.
	* nscd/nscd.c (main): Initialize selinux_enabled and stop avc thread.
	* nscd/nscd_stat.c: Transmit and print AVC statistics.
	* nscd/selinux.c: New file.
	* nscd/selinux.h: New file.

2004-09-16  Jakub Jelinek  <jakub@redhat.com>

	* nscd/nscd_helper.c (__nscd_unmap, get_mapping): Use __munmap
	instead of munmap.

	* nscd/Makefile (CFLAGS-aicache.c): Set to -fpie.

2004-09-16  Thorsten Kukuk  <kukuk@suse.de>

	* sysdeps/posix/getaddrinfo.c (gaih_inet): Check
	__nss_not_use_nscd_hosts variable if nscd should be used or not.

2004-09-16  Ulrich Drepper  <drepper@redhat.com>

	* nscd/nscd_proto.h: Define NSS_NSCD_RETRY.
	Add __nscd_getai prototype.
	* nss/getXXbyYY_r.c: Remode definition of NSS_NSCD_RETRY.
	* nscd/nscd-client.h: Remove __nscd_getai prototype.
	* nscd/nscd_getai.c: Include nscd_proto.h.

	* elf/ldd.bash.in: Add support for SELinux environments.
	Patch by Stephen Smalley <sds@epoch.ncsc.mil>.
  • Loading branch information
Ulrich Drepper committed Sep 17, 2004
1 parent 2fff3d9 commit 74a30a5
Show file tree
Hide file tree
Showing 11 changed files with 577 additions and 2 deletions.
38 changes: 38 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
2004-09-16 Ulrich Drepper <drepper@redhat.com>

* configure.in: Add test for required SELinux features.
* config.make.in: Add have-selinux entry.
* config.h.in: Add HAVE_SELINUX entry.
* nscd/Makefile (nscd-modules): Add selinux.
(CFLAGS-selinux.c): Add -fpie.
Define selinux-LIBS and use in link line.
* nscd/connections.c (handle_request): Check access SELinux permissions
before processing request.
* nscd/nscd.c (main): Initialize selinux_enabled and stop avc thread.
* nscd/nscd_stat.c: Transmit and print AVC statistics.
* nscd/selinux.c: New file.
* nscd/selinux.h: New file.

2004-09-16 Jakub Jelinek <jakub@redhat.com>

* nscd/nscd_helper.c (__nscd_unmap, get_mapping): Use __munmap
instead of munmap.

* nscd/Makefile (CFLAGS-aicache.c): Set to -fpie.

2004-09-16 Thorsten Kukuk <kukuk@suse.de>

* sysdeps/posix/getaddrinfo.c (gaih_inet): Check
__nss_not_use_nscd_hosts variable if nscd should be used or not.

2004-09-16 Ulrich Drepper <drepper@redhat.com>

* nscd/nscd_proto.h: Define NSS_NSCD_RETRY.
Add __nscd_getai prototype.
* nss/getXXbyYY_r.c: Remode definition of NSS_NSCD_RETRY.
* nscd/nscd-client.h: Remove __nscd_getai prototype.
* nscd/nscd_getai.c: Include nscd_proto.h.

* elf/ldd.bash.in: Add support for SELinux environments.
Patch by Stephen Smalley <sds@epoch.ncsc.mil>.

2004-09-16 Roland McGrath <roland@redhat.com>

* configure.in (--with-headers): Let argument contain a : separated
Expand Down
3 changes: 3 additions & 0 deletions config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
--with-elf. */
#undef HAVE_ELF

/* Define if building with SELinux support. Set by --with-selinux. */
#undef HAVE_SELINUX

/* Define if using XCOFF. Set by --with-xcoff. */
#undef HAVE_XCOFF

Expand Down
1 change: 1 addition & 0 deletions config.make.in
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ have-cpp-asm-debuginfo = @libc_cv_cpp_asm_debuginfo@
enable-check-abi = @enable_check_abi@
have-forced-unwind = @libc_cv_forced_unwind@
have-fpie = @libc_cv_fpie@
have-selinux = @have_selinux@
have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
fno-unit-at-a-time = @fno_unit_at_a_time@
bind-now = @bindnow@
Expand Down
167 changes: 166 additions & 1 deletion configure
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"

ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_have_initfini libc_cv_cpp_asm_debuginfo no_whole_archive exceptions LIBGD EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES linux_doors mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_have_initfini libc_cv_cpp_asm_debuginfo no_whole_archive exceptions LIBGD have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES linux_doors mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
ac_subst_files=''

# Initialize some variables set by options.
Expand Down Expand Up @@ -895,6 +895,7 @@ Optional Packages:
--with-fp if using floating-point hardware [default=yes]
--with-binutils=PATH specify location of binutils (as and ld)
--with-elf if using the ELF object format
--with-selinux if building with SELinux support
--with-xcoff if using the XCOFF object format
--without-cvs if CVS should not be used
--with-headers=PATH location of system headers to use (for example
Expand Down Expand Up @@ -1485,6 +1486,14 @@ else
elf=no
fi;
# Check whether --with-selinux or --without-selinux was given.
if test "${with_selinux+set}" = set; then
withval="$with_selinux"
with_selinux=$withval
else
with_selinux=auto
fi;
# Check whether --with-xcoff or --without-xcoff was given.
if test "${with_xcoff+set}" = set; then
withval="$with_xcoff"
Expand Down Expand Up @@ -6694,6 +6703,161 @@ echo "$as_me:$LINENO: result: $LIBGD" >&5
echo "${ECHO_T}$LIBGD" >&6
# SELinux detection
if test x$with_selinux = xno ; then
have_selinux=no;
else
# See if we have the SELinux library
echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5
echo $ECHO_N "checking for is_selinux_enabled in -lselinux... $ECHO_C" >&6
if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lselinux $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
#endif
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char is_selinux_enabled ();
int
main ()
{
is_selinux_enabled ();
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_lib_selinux_is_selinux_enabled=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_cv_lib_selinux_is_selinux_enabled=no
fi
rm -f conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
echo "${ECHO_T}$ac_cv_lib_selinux_is_selinux_enabled" >&6
if test $ac_cv_lib_selinux_is_selinux_enabled = yes; then
have_selinux=yes
else
have_selinux=no
fi
# See if we have the SELinux header with the NSCD permissions in it.
if test x$have_selinux = xyes ; then
echo "$as_me:$LINENO: checking for NSCD Flask permissions in selinux/av_permissions.h" >&5
echo $ECHO_N "checking for NSCD Flask permissions in selinux/av_permissions.h... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <selinux/av_permissions.h>
int
main ()
{
#ifdef NSCD__SHMEMHOST
return 0;
#else
#error NSCD__SHMEMHOST not defined
#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"
|| test ! -s conftest.err'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; } &&
{ ac_try='test -s conftest.$ac_objext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
have_selinux=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
have_selinux=no
fi
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
echo "$as_me:$LINENO: result: $have_selinux" >&5
echo "${ECHO_T}$have_selinux" >&6
fi
if test x$with_selinux = xauto ; then
if test x$have_selinux = xno ; then
{ echo "$as_me:$LINENO: WARNING: Sufficiently new SELinux library not found" >&5
echo "$as_me: WARNING: Sufficiently new SELinux library not found" >&2;}
fi
else
if test x$have_selinux = xno ; then
{ { echo "$as_me:$LINENO: error: SELinux explicitly required, and SELinux library not found" >&5
echo "$as_me: error: SELinux explicitly required, and SELinux library not found" >&2;}
{ (exit 1); exit 1; }; }
fi
fi
fi
# Check if we're building with SELinux support.
if test "x$have_selinux" = xyes; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_SELINUX 1
_ACEOF
fi
echo "$as_me:$LINENO: checking for egrep" >&5
echo $ECHO_N "checking for egrep... $ECHO_C" >&6
Expand Down Expand Up @@ -8310,6 +8474,7 @@ s,@libc_cv_cpp_asm_debuginfo@,$libc_cv_cpp_asm_debuginfo,;t t
s,@no_whole_archive@,$no_whole_archive,;t t
s,@exceptions@,$exceptions,;t t
s,@LIBGD@,$LIBGD,;t t
s,@have_selinux@,$have_selinux,;t t
s,@EGREP@,$EGREP,;t t
s,@sizeof_long_double@,$sizeof_long_double,;t t
s,@libc_cv_gcc_unwind_find_fde@,$libc_cv_gcc_unwind_find_fde,;t t
Expand Down
8 changes: 7 additions & 1 deletion nscd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
$(resolvobjdir)/libresolv.a
endif

ifeq (yes,$(have-selinux))
nscd-modules += selinux
selinux-LIBS := -lselinux
endif

distribute := nscd.h nscd-client.h dbg_log.h \
$(addsuffix .c, $(filter-out xmalloc, $(nscd-modules))) \
nscd_nischeck.c TODO nscd.conf nscd.init nscd_proto.h \
Expand Down Expand Up @@ -83,6 +88,7 @@ CFLAGS-xstrdup.c = -fpie
CFLAGS-mem.c = -fpie
CFLAGS-nscd_setup_thread.c = -fpie
CFLAGS-aicache.c = -fpie
CFLAGS-selinux.c = -fpie

$(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
$(LINK.o) -pie -Wl,-O1 \
Expand All @@ -91,7 +97,7 @@ $(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
$(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
$(LDFLAGS) $(LDFLAGS-$(@F)) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-o $@ $^ $(common-objpfx)libc_nonshared.a
-o $@ $^ $(selinux-LIBS) $(common-objpfx)libc_nonshared.a
endif

# This makes sure -DNOT_IN_libc is passed for all these modules.
Expand Down
10 changes: 10 additions & 0 deletions nscd/connections.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@

#include "nscd.h"
#include "dbg_log.h"
#include "selinux.h"


/* Number of bytes of data we initially reserve for each hash table bucket. */
Expand Down Expand Up @@ -592,6 +593,15 @@ cannot handle old request version %d; current version is %d"),
return;
}

/* Make the SELinux check before we go on to the standard checks. We
need to verify that the request type is valid, since it has not
yet been checked at this point. */
if (selinux_enabled
&& __builtin_expect (req->type, GETPWBYNAME) >= GETPWBYNAME
&& __builtin_expect (req->type, LASTREQ) < LASTREQ
&& nscd_request_avc_has_perm (fd, req->type) != 0)
return;

struct database_dyn *db = serv2db[req->type];

if ((__builtin_expect (req->type, GETPWBYNAME) >= GETPWBYNAME
Expand Down
12 changes: 12 additions & 0 deletions nscd/nscd.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@

#include "dbg_log.h"
#include "nscd.h"
#include "selinux.h"
#include "../nss/nsswitch.h"
#include <device-nrs.h>

Expand Down Expand Up @@ -126,6 +127,9 @@ main (int argc, char **argv)
/* Set the text message domain. */
textdomain (PACKAGE);

/* Determine if the kernel has SELinux support. */
nscd_selinux_enabled (&selinux_enabled);

/* Parse and process arguments. */
argp_parse (&argp, argc, argv, 0, &remaining, NULL);

Expand Down Expand Up @@ -244,6 +248,10 @@ main (int argc, char **argv)
signal (SIGTSTP, SIG_IGN);
}

/* Start the SELinux AVC. */
if (selinux_enabled)
nscd_avc_init ();

signal (SIGINT, termination_handler);
signal (SIGQUIT, termination_handler);
signal (SIGTERM, termination_handler);
Expand Down Expand Up @@ -421,6 +429,10 @@ termination_handler (int signum)
// XXX async OK?
msync (dbs[cnt].head, dbs[cnt].memsize, MS_ASYNC);

/* Shutdown the SELinux AVC. */
if (selinux_enabled)
nscd_avc_destroy ();

_exit (EXIT_SUCCESS);
}

Expand Down
4 changes: 4 additions & 0 deletions nscd/nscd_proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@
/* Interval in which we transfer retry to contact the NSCD. */
#define NSS_NSCD_RETRY 100

/* Type needed in the interfaces. */
struct nscd_ai_result;


/* Variables for communication between NSCD handler functions and NSS. */
extern int __nss_not_use_nscd_passwd attribute_hidden;
extern int __nss_not_use_nscd_group attribute_hidden;
Expand Down
Loading

0 comments on commit 74a30a5

Please sign in to comment.