]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
83555251 LP |
2 | |
3 | #include <sys/mount.h> | |
4 | ||
c2a986d5 | 5 | #include "alloc-util.h" |
83555251 LP |
6 | #include "mount-util.h" |
7 | #include "string-util.h" | |
6d7c4033 | 8 | #include "tests.h" |
83555251 | 9 | |
f27b437b YW |
10 | static void test_mount_option_mangle(void) { |
11 | char *opts = NULL; | |
12 | unsigned long f; | |
13 | ||
14 | assert_se(mount_option_mangle(NULL, MS_RDONLY|MS_NOSUID, &f, &opts) == 0); | |
15 | assert_se(f == (MS_RDONLY|MS_NOSUID)); | |
16 | assert_se(opts == NULL); | |
17 | ||
18 | assert_se(mount_option_mangle("", MS_RDONLY|MS_NOSUID, &f, &opts) == 0); | |
19 | assert_se(f == (MS_RDONLY|MS_NOSUID)); | |
20 | assert_se(opts == NULL); | |
21 | ||
22 | assert_se(mount_option_mangle("ro,nosuid,nodev,noexec", 0, &f, &opts) == 0); | |
23 | assert_se(f == (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC)); | |
24 | assert_se(opts == NULL); | |
25 | ||
26 | assert_se(mount_option_mangle("ro,nosuid,nodev,noexec,mode=755", 0, &f, &opts) == 0); | |
27 | assert_se(f == (MS_RDONLY|MS_NOSUID|MS_NODEV|MS_NOEXEC)); | |
28 | assert_se(streq(opts, "mode=755")); | |
29 | opts = mfree(opts); | |
30 | ||
31 | assert_se(mount_option_mangle("rw,nosuid,foo,hogehoge,nodev,mode=755", 0, &f, &opts) == 0); | |
32 | assert_se(f == (MS_NOSUID|MS_NODEV)); | |
33 | assert_se(streq(opts, "foo,hogehoge,mode=755")); | |
34 | opts = mfree(opts); | |
35 | ||
36 | assert_se(mount_option_mangle("rw,nosuid,nodev,noexec,relatime,net_cls,net_prio", MS_RDONLY, &f, &opts) == 0); | |
37 | assert_se(f == (MS_NOSUID|MS_NODEV|MS_NOEXEC|MS_RELATIME)); | |
38 | assert_se(streq(opts, "net_cls,net_prio")); | |
39 | opts = mfree(opts); | |
40 | ||
41 | assert_se(mount_option_mangle("rw,nosuid,nodev,relatime,size=1630748k,mode=700,uid=1000,gid=1000", MS_RDONLY, &f, &opts) == 0); | |
42 | assert_se(f == (MS_NOSUID|MS_NODEV|MS_RELATIME)); | |
43 | assert_se(streq(opts, "size=1630748k,mode=700,uid=1000,gid=1000")); | |
44 | opts = mfree(opts); | |
45 | ||
46 | assert_se(mount_option_mangle("size=1630748k,rw,gid=1000,,,nodev,relatime,,mode=700,nosuid,uid=1000", MS_RDONLY, &f, &opts) == 0); | |
47 | assert_se(f == (MS_NOSUID|MS_NODEV|MS_RELATIME)); | |
48 | assert_se(streq(opts, "size=1630748k,gid=1000,mode=700,uid=1000")); | |
49 | opts = mfree(opts); | |
50 | ||
51 | assert_se(mount_option_mangle("rw,exec,size=8143984k,nr_inodes=2035996,mode=755", MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, &f, &opts) == 0); | |
52 | assert_se(f == (MS_NOSUID|MS_NODEV)); | |
53 | assert_se(streq(opts, "size=8143984k,nr_inodes=2035996,mode=755")); | |
54 | opts = mfree(opts); | |
55 | ||
56 | assert_se(mount_option_mangle("rw,relatime,fmask=0022,,,dmask=0022", MS_RDONLY, &f, &opts) == 0); | |
57 | assert_se(f == MS_RELATIME); | |
58 | assert_se(streq(opts, "fmask=0022,dmask=0022")); | |
59 | opts = mfree(opts); | |
60 | ||
61 | assert_se(mount_option_mangle("rw,relatime,fmask=0022,dmask=0022,\"hogehoge", MS_RDONLY, &f, &opts) < 0); | |
62 | } | |
63 | ||
83555251 | 64 | int main(int argc, char *argv[]) { |
6d7c4033 | 65 | test_setup_logging(LOG_DEBUG); |
83555251 | 66 | |
f27b437b | 67 | test_mount_option_mangle(); |
c2a986d5 | 68 | |
83555251 LP |
69 | return 0; |
70 | } |