355a11314d16d31e243965227820735062b2a680
Stefan Schuermans 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) 
Stefan Schuermans 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) 
Stefan Schuermans complete config text, fix c...

Stefan Schuermans authored 4 years ago

47)   groupName = gr->gr_name;