permission parsing
Stefan Schuermans authored 4 years ago
|
6) // reset permission flags
7) set = 0;
8) setCond = 0;
9) clear = 0;
10) clearCond = 0;
11) // parse comma-separated groups of [ugoa][+-][rwxX] settings
12) Flags who = 0, what = 0, whatCond = 0;
13) char action = ' ';
14) // append comma at end to process last group
15) for (char c : paramStr + ",") {
16) switch (c) {
17) case ',':
18) switch (action) {
19) case '=':
20) set = who * what;
21) setCond = who * whatCond;
22) clear = who * (what ^ (flagRead | flagWrite | flagExecute));
23) clearCond = who * (what ^ flagExecute);
24) break;
25) case '+':
26) set = who * what;
27) setCond = who * whatCond;
28) break;
29) case '-':
30) clear = who * what;
31) clearCond = who * whatCond;
32) break;
33) }
34) who = 0;
35) what = 0;
36) whatCond = 0;
37) action = ' ';
38) break;
39) case 'u':
40) who |= flagUser;
41) break;
42) case 'g':
43) who |= flagGroup;
44) break;
45) case 'o':
46) who |= flagOther;
47) break;
48) case 'a':
49) who |= flagUser | flagGroup | flagOther;
50) break;
51) case '=':
52) case '+':
53) case '-':
54) action = c;
55) break;
56) case 'r':
57) what |= flagRead;
58) break;
59) case 'w':
60) what |= flagWrite;
61) break;
62) case 'x':
63) what |= flagExecute;
64) break;
65) case 'X':
66) whatCond |= flagExecute;
67) break;
68) }
|