Skip to content

Commit

Permalink
rc.d/ldconfig: Compute ldconfig paths in a function
Browse files Browse the repository at this point in the history
Move logic that computes paths passed to ldconfig(8) to a
ldconfig_paths() function that can be called for multiple ABIs.

Reviewed by:	olce, kib
Obtained from:	CheriBSD
Differential Revision:	https://reviews.freebsd.org/D44751
  • Loading branch information
kwitaszczyk authored and bsdjhb committed Apr 12, 2024
1 parent 7c7299d commit e6e38bc
Showing 1 changed file with 29 additions and 26 deletions.
55 changes: 29 additions & 26 deletions libexec/rc/rc.d/ldconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,31 @@ ldconfig_command="/sbin/ldconfig"
start_cmd="ldconfig_start"
stop_cmd=":"

ldconfig_paths()
{
local _dirs _files _ii _ldpaths _paths

_dirs="${1}"
_paths="${2}"
_ldpaths="${3}"

for _ii in ${_dirs}; do
if [ -d "${_ii}" ]; then
_files=`find ${_ii} -type f`
if [ -n "${_files}" ]; then
_paths="${_paths} `cat ${_files} | sort -u`"
fi
fi
done
for _ii in ${_paths}; do
if [ -r "${_ii}" ]; then
_ldpaths="${_ldpaths} ${_ii}"
fi
done

echo "${_ldpaths}"
}

ldconfig_start()
{
local _files _ins
Expand All @@ -23,31 +48,12 @@ ldconfig_start()
checkyesno ldconfig_insecure && _ins="-i"
if [ -x "${ldconfig_command}" ]; then
_LDC=$(/libexec/ld-elf.so.1 -v | sed -n -e '/^Default lib path /s///p' | tr : ' ')
for i in ${ldconfig_local_dirs}; do
if [ -d "${i}" ]; then
_files=`find ${i} -type f`
if [ -n "${_files}" ]; then
ldconfig_paths="${ldconfig_paths} `cat ${_files} | sort -u`"
fi
fi
done
for i in ${ldconfig_paths} /etc/ld-elf.so.conf; do
if [ -r "${i}" ]; then
_LDC="${_LDC} ${i}"
fi
done
_LDC=$(ldconfig_paths "${ldconfig_local_dirs}" \
"${ldconfig_paths} /etc/ld-elf.so.conf" "$_LDC")
startmsg 'ELF ldconfig path:' ${_LDC}
${ldconfig} -elf ${_ins} ${_LDC}

if check_kern_features compat_freebsd32; then
for i in ${ldconfig_local32_dirs}; do
if [ -d "${i}" ]; then
_files=`find ${i} -type f`
if [ -n "${_files}" ]; then
ldconfig32_paths="${ldconfig32_paths} `cat ${_files} | sort -u`"
fi
fi
done
_LDC=""
if [ -x /libexec/ld-elf32.so.1 ]; then
for x in $(/libexec/ld-elf32.so.1 -v | sed -n -e '/^Default lib path /s///p' | tr : ' '); do
Expand All @@ -56,11 +62,8 @@ ldconfig_start()
fi
done
fi
for i in ${ldconfig32_paths}; do
if [ -r "${i}" ]; then
_LDC="${_LDC} ${i}"
fi
done
_LDC=$(ldconfig_paths "${ldconfig_local32_dirs}" \
"${ldconfig32_paths}" "$_LDC")
startmsg '32-bit compatibility ldconfig path:' ${_LDC}
${ldconfig} -32 ${_ins} ${_LDC}
fi
Expand Down

0 comments on commit e6e38bc

Please sign in to comment.