diff --git a/etc/systemd/system-generators/zfs-mount-generator.in b/etc/systemd/system-generators/zfs-mount-generator.in index 2c93111f31..5428eb25d9 100755 --- a/etc/systemd/system-generators/zfs-mount-generator.in +++ b/etc/systemd/system-generators/zfs-mount-generator.in @@ -22,7 +22,7 @@ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -set -ef +set -e FSLIST="@sysconfdir@/zfs/zfs-list.cache" @@ -55,7 +55,12 @@ mkdir -p "${req_dir}" process_line() { - # -o name + # zfs list -H -o name,... + # fields are tab separated + IFS="$(printf '\t')" + # protect against special characters in, e.g., mountpoints + set -f + set -- $1 dataset="${1}" p_mountpoint="${2}" p_canmount="${3}" @@ -175,7 +180,7 @@ process_line() { # Automatically generated by zfs-mount-generator [Unit] -SourcePath=${FSLIST}/${cachefile} +SourcePath=${cachefile} Documentation=man:zfs-mount-generator(8) Before=local-fs.target zfs-mount.service After=zfs-import.target @@ -193,8 +198,8 @@ EOF } # Feed each line into process_line -for cachefile in $(ls "${FSLIST}") ; do +for cachefile in "${FSLIST}/"* ; do while read -r fs ; do - process_line $fs - done < "${FSLIST}/${cachefile}" + process_line "${fs}" + done < "${cachefile}" done