Cope with double quotes in Linux Mountinfo
Signed-off-by: Johannes Frey <me@johannes-frey.de>
This commit is contained in:
parent
705b8527d4
commit
87f9fdb065
@ -81,11 +81,11 @@ func parseInfoFile(r io.Reader) ([]Info, error) {
|
|||||||
p.Major, _ = strconv.Atoi(mm[0])
|
p.Major, _ = strconv.Atoi(mm[0])
|
||||||
p.Minor, _ = strconv.Atoi(mm[1])
|
p.Minor, _ = strconv.Atoi(mm[1])
|
||||||
|
|
||||||
p.Root, err = strconv.Unquote(`"` + fields[3] + `"`)
|
p.Root, err = strconv.Unquote(`"` + strings.Replace(fields[3], `"`, `\"`, -1) + `"`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote root field", fields[3])
|
return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote root field", fields[3])
|
||||||
}
|
}
|
||||||
p.Mountpoint, err = strconv.Unquote(`"` + fields[4] + `"`)
|
p.Mountpoint, err = strconv.Unquote(`"` + strings.Replace(fields[4], `"`, `\"`, -1) + `"`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote mount point field", fields[4])
|
return nil, errors.Wrapf(err, "parsing '%s' failed: unable to unquote mount point field", fields[4])
|
||||||
}
|
}
|
||||||
|
@ -439,6 +439,9 @@ const (
|
|||||||
|
|
||||||
mountInfoWithSpaces = `486 28 252:1 / /mnt/foo\040bar rw,relatime shared:243 - ext4 /dev/vda1 rw,data=ordered
|
mountInfoWithSpaces = `486 28 252:1 / /mnt/foo\040bar rw,relatime shared:243 - ext4 /dev/vda1 rw,data=ordered
|
||||||
31 21 0:23 / /DATA/foo_bla_bla rw,relatime - cifs //foo/BLA\040BLA\040BLA/ rw,sec=ntlm,cache=loose,unc=\\foo\BLA BLA BLA,username=my_login,domain=mydomain.com,uid=12345678,forceuid,gid=12345678,forcegid,addr=10.1.30.10,file_mode=0755,dir_mode=0755,nounix,rsize=61440,wsize=65536,actimeo=1`
|
31 21 0:23 / /DATA/foo_bla_bla rw,relatime - cifs //foo/BLA\040BLA\040BLA/ rw,sec=ntlm,cache=loose,unc=\\foo\BLA BLA BLA,username=my_login,domain=mydomain.com,uid=12345678,forceuid,gid=12345678,forcegid,addr=10.1.30.10,file_mode=0755,dir_mode=0755,nounix,rsize=61440,wsize=65536,actimeo=1`
|
||||||
|
|
||||||
|
mountInfoWithDoubleQuotes = `1046 30 253:1 /tmp/bar /var/lib/kubelet/pods/98d150a4-d814-4d52-9068-b10f62d7a895/volumes/kubernetes.io~empty-dir/tmp-dir/"var rw,relatime shared:1 - ext4 /dev/mapper/ubuntu--vg-root rw,errors=remount-ro
|
||||||
|
1046 30 253:1 /tmp/bar /tmp/"foo" rw,relatime shared:1 - ext4 /dev/mapper/ubuntu--vg-root rw,errors=remount-ro`
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestParseFedoraMountinfo(t *testing.T) {
|
func TestParseFedoraMountinfo(t *testing.T) {
|
||||||
@ -538,3 +541,48 @@ func TestParseMountinfoWithSpaces(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseMountinfoWithDoubleQuotes(t *testing.T) {
|
||||||
|
r := bytes.NewBuffer([]byte(mountInfoWithDoubleQuotes))
|
||||||
|
infos, err := parseInfoFile(r)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
expected := []Info{
|
||||||
|
{
|
||||||
|
ID: 1046,
|
||||||
|
Parent: 30,
|
||||||
|
Major: 253,
|
||||||
|
Minor: 1,
|
||||||
|
Root: "/tmp/bar",
|
||||||
|
Mountpoint: `/var/lib/kubelet/pods/98d150a4-d814-4d52-9068-b10f62d7a895/volumes/kubernetes.io~empty-dir/tmp-dir/"var`,
|
||||||
|
Options: "rw,relatime",
|
||||||
|
Optional: "shared:1",
|
||||||
|
FSType: "ext4",
|
||||||
|
Source: "/dev/mapper/ubuntu--vg-root",
|
||||||
|
VFSOptions: "rw,errors=remount-ro",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID: 1046,
|
||||||
|
Parent: 30,
|
||||||
|
Major: 253,
|
||||||
|
Minor: 1,
|
||||||
|
Root: "/tmp/bar",
|
||||||
|
Mountpoint: `/tmp/"foo"`,
|
||||||
|
Options: "rw,relatime",
|
||||||
|
Optional: "shared:1",
|
||||||
|
FSType: "ext4",
|
||||||
|
Source: "/dev/mapper/ubuntu--vg-root",
|
||||||
|
VFSOptions: "rw,errors=remount-ro",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(infos) != len(expected) {
|
||||||
|
t.Fatalf("expected %d entries, got %d", len(expected), len(infos))
|
||||||
|
}
|
||||||
|
for i, mi := range expected {
|
||||||
|
if infos[i] != mi {
|
||||||
|
t.Fatalf("expected %#v, got %#v", mi, infos[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user