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 <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
This commit is contained in:
parent
bca06413f7
commit
6aff30ad80
|
@ -22,7 +22,7 @@
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
set -ef
|
set -e
|
||||||
|
|
||||||
FSLIST="@sysconfdir@/zfs/zfs-list.cache"
|
FSLIST="@sysconfdir@/zfs/zfs-list.cache"
|
||||||
|
|
||||||
|
@ -55,7 +55,12 @@ mkdir -p "${req_dir}"
|
||||||
|
|
||||||
process_line() {
|
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}"
|
dataset="${1}"
|
||||||
p_mountpoint="${2}"
|
p_mountpoint="${2}"
|
||||||
p_canmount="${3}"
|
p_canmount="${3}"
|
||||||
|
@ -175,7 +180,7 @@ process_line() {
|
||||||
# Automatically generated by zfs-mount-generator
|
# Automatically generated by zfs-mount-generator
|
||||||
|
|
||||||
[Unit]
|
[Unit]
|
||||||
SourcePath=${FSLIST}/${cachefile}
|
SourcePath=${cachefile}
|
||||||
Documentation=man:zfs-mount-generator(8)
|
Documentation=man:zfs-mount-generator(8)
|
||||||
Before=local-fs.target zfs-mount.service
|
Before=local-fs.target zfs-mount.service
|
||||||
After=zfs-import.target
|
After=zfs-import.target
|
||||||
|
@ -193,8 +198,8 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# Feed each line into process_line
|
# Feed each line into process_line
|
||||||
for cachefile in $(ls "${FSLIST}") ; do
|
for cachefile in "${FSLIST}/"* ; do
|
||||||
while read -r fs ; do
|
while read -r fs ; do
|
||||||
process_line $fs
|
process_line "${fs}"
|
||||||
done < "${FSLIST}/${cachefile}"
|
done < "${cachefile}"
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in New Issue