Mercurial > vim
comparison src/testdir/test_swap.vim @ 12771:8984342ab09e v8.0.1263
patch 8.0.1263: others can read the swap file if a user is careless
commit https://github.com/vim/vim/commit/5a73e0ca54c77e067c3b12ea6f35e3e8681e8cf8
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Nov 4 21:35:01 2017 +0100
patch 8.0.1263: others can read the swap file if a user is careless
Problem: Others can read the swap file if a user is careless with his
primary group.
Solution: If the group permission allows for reading but the world
permissions doesn't, make sure the group is right.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 04 Nov 2017 21:45:04 +0100 |
parents | 0b6c09957b43 |
children | bda267b9fc68 |
comparison
equal
deleted
inserted
replaced
12770:89889fea43e0 | 12771:8984342ab09e |
---|---|
1 " Tests for the swap feature | 1 " Tests for the swap feature |
2 | 2 |
3 " Tests for 'directory' option. | 3 "" Tests for 'directory' option. |
4 func Test_swap_directory() | 4 "func Test_swap_directory() |
5 " if !has("unix") | |
6 " return | |
7 " endif | |
8 " let content = ['start of testfile', | |
9 " \ 'line 2 Abcdefghij', | |
10 " \ 'line 3 Abcdefghij', | |
11 " \ 'end of testfile'] | |
12 " call writefile(content, 'Xtest1') | |
13 " | |
14 " " '.', swap file in the same directory as file | |
15 " set dir=.,~ | |
16 " | |
17 " " Verify that the swap file doesn't exist in the current directory | |
18 " call assert_equal([], glob(".Xtest1*.swp", 1, 1, 1)) | |
19 " edit Xtest1 | |
20 " let swfname = split(execute("swapname"))[0] | |
21 " call assert_equal([swfname], glob(swfname, 1, 1, 1)) | |
22 " | |
23 " " './dir', swap file in a directory relative to the file | |
24 " set dir=./Xtest2,.,~ | |
25 " | |
26 " call mkdir("Xtest2") | |
27 " edit Xtest1 | |
28 " call assert_equal([], glob(swfname, 1, 1, 1)) | |
29 " let swfname = "Xtest2/Xtest1.swp" | |
30 " call assert_equal(swfname, split(execute("swapname"))[0]) | |
31 " call assert_equal([swfname], glob("Xtest2/*", 1, 1, 1)) | |
32 " | |
33 " " 'dir', swap file in directory relative to the current dir | |
34 " set dir=Xtest.je,~ | |
35 " | |
36 " call mkdir("Xtest.je") | |
37 " call writefile(content, 'Xtest2/Xtest3') | |
38 " edit Xtest2/Xtest3 | |
39 " call assert_equal(["Xtest2/Xtest3"], glob("Xtest2/*", 1, 1, 1)) | |
40 " let swfname = "Xtest.je/Xtest3.swp" | |
41 " call assert_equal(swfname, split(execute("swapname"))[0]) | |
42 " call assert_equal([swfname], glob("Xtest.je/*", 1, 1, 1)) | |
43 " | |
44 " set dir& | |
45 " call delete("Xtest1") | |
46 " call delete("Xtest2", "rf") | |
47 " call delete("Xtest.je", "rf") | |
48 "endfunc | |
49 | |
50 func Test_swap_group() | |
5 if !has("unix") | 51 if !has("unix") |
6 return | 52 return |
7 endif | 53 endif |
8 let content = ['start of testfile', | 54 let groups = split(system('groups')) |
9 \ 'line 2 Abcdefghij', | 55 if len(groups) <= 1 |
10 \ 'line 3 Abcdefghij', | 56 throw 'Skipped: need at least two groups, got ' . groups |
11 \ 'end of testfile'] | 57 endif |
12 call writefile(content, 'Xtest1') | |
13 | 58 |
14 " '.', swap file in the same directory as file | 59 call delete('Xtest') |
15 set dir=.,~ | 60 split Xtest |
61 call setline(1, 'just some text') | |
62 wq | |
63 if system('ls -l Xtest') !~ ' ' . groups[0] . ' \d' | |
64 throw 'Skipped: test file does not have the first group' | |
65 else | |
66 silent !chmod 640 Xtest | |
67 call system('chgrp ' . groups[1] . ' Xtest') | |
68 if system('ls -l Xtest') !~ ' ' . groups[1] . ' \d' | |
69 throw 'Skipped: cannot set second group on test file' | |
70 else | |
71 split Xtest | |
72 let swapname = substitute(execute('swapname'), '[[:space:]]', '', 'g') | |
73 call assert_match('Xtest', swapname) | |
74 " Group of swapfile must now match original file. | |
75 call assert_match(' ' . groups[1] . ' \d', system('ls -l ' . swapname)) | |
16 | 76 |
17 " Verify that the swap file doesn't exist in the current directory | 77 bwipe! |
18 call assert_equal([], glob(".Xtest1*.swp", 1, 1, 1)) | 78 endif |
19 edit Xtest1 | 79 endif |
20 let swfname = split(execute("swapname"))[0] | |
21 call assert_equal([swfname], glob(swfname, 1, 1, 1)) | |
22 | 80 |
23 " './dir', swap file in a directory relative to the file | 81 call delete('Xtest') |
24 set dir=./Xtest2,.,~ | |
25 | |
26 call mkdir("Xtest2") | |
27 edit Xtest1 | |
28 call assert_equal([], glob(swfname, 1, 1, 1)) | |
29 let swfname = "Xtest2/Xtest1.swp" | |
30 call assert_equal(swfname, split(execute("swapname"))[0]) | |
31 call assert_equal([swfname], glob("Xtest2/*", 1, 1, 1)) | |
32 | |
33 " 'dir', swap file in directory relative to the current dir | |
34 set dir=Xtest.je,~ | |
35 | |
36 call mkdir("Xtest.je") | |
37 call writefile(content, 'Xtest2/Xtest3') | |
38 edit Xtest2/Xtest3 | |
39 call assert_equal(["Xtest2/Xtest3"], glob("Xtest2/*", 1, 1, 1)) | |
40 let swfname = "Xtest.je/Xtest3.swp" | |
41 call assert_equal(swfname, split(execute("swapname"))[0]) | |
42 call assert_equal([swfname], glob("Xtest.je/*", 1, 1, 1)) | |
43 | |
44 set dir& | |
45 call delete("Xtest1") | |
46 call delete("Xtest2", "rf") | |
47 call delete("Xtest.je", "rf") | |
48 endfunc | 82 endfunc |