Use trim_path when we compare paths.
[live-boot-grml.git] / scripts / live-helpers
index be7cf76..795de55 100644 (file)
@@ -1281,10 +1281,15 @@ get_custom_mounts ()
                                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
 
@@ -1300,18 +1305,9 @@ get_custom_mounts ()
                                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
@@ -1377,7 +1373,7 @@ do_custom_mounts ()
                        # 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')
@@ -1490,6 +1486,6 @@ fix_home_rw_compatibility ()
        if [ ! -r "${include_list}" ]
        then
                echo "# home-rw backwards compatibility:
-. /home" > "${include_list}"
+/ /home" > "${include_list}"
        fi
 }