# Copyright 1999-2015 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Id$ # Simple test to make sure our new glibc isnt completely broken. # Make sure we don't test with statically built binaries since # they will fail. Also, skip if this glibc is a cross compiler. # # If coreutils is built with USE=multicall, some of these files # will just be wrapper scripts, not actual ELFs we can test. glibc_sanity_check() { cd / #228809 # We enter ${ED} so to avoid trouble if the path contains # special characters; for instance if the path contains the # colon character (:), then the linker will try to split it # and look for the libraries in an unexpected place. This can # lead to unsafe code execution if the generated prefix is # within a world-writable directory. # (e.g. /var/tmp/portage:${HOSTNAME}) pushd "${ED}"/$(get_libdir) >/dev/null local x striptest for x in cal date env free ls true uname uptime ; do x=$(type -p ${x}) [[ -z ${x} || ${x} != ${EPREFIX}/* ]] && continue striptest=$(LC_ALL="C" file -L ${x} 2>/dev/null) || continue case ${striptest} in *"statically linked"*) continue;; *"ASCII text"*) continue;; esac # We need to clear the locale settings as the upgrade might want # incompatible locale data. This test is not for verifying that. LC_ALL=C \ ./ld-*.so --library-path . ${x} > /dev/null \ || die "simple run test (${x}) failed" done popd >/dev/null } eblit-glibc-pkg_preinst() { # nothing to do if just installing headers just_headers && return # prepare /etc/ld.so.conf.d/ for files mkdir -p "${EROOT}"/etc/ld.so.conf.d # Default /etc/hosts.conf:multi to on for systems with small dbs. if [[ $(wc -l < "${EROOT}"/etc/hosts) -lt 1000 ]] ; then sed -i '/^multi off/s:off:on:' "${ED}"/etc/host.conf elog "Defaulting /etc/host.conf:multi to on" fi [[ ${ROOT} != "/" ]] && return 0 [[ -d ${ED}/$(get_libdir) ]] || return 0 glibc_sanity_check # For newer EAPIs, this was run in pkg_pretend. if [[ ${EAPI:-0} == [0123] ]] ; then check_devpts fi }