diff options
Diffstat (limited to 'sys-libs/musl/files')
-rw-r--r-- | sys-libs/musl/files/getent | 45 | ||||
-rw-r--r-- | sys-libs/musl/files/ldconfig | 143 | ||||
-rw-r--r-- | sys-libs/musl/files/ldconfig.in | 144 | ||||
-rw-r--r-- | sys-libs/musl/files/musl-1.1.10-uselocale-0-fix.diff | 25 |
4 files changed, 357 insertions, 0 deletions
diff --git a/sys-libs/musl/files/getent b/sys-libs/musl/files/getent new file mode 100644 index 000000000000..b7de424354b6 --- /dev/null +++ b/sys-libs/musl/files/getent @@ -0,0 +1,45 @@ +#!/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 diff --git a/sys-libs/musl/files/ldconfig b/sys-libs/musl/files/ldconfig new file mode 100644 index 000000000000..be0aa2b331c1 --- /dev/null +++ b/sys-libs/musl/files/ldconfig @@ -0,0 +1,143 @@ +#!/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 diff --git a/sys-libs/musl/files/ldconfig.in b/sys-libs/musl/files/ldconfig.in new file mode 100644 index 000000000000..a2921903c32c --- /dev/null +++ b/sys-libs/musl/files/ldconfig.in @@ -0,0 +1,144 @@ +#!/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) + +ARCH=@@ARCH@@ +LDSO_PATH="/lib/ld-musl-${ARCH}.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 diff --git a/sys-libs/musl/files/musl-1.1.10-uselocale-0-fix.diff b/sys-libs/musl/files/musl-1.1.10-uselocale-0-fix.diff new file mode 100644 index 000000000000..2785195dc0d0 --- /dev/null +++ b/sys-libs/musl/files/musl-1.1.10-uselocale-0-fix.diff @@ -0,0 +1,25 @@ +>From 63f4b9f18f3674124d8bcb119739fec85e6da005 Mon Sep 17 00:00:00 2001 +From: Timo Teräs <timo.teras@iki.fi> +Date: Fri, 05 Jun 2015 07:39:42 +0000 +Subject: fix uselocale((locale_t)0) not to modify locale + +commit 68630b55c0c7219fe9df70dc28ffbf9efc8021d8 made the new locale to +be assigned unconditonally resulting in crashes later on. +--- +diff --git a/src/locale/uselocale.c b/src/locale/uselocale.c +index b70a0c1..0fc5ecb 100644 +--- a/src/locale/uselocale.c ++++ b/src/locale/uselocale.c +@@ -8,9 +8,7 @@ locale_t __uselocale(locale_t new) + locale_t old = self->locale; + locale_t global = &libc.global_locale; + +- if (new == LC_GLOBAL_LOCALE) new = global; +- +- self->locale = new; ++ if (new) self->locale = new == LC_GLOBAL_LOCALE ? global : new; + + return old == global ? LC_GLOBAL_LOCALE : old; + } +-- +cgit v0.9.0.3-65-g4555 |