# This check can only trigger on the inital, non-recursive call since
# we create the destination before recursive calls
- if [ ! -d "${dest_dir}" ];
+ if [ ! -d "${dest_dir}" ]
then
log_warning_msg "Must link_files into a directory"
return
fi
- find "${src_dir}" -mindepth 1 -maxdepth 1 | while read x; do
- local src="${x}"
- local dest="${dest_dir}$(basename "${x}")"
- if [ -d "${src}" ];
+ find "${src_dir}" -mindepth 1 -maxdepth 1 | while read src; do
+ local dest="${dest_dir}$(basename "${src}")"
+ if [ -d "${src}" ]
then
- if [ -z "$(ls -A "${src}")" ];
+ if [ -z "$(ls -A "${src}")" ]
then
continue
fi
- if [ ! -d "${dest}" ];
+ if [ ! -d "${dest}" ]
then
mkdir -p "${dest}"
prev="$(dirname "${dest}")"
local devices="${1}"
local custom_mounts="${2}" # print result to this file
- local rootmnt="${3}" # should be set empty post-live-boot
- local bindings="/bindings.list"
- local links="/links.list"
+ local bindings="/tmp/bindings.list"
+ local links="/tmp/links.list"
rm -rf ${bindings} ${links} 2> /dev/null
for device in ${devices}
dest="${source}"
fi
- if echo ${dest} | grep -qe "^/\+$\|^/\+live\(/.*\)\?$"
+ if trim_path ${source} | grep -qe "^\(.*/\)\?\.\.\?\(/.*\)\?$"
then
- # mounting on / or /live could cause trouble
- log_warning_msg "Skipping unsafe custom mount on ${dest}"
+ log_warning_msg "Skipping unsafe custom mount with source ${source}: the source is a relative or absolute path w.r.t. the persistent media root and cannot use \".\" or \"..\""
+ continue
+ fi
+
+ if trim_path ${dest} | grep -q -e "^/$" -e "^/live\(/.*\)\?$" -e "^/\(.*/\)\?\.\.\?\(/.*\)\?$"
+ then
+ log_warning_msg "Skipping unsafe custom mount with desination ${dest}: the destination must be an absolute path using neither \".\" nor \"..\", and cannot be /live (or any sub-directory therein) or / (for the latter, use ${root_overlay_label}-type persistence instead)"
continue
fi
esac
done
- # FIXME: handle case: we already have /a/b in
- # $bindings added from current $device, but
- # now we find /a -- /a should replace /a/b in
- # $bindings.
-
- # FIXME: handle case: we have /a in $bindings
- # from current $device, now we find /a/b, so
- # we skip /a/b
-
# ensure that no multiple-/ occur in paths
- local full_source="$(echo ${backing}/${source}/ | sed -e 's|/\+|/|g')"
- local full_dest="$(echo ${rootmnt}/${dest}/ | sed -e 's|/\+|/|g')"
+ local full_source="$(trim_path ${backing}/${source})"
+ local full_dest="$(trim_path ${rootmnt}/${dest})"
device_used="yes"
if echo ${options} | grep -qe "\<linkfiles\>";
then
do_custom_mounts ()
{
local custom_mounts="${1}" # the ouput from get_custom_mounts()
- local rootmnt="${2}" # should be set empty post-live-boot
while read source dest options # < ${custom_mounts}
do
# FIXME: this should really be handled by
# live-config since we don't know for sure
# which uid a certain user has until then
- if echo ${dest} | grep -qe "^${rootmnt}/*home/\+[^/]\+"
+ if trim_path ${dest} | grep -qe "^${rootmnt}/*home/[^/]\+"
then
path="/"
for dir in $(echo ${dest} | sed -e 's|/\+| |g')
rofs_dest_backing="${d}/$(echo ${dest} | sed -e "s|${rootmnt}||")"
else
rofs_dest_backing="${d}/${dest}"
-
fi
if [ -d "${rofs_dest_backing}" ]
then
if [ ! -r "${include_list}" ]
then
echo "# home-rw backwards compatibility:
-. /home" > "${include_list}"
+/ /home" > "${include_list}"
fi
}