/**
* Permissioner: set file ownerships and permissions
* Copyright 2020: Stefan Schuermans, Aachen, Germany <stefan@schuermans.info>
* Copyleft: GNU GENERAL PUBLIC LICENSE version 3 (see LICENSE)
*/
#include <permissioner/Permissions.h>
#include <boost/filesystem.hpp>
#include <sstream>
#include <stdexcept>
#include <string>
void Permissions::parseParams(std::string const ¶mStr) {
// reset permission flags
set = 0;
setCond = 0;
clear = 0;
clearCond = 0;
// parse comma-separated groups of [ugoa][+-][rwxX] settings
Flags who = 0, what = 0, whatCond = 0;
char action = ' ';
// append comma at end to process last group
for (char c : paramStr + ",") {
switch (c) {
case ',':
switch (action) {
case '=':
set = who * what;
setCond = who * whatCond;
clear = who * (what ^ (flagRead | flagWrite | flagExecute));
clearCond = 0;
break;
case '+':
set = who * what;
setCond = who * whatCond;
break;
case '-':
clear = who * what;
clearCond = who * whatCond;
break;
}
who = 0;
what = 0;
whatCond = 0;
action = ' ';
break;
case 'u':
who |= flagUser;
break;
case 'g':