blueness    15/04/15 23:10:51

  Added:                getent ldconfig
  Log:
  Merge with sys-apps/getent.  Add ldconfig.  Bug #545006.
  
  (Portage version: 2.2.14/cvs/Linux x86_64, signed Manifest commit with key 
0xF52D4BBA)

Revision  Changes    Path
1.1                  sys-libs/musl/files/getent

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/getent?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/getent?rev=1.1&content-type=text/plain

Index: getent
===================================================================
#!/bin/sh
# This files is part of uClibc. 
# Distributed under the terms of the Lesser GNU General Public License v2
#
# Closely (not perfectly) emulate the behavior of glibc's getent utility
#
#passwd|shadow|group|aliases|hosts|networks|ethers|netgroup|protocols|services|rpc
# only returns the first match (by design)
# dns based search is not supported (hosts,networks)
# case-insensitive matches not supported (ethers; others?)
# may return false-positives (hosts,protocols,rpc,services,ethers)

[ -z "$PATH" ] && PATH="/bin:/usr/bin" || PATH="${PATH}:/bin:/usr/bin"
export PATH

file="/etc/$1"
case $1 in
        passwd|group)
                match="^$2:\|^[^:]*:[^:]*:$2:" ;;
        shadow)
                match="^$2:" ;;
        networks|netgroup)
                match="^[[:space:]]*$2\>" ;;
        hosts|protocols|rpc|services|ethers)
                match="\<$2\>" ;;
        aliases)
                match="^[[:space:]]*$2[[:space:]]*:" ;;
        ""|-h|--help)
                echo "USAGE: $0 database [key]"
                exit 0 ;;
        *)
                echo "$0: Unknown database: $1" 1>&2
                exit 1 ;;
esac

if [ ! -f "$file" ] ; then
        echo "$0: Could not find database file for $1" 1>&2
        exit 1
fi

if [ $# -eq 1 ] ; then
        exec cat "$file"
else
        sed "s/#.*//; /$match/q; d" "$file" | grep . || exit 2
fi



1.1                  sys-libs/musl/files/ldconfig

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/ldconfig?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/ldconfig?rev=1.1&content-type=text/plain

Index: ldconfig
===================================================================
#!/bin/bash -e
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

ROOT="/"

LDSO_CONF="/etc/ld.so.conf"
if [[ ! -e $LDSO_CONF ]]; then
        echo "$LDSO_CONF not found" >&2
        exit 1
fi

LDSO_CONF_DIR=$(dirname $LDSO_CONF)

VERBOSE=0

UPDATE_LINKS=1

get_options() {
        while getopts "vnNXf:C:r:p" opt "$@"; do
                case $opt in
                v)
                        echo "ldconfig for musl in Gentoo"
                        VERBOSE=1
                        ;;
                r)
                        ROOT=$OPTARG
                        ;;
                f)
                        LDSO_CONF=$OPTARG
                        ;;
                X)
                        UPDATE_LINKS=0
                        ;;
                \?)
                        echo "Invalid option: -$opt" >&2
                        exit 1
                        ;;
                n|N|C|p)
                        echo "Unimplemented option: -$opt" >&2
                        exit 1
                        ;;
                esac
        done

        if [[ $UPDATE_LINKS == 1 ]]; then
                echo "Updating links is not implemented."
        fi
}


repeated() {
        local l=$1
        local drs="${@:2}"
        for m in $drs; do
                [[ $m == $l ]] && return 0
        done
        return 1
}

expand() {
        # We are assuming the ld.so.conf's 'include' is not recursive
        local f line l
        local glob="$LDSO_CONF_DIR/$1"
        local drs="${@:2} "

        for f in $glob; do
                [[ ! -f $f ]] && continue
                while read line; do
                        line=${line%%#*}
                        line=${line//:/ }
                        line=${line//,/ }
                        for l in $line; do
                                #We must add this whether or not the directory 
exists
                                repeated $l $drs && continue
                                drs+=" $l "
                        done
                done < $f
        done

        echo $drs
}

read_ldso_conf() {
        local drs=" "

        while read line; do
                # Sanitize the line - see ldconfig(8) for delimiters
                # Note: bash read turns tabs into spaces and read already
                # delimits on newlines with the default $IFS
                line=${line%%#*}   # Remove comments
                line=${line//:/ }  # Change colon delimiter to space
                line=${line//,/ }  # Change comma delimiter to space

                next=0
                for l in $line; do
                        if [[ $next == 1 ]]; then
                                next=0
                                drs=$(expand $l $drs)
                        elif [[ $l == "include" ]]; then
                                next=1
                        else
                                # glibc's ldconfig silently skips non 
directories
                                if [[ -d $l ]]; then
                                        repeated $l $drs && continue
                                        drs+=" $l "
                                fi
                        fi
                done
        done < $1

        echo $drs
}

sanitize() {
        local drs=$@

        repeated "/lib" $drs || drs="/lib $drs"
        repeated "/usr/lib" $drs || drs="/usr/lib $drs"

        echo $drs
}

get_options "$@"
drs=$(read_ldso_conf "$LDSO_CONF")
drs=$(sanitize $drs)

LDSO_PATH=$(ls /lib/ld-musl-*.so.1)
if [[ ! -e $LDSO_PATH ]]; then
        echo "$LDSO_PATH not found" >&2
        exit 1
fi

LDSO_ARCH=$(basename $LDSO_PATH)
LDSO_NAME=${LDSO_ARCH%.so.1}
ETC_LDSO_PATH=/etc/${LDSO_NAME}.path

X=$(mktemp --tmpdir=/tmp ${LDSO_NAME}.XXXXXX)
for d in $drs; do
        echo $d >> $X
done
chmod 644 $X
mv $X $ETC_LDSO_PATH




Reply via email to