Stefan Schuermans
finish tree traversal test
Stefan Schuermans commited 58d3413 at 2020-08-24 20:04:04
#include <permissioner/Config.h>
#include <cstdlib>
#include <grp.h>
#include <iomanip>
#include <iostream>
#include <pwd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <vector>
struct LogLchown {
std::string pathname;
uid_t owner;
gid_t group;
};
std::vector<LogLchown> logs_lchown;
// mock version of lchown, to see if right files get right owners
extern "C" int lchown(const char *pathname, uid_t owner, gid_t group) {
logs_lchown.emplace_back(LogLchown { pathname, owner, group });
return 0;
}
bool check_lchown(unsigned int idx, std::string const &path_suffix,
uid_t owner, gid_t group) {
bool ret = true;
if (idx > logs_lchown.size()) {
std::cerr << "no such lchown call #" << idx << std::endl;
return false;
}
LogLchown const & log_lchown = logs_lchown.at(idx);
std::string pn = log_lchown.pathname;
if (pn.length() < path_suffix.length() ||
pn.substr(pn.length() - path_suffix.length()) != path_suffix) {
std::cerr << "lchown call #" << idx << ": unexpcted path \""
<< pn << "\" != ...\"" << path_suffix << "\"" << std::endl;
ret = false;
}
if (log_lchown.owner != owner) {
std::cerr << "lchown call #" << idx << ": unexpected owner "
<< log_lchown.owner << " != " << owner << std::endl;
ret = false;
}
if (log_lchown.group != group) {
std::cerr << "lchown call #" << idx << ": unexpected group "
<< log_lchown.group << " != " << group << std::endl;
ret = false;
}
return ret;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX