2d4d15040014e6fbdd4e66c77fcd87b2534a3d8f
Stefan Schuermans user/group lookup

Stefan Schuermans authored 4 years ago

1) #include <permissioner/Group.h>
2) 
3) #include <boost/optional.hpp>
4) #include <cerrno>
5) #include <cstring>
6) #include <grp.h>
7) #include <sstream>
8) #include <stdexcept>
9) #include <string>
10) #include <sys/types.h>
11) #include <unistd.h>
12) 
13) void Group::parseGroupName(std::string const &groupNameStr) {
14)   if (groupNameStr == "-") {
15)     groupName = boost::none;
16)     gid = -1;
17)     return;
18)   }
19) 
20)   long size_max = sysconf(_SC_GETGR_R_SIZE_MAX);
21)   if (size_max <= 0) {
22)     std::stringstream msg;
23)     msg << "invalid maximum size of group entry structure " << size_max;
24)     throw std::runtime_error(msg.str());
25)   }
26) 
27)   struct group gr_buf, *gr;
28)   char buf[size_max];
29)   if (getgrnam_r(groupNameStr.c_str(), &gr_buf, buf, sizeof(buf), &gr) != 0) {
30)     std::string err(strerror(errno));
31)     std::stringstream msg;
32)     msg << "looking up group name \"" << groupNameStr << "\" failed: " << err;
33)     throw std::runtime_error(msg.str());
34)   }
35)   if (! gr) {
36)     std::stringstream msg;
37)     msg << "group name \"" << groupNameStr << "\" not found";
38)     throw std::runtime_error(msg.str());
39)   }
40) 
Stefan Schuermans complete config text, fix c...

Stefan Schuermans authored 4 years ago

41)   groupName = gr->gr_name;