rc.d/ldconfig: Compute ldconfig paths in a function

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
This commit is contained in:
Konrad Witaszczyk 2024-04-12 14:34:59 -07:00 committed by John Baldwin
parent 7c7299df76
commit e6e38bc522

View File

@ -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
@ -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
@ -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