94356db8ac94f5a1c9acae3496eadcb4cc7b34b0
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

1) #include "Permissions.h"
2) 
3) #include <string>
4) 
5) void Permissions::parseParams(std::string const &paramStr) {
Stefan Schuermans 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)     }