2d4d15040014e6fbdd4e66c77fcd87b2534a3d8f
Stefan Schuermans move most sources into libp...

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp   1) #include <permissioner/Permissions.h>
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp     2) 
Stefan Schuermans implement chown/chmod

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp   3) #include <boost/filesystem.hpp>
Stefan Schuermans user/group lookup

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp   4) #include <sstream>
libpermissioner/src/Permissions.cpp   5) #include <stdexcept>
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp     6) #include <string>
permissionerd/src/Permissions.cpp     7) 
permissionerd/src/Permissions.cpp     8) void Permissions::parseParams(std::string const &paramStr) {
Stefan Schuermans permission parsing

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp     9)   // reset permission flags
permissionerd/src/Permissions.cpp    10)   set = 0;
permissionerd/src/Permissions.cpp    11)   setCond = 0;
permissionerd/src/Permissions.cpp    12)   clear = 0;
permissionerd/src/Permissions.cpp    13)   clearCond = 0;
permissionerd/src/Permissions.cpp    14)   // parse comma-separated groups of [ugoa][+-][rwxX] settings
permissionerd/src/Permissions.cpp    15)   Flags who = 0, what = 0, whatCond = 0;
permissionerd/src/Permissions.cpp    16)   char action = ' ';
permissionerd/src/Permissions.cpp    17)   // append comma at end to process last group
permissionerd/src/Permissions.cpp    18)   for (char c : paramStr + ",") {
permissionerd/src/Permissions.cpp    19)     switch (c) {
permissionerd/src/Permissions.cpp    20)     case ',':
permissionerd/src/Permissions.cpp    21)       switch (action) {
permissionerd/src/Permissions.cpp    22)         case '=':
permissionerd/src/Permissions.cpp    23)           set = who * what;
permissionerd/src/Permissions.cpp    24)           setCond = who * whatCond;
permissionerd/src/Permissions.cpp    25)           clear = who * (what ^ (flagRead | flagWrite | flagExecute));
Stefan Schuermans complete config text, fix c...

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp  26)           clearCond = 0;
Stefan Schuermans permission parsing

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp    27)           break;
permissionerd/src/Permissions.cpp    28)         case '+':
permissionerd/src/Permissions.cpp    29)           set = who * what;
permissionerd/src/Permissions.cpp    30)           setCond = who * whatCond;
permissionerd/src/Permissions.cpp    31)           break;
permissionerd/src/Permissions.cpp    32)         case '-':
permissionerd/src/Permissions.cpp    33)           clear = who * what;
permissionerd/src/Permissions.cpp    34)           clearCond = who * whatCond;
permissionerd/src/Permissions.cpp    35)           break;
permissionerd/src/Permissions.cpp    36)       }
permissionerd/src/Permissions.cpp    37)       who = 0;
permissionerd/src/Permissions.cpp    38)       what = 0;
permissionerd/src/Permissions.cpp    39)       whatCond = 0;
permissionerd/src/Permissions.cpp    40)       action = ' ';
permissionerd/src/Permissions.cpp    41)       break;
permissionerd/src/Permissions.cpp    42)     case 'u':
permissionerd/src/Permissions.cpp    43)       who |= flagUser;
permissionerd/src/Permissions.cpp    44)       break;
permissionerd/src/Permissions.cpp    45)     case 'g':
permissionerd/src/Permissions.cpp    46)       who |= flagGroup;
permissionerd/src/Permissions.cpp    47)       break;
permissionerd/src/Permissions.cpp    48)     case 'o':
permissionerd/src/Permissions.cpp    49)       who |= flagOther;
permissionerd/src/Permissions.cpp    50)       break;
permissionerd/src/Permissions.cpp    51)     case 'a':
permissionerd/src/Permissions.cpp    52)       who |= flagUser | flagGroup | flagOther;
permissionerd/src/Permissions.cpp    53)       break;
permissionerd/src/Permissions.cpp    54)     case '=':
permissionerd/src/Permissions.cpp    55)     case '+':
permissionerd/src/Permissions.cpp    56)     case '-':
permissionerd/src/Permissions.cpp    57)       action = c;
permissionerd/src/Permissions.cpp    58)       break;
permissionerd/src/Permissions.cpp    59)     case 'r':
permissionerd/src/Permissions.cpp    60)       what |= flagRead;
permissionerd/src/Permissions.cpp    61)       break;
permissionerd/src/Permissions.cpp    62)     case 'w':
permissionerd/src/Permissions.cpp    63)       what |= flagWrite;
permissionerd/src/Permissions.cpp    64)       break;
permissionerd/src/Permissions.cpp    65)     case 'x':
permissionerd/src/Permissions.cpp    66)       what |= flagExecute;
permissionerd/src/Permissions.cpp    67)       break;
permissionerd/src/Permissions.cpp    68)     case 'X':
permissionerd/src/Permissions.cpp    69)       whatCond |= flagExecute;
permissionerd/src/Permissions.cpp    70)       break;
Stefan Schuermans user/group lookup

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp  71)     default:
libpermissioner/src/Permissions.cpp  72)       {
libpermissioner/src/Permissions.cpp  73)         std::stringstream msg;
libpermissioner/src/Permissions.cpp  74)         msg << "invalid character \"" << c << "\" in permission string \""
libpermissioner/src/Permissions.cpp  75)             << paramStr << "\"";
libpermissioner/src/Permissions.cpp  76)         throw std::runtime_error(msg.str());
libpermissioner/src/Permissions.cpp  77)       }
Stefan Schuermans permission parsing

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp    78)     }
Stefan Schuermans begin of permissioner confi...

Stefan Schuermans authored 4 years ago

permissionerd/src/Permissions.cpp    79)   }
permissionerd/src/Permissions.cpp    80) }
Stefan Schuermans implement chown/chmod

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp  81) 
libpermissioner/src/Permissions.cpp  82) void Permissions::apply(boost::filesystem::path const &path) const {
libpermissioner/src/Permissions.cpp  83)   // only process regular files and directories (especially no symlinks)
libpermissioner/src/Permissions.cpp  84)   if (! boost::filesystem::is_regular_file(path) &&
libpermissioner/src/Permissions.cpp  85)       ! boost::filesystem::is_directory(path)) {
libpermissioner/src/Permissions.cpp  86)     return;
libpermissioner/src/Permissions.cpp  87)   }
libpermissioner/src/Permissions.cpp  88) 
libpermissioner/src/Permissions.cpp  89)   // get permissions
libpermissioner/src/Permissions.cpp  90)   boost::filesystem::file_status st = boost::filesystem::status(path);
libpermissioner/src/Permissions.cpp  91)   boost::filesystem::perms perms = st.permissions();
libpermissioner/src/Permissions.cpp  92) 
libpermissioner/src/Permissions.cpp  93)   // compute updated permissions
libpermissioner/src/Permissions.cpp  94)   Flags doSet = set, doClear = clear;
libpermissioner/src/Permissions.cpp  95)   if (perms & boost::filesystem::perms::owner_exe) {
libpermissioner/src/Permissions.cpp  96)     doSet |= setCond;
libpermissioner/src/Permissions.cpp  97)     doClear |= clearCond;
libpermissioner/src/Permissions.cpp  98)   }
libpermissioner/src/Permissions.cpp  99)   perms &= boost::filesystem::perms::all_all ^ flags2perms(doClear);
libpermissioner/src/Permissions.cpp 100)   perms |= flags2perms(doSet);
libpermissioner/src/Permissions.cpp 101) 
libpermissioner/src/Permissions.cpp 102)   // set new permissions if they changed
libpermissioner/src/Permissions.cpp 103)   if (perms != st.permissions()) {
libpermissioner/src/Permissions.cpp 104)     boost::filesystem::permissions(path, perms);
libpermissioner/src/Permissions.cpp 105)   }
libpermissioner/src/Permissions.cpp 106) }
libpermissioner/src/Permissions.cpp 107) 
Stefan Schuermans permissions getter methods

Stefan Schuermans authored 4 years ago

libpermissioner/src/Permissions.cpp 108) Permissions::Flags Permissions::getSet() const {
libpermissioner/src/Permissions.cpp 109)   return set;
libpermissioner/src/Permissions.cpp 110) }
libpermissioner/src/Permissions.cpp 111) 
libpermissioner/src/Permissions.cpp 112) Permissions::Flags Permissions::getSetCond() const {
libpermissioner/src/Permissions.cpp 113)   return setCond;
libpermissioner/src/Permissions.cpp 114) }
libpermissioner/src/Permissions.cpp 115) 
libpermissioner/src/Permissions.cpp 116) Permissions::Flags Permissions::getClear() const {
libpermissioner/src/Permissions.cpp 117)   return clear;
libpermissioner/src/Permissions.cpp 118) }
libpermissioner/src/Permissions.cpp 119) 
libpermissioner/src/Permissions.cpp 120) Permissions::Flags Permissions::getClearCond() const {
libpermissioner/src/Permissions.cpp 121)   return clearCond;
libpermissioner/src/Permissions.cpp 122) }
libpermissioner/src/Permissions.cpp 123)