add copyright & license
Stefan Schuermans authored 4 years ago
|
1) /**
2) * Permissioner: set file ownerships and permissions
3) * Copyright 2020: Stefan Schuermans, Aachen, Germany <stefan@schuermans.info>
4) * Copyleft: GNU GENERAL PUBLIC LICENSE version 3 (see LICENSE)
5) */
6)
|
user/group lookup
Stefan Schuermans authored 4 years ago
|
7) #include <permissioner/Group.h>
8)
9) #include <boost/optional.hpp>
10) #include <cerrno>
11) #include <cstring>
12) #include <grp.h>
13) #include <sstream>
14) #include <stdexcept>
15) #include <string>
16) #include <sys/types.h>
17) #include <unistd.h>
18)
19) void Group::parseGroupName(std::string const &groupNameStr) {
20) if (groupNameStr == "-") {
21) groupName = boost::none;
22) gid = -1;
23) return;
24) }
25)
26) long size_max = sysconf(_SC_GETGR_R_SIZE_MAX);
27) if (size_max <= 0) {
28) std::stringstream msg;
29) msg << "invalid maximum size of group entry structure " << size_max;
30) throw std::runtime_error(msg.str());
31) }
32)
33) struct group gr_buf, *gr;
34) char buf[size_max];
35) if (getgrnam_r(groupNameStr.c_str(), &gr_buf, buf, sizeof(buf), &gr) != 0) {
36) std::string err(strerror(errno));
37) std::stringstream msg;
38) msg << "looking up group name \"" << groupNameStr << "\" failed: " << err;
39) throw std::runtime_error(msg.str());
40) }
41) if (! gr) {
42) std::stringstream msg;
43) msg << "group name \"" << groupNameStr << "\" not found";
44) throw std::runtime_error(msg.str());
45) }
46)
|