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 <chris@onthe.net.au>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Signed-off-by: Antonio Russo <antonio.e.russo@gmail.com>
Closes #8708
Closes #8718
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
FSLIST="@sysconfdir@/zfs/zfs-list.cache"
FSLIST="@sysconfdir@/zfs/zfs-list.cache"
+ # 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}"
dataset="${1}"
p_mountpoint="${2}"
p_canmount="${3}"
# Automatically generated by zfs-mount-generator
[Unit]
# Automatically generated by zfs-mount-generator
[Unit]
-SourcePath=${FSLIST}/${cachefile}
Documentation=man:zfs-mount-generator(8)
Before=local-fs.target zfs-mount.service
After=zfs-import.target
Documentation=man:zfs-mount-generator(8)
Before=local-fs.target zfs-mount.service
After=zfs-import.target
}
# Feed each line into process_line
}
# Feed each line into process_line
-for cachefile in $(ls "${FSLIST}") ; do
+for cachefile in "${FSLIST}/"* ; do
- process_line $fs
- done < "${FSLIST}/${cachefile}"
+ process_line "${fs}"
+ done < "${cachefile}"