diff options
author | 2023-02-24 20:44:48 -0500 | |
---|---|---|
committer | 2023-02-24 20:44:48 -0500 | |
commit | d657245f7353f692c22db2801ac64f7d807eb415 (patch) | |
tree | 5494cbde66f9fb6220df8a72415a6160f130a6b9 /test/filters/namespaces.c | |
parent | Merge pull request #5677 from kmk3/print-failed-long-arg (diff) | |
parent | editorconfig: add indentation rules (diff) | |
download | firejail-d657245f7353f692c22db2801ac64f7d807eb415.tar.gz firejail-d657245f7353f692c22db2801ac64f7d807eb415.tar.zst firejail-d657245f7353f692c22db2801ac64f7d807eb415.zip |
Merge pull request #5674 from kmk3/fix-ws-add-editorconfig
build: Fix whitespace and add .editorconfig
Diffstat (limited to 'test/filters/namespaces.c')
-rw-r--r-- | test/filters/namespaces.c | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/test/filters/namespaces.c b/test/filters/namespaces.c index 06dfa4edf..ecf0fdcd1 100644 --- a/test/filters/namespaces.c +++ b/test/filters/namespaces.c | |||
@@ -15,82 +15,82 @@ | |||
15 | #define STACK_SIZE 1024 * 1024 | 15 | #define STACK_SIZE 1024 * 1024 |
16 | 16 | ||
17 | static int usage() { | 17 | static int usage() { |
18 | fprintf(stderr, "Usage: namespaces <system call>[clone,unshare] <list of namespaces>[cgroup,ipc,mnt,net,pid,time,user,uts]\n"); | 18 | fprintf(stderr, "Usage: namespaces <system call>[clone,unshare] <list of namespaces>[cgroup,ipc,mnt,net,pid,time,user,uts]\n"); |
19 | exit(1); | 19 | exit(1); |
20 | } | 20 | } |
21 | 21 | ||
22 | static void die(const char *msg) { | 22 | static void die(const char *msg) { |
23 | fprintf(stderr, "Error: %s: %s\n", msg, strerror(errno)); | 23 | fprintf(stderr, "Error: %s: %s\n", msg, strerror(errno)); |
24 | exit(1); | 24 | exit(1); |
25 | } | 25 | } |
26 | 26 | ||
27 | static int ns_flags(const char *list) { | 27 | static int ns_flags(const char *list) { |
28 | int flags = 0; | 28 | int flags = 0; |
29 | 29 | ||
30 | char *dup = strdup(list); | 30 | char *dup = strdup(list); |
31 | if (!dup) | 31 | if (!dup) |
32 | die("cannot allocate memory"); | 32 | die("cannot allocate memory"); |
33 | 33 | ||
34 | char *token = strtok(dup, ","); | 34 | char *token = strtok(dup, ","); |
35 | while (token) { | 35 | while (token) { |
36 | if (strcmp(token, "cgroup") == 0) | 36 | if (strcmp(token, "cgroup") == 0) |
37 | flags |= CLONE_NEWCGROUP; | 37 | flags |= CLONE_NEWCGROUP; |
38 | else if (strcmp(token, "ipc") == 0) | 38 | else if (strcmp(token, "ipc") == 0) |
39 | flags |= CLONE_NEWIPC; | 39 | flags |= CLONE_NEWIPC; |
40 | else if (strcmp(token, "net") == 0) | 40 | else if (strcmp(token, "net") == 0) |
41 | flags |= CLONE_NEWNET; | 41 | flags |= CLONE_NEWNET; |
42 | else if (strcmp(token, "mnt") == 0) | 42 | else if (strcmp(token, "mnt") == 0) |
43 | flags |= CLONE_NEWNS; | 43 | flags |= CLONE_NEWNS; |
44 | else if (strcmp(token, "pid") == 0) | 44 | else if (strcmp(token, "pid") == 0) |
45 | flags |= CLONE_NEWPID; | 45 | flags |= CLONE_NEWPID; |
46 | else if (strcmp(token, "time") == 0) | 46 | else if (strcmp(token, "time") == 0) |
47 | flags |= CLONE_NEWTIME; | 47 | flags |= CLONE_NEWTIME; |
48 | else if (strcmp(token, "user") == 0) | 48 | else if (strcmp(token, "user") == 0) |
49 | flags |= CLONE_NEWUSER; | 49 | flags |= CLONE_NEWUSER; |
50 | else if (strcmp(token, "uts") == 0) | 50 | else if (strcmp(token, "uts") == 0) |
51 | flags |= CLONE_NEWUTS; | 51 | flags |= CLONE_NEWUTS; |
52 | else | 52 | else |
53 | usage(); | 53 | usage(); |
54 | 54 | ||
55 | token = strtok(NULL, ","); | 55 | token = strtok(NULL, ","); |
56 | } | 56 | } |
57 | 57 | ||
58 | free(dup); | 58 | free(dup); |
59 | return flags; | 59 | return flags; |
60 | } | 60 | } |
61 | 61 | ||
62 | static int child(void *arg) { | 62 | static int child(void *arg) { |
63 | (void) arg; | 63 | (void) arg; |
64 | 64 | ||
65 | fprintf(stderr, "clone successful\n"); | 65 | fprintf(stderr, "clone successful\n"); |
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
68 | 68 | ||
69 | int main (int argc, char **argv) { | 69 | int main (int argc, char **argv) { |
70 | if (argc != 3) | 70 | if (argc != 3) |
71 | usage(); | 71 | usage(); |
72 | 72 | ||
73 | int flags = ns_flags(argv[2]); | 73 | int flags = ns_flags(argv[2]); |
74 | if (getuid() != 0) | 74 | if (getuid() != 0) |
75 | flags |= CLONE_NEWUSER; | 75 | flags |= CLONE_NEWUSER; |
76 | 76 | ||
77 | if (strcmp(argv[1], "clone") == 0) { | 77 | if (strcmp(argv[1], "clone") == 0) { |
78 | void *stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE, | 78 | void *stack = mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE, |
79 | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | 79 | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); |
80 | if (stack == MAP_FAILED) | 80 | if (stack == MAP_FAILED) |
81 | die("mmap"); | 81 | die("mmap"); |
82 | 82 | ||
83 | if (clone(child, stack + STACK_SIZE, flags | SIGCHLD, NULL) < 0) | 83 | if (clone(child, stack + STACK_SIZE, flags | SIGCHLD, NULL) < 0) |
84 | die("clone"); | 84 | die("clone"); |
85 | } | 85 | } |
86 | else if (strcmp(argv[1], "unshare") == 0) { | 86 | else if (strcmp(argv[1], "unshare") == 0) { |
87 | if (unshare(flags)) | 87 | if (unshare(flags)) |
88 | die("unshare"); | 88 | die("unshare"); |
89 | 89 | ||
90 | fprintf(stderr, "unshare successful\n"); | 90 | fprintf(stderr, "unshare successful\n"); |
91 | } | 91 | } |
92 | else | 92 | else |
93 | usage(); | 93 | usage(); |
94 | 94 | ||
95 | return 0; | 95 | return 0; |
96 | } | 96 | } |