From: Antonio Russo Date: Tue, 7 May 2019 16:32:23 +0000 (-0400) Subject: Fix zfs-mount-generator for datasets with spaces X-Git-Tag: zfs-0.8.0~18 X-Git-Url: https://git.proxmox.com/?p=mirror_zfs.git;a=commitdiff_plain;h=6aff30ad803fd677d873dd5220a37e6e3876aa0d Fix zfs-mount-generator for datasets with spaces Alternative implementation of @rlaager's original modification of zfs-mount-generator fix, with @chrisrd's comments. Set IFS to be only the tab character, matching our `-H` call in `zfs list`, allowing spaces to appear in dataset names (and mountpoints). Also adds comments explaining our rationale. Reviewed-by: Chris Dunlop Reviewed-by: Richard Laager Reviewed-by: George Melikov Signed-off-by: Antonio Russo Closes #8708 Closes #8718 --- diff --git a/etc/systemd/system-generators/zfs-mount-generator.in b/etc/systemd/system-generators/zfs-mount-generator.in index 2c93111f3..5428eb25d 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