Merge pull request #62557 from nicholasmhughes/fix-fstab-opts-order

Fix order specific mount.mounted options for persist
This commit is contained in:
Megan Wilhite 2022-09-14 08:45:41 -06:00 committed by GitHub
commit 1a57b8ea79
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 33 additions and 9 deletions

1
changelog/62556.fixed Normal file
View file

@ -0,0 +1 @@
Fix order specific mount.mounted options for persist

View file

@ -368,7 +368,12 @@ class _fstab_entry:
"""
entry = self.dict_from_line(line)
for key, value in self.criteria.items():
if entry[key] != value:
if key == "opts":
ex_opts = sorted(entry.get(key, "").split(","))
cr_opts = sorted(value.split(","))
if ex_opts != cr_opts:
return False
elif entry[key] != value:
return False
return True
@ -467,7 +472,12 @@ class _vfstab_entry:
"""
entry = self.dict_from_line(line)
for key, value in self.criteria.items():
if entry[key] != value:
if key == "opts":
ex_opts = sorted(entry.get(key, "").split(","))
cr_opts = sorted(value.split(","))
if ex_opts != cr_opts:
return False
elif entry[key] != value:
return False
return True
@ -628,7 +638,12 @@ class _FileSystemsEntry:
evalue_dict = fsys_view[1]
for key, value in self.criteria.items():
if key in evalue_dict:
if evalue_dict[key] != value:
if key == "opts":
ex_opts = sorted(evalue_dict.get(key, "").split(","))
cr_opts = sorted(value.split(","))
if ex_opts != cr_opts:
return False
elif evalue_dict[key] != value:
return False
else:
return False

View file

@ -222,8 +222,6 @@ def mounted(
# string
if isinstance(opts, str):
opts = opts.split(",")
if opts:
opts.sort()
if isinstance(hidden_opts, str):
hidden_opts = hidden_opts.split(",")
@ -345,8 +343,6 @@ def mounted(
if label_device and label_device not in device_list:
device_list.append(label_device)
if opts:
opts.sort()
mount_invisible_options = [
"_netdev",
"actimeo",

View file

@ -137,6 +137,18 @@ def test_active():
assert mount.active() == {}
def test_fstab_entry_ignores_opt_ordering():
entry = mount._fstab_entry(
name="/tmp",
device="tmpfs",
fstype="tmpfs",
opts="defaults,nodev,noexec",
dump=0,
pass_num=0,
)
assert entry.match("tmpfs\t\t/tmp\ttmpfs\tnodev,defaults,noexec\t0 0\n")
def test_fstab():
"""
List the content of the fstab

View file

@ -238,12 +238,12 @@ def test_mounted():
)
== ret
)
# Test to check the options order #57520
# Test to check the options order #57520, reverted in #62557
set_fstab_mock.assert_called_with(
name2,
"//SERVER/SHARE/",
"cifs",
["gid=group1", "uid=user1"],
["uid=user1", "gid=group1"],
0,
0,
"/etc/fstab",