if (result == nullptr && ret == 0)
ret = ENOENT;
- if (ret != 0)
+ if (ret != 0) {
+ LogError("Cannot map group " + groupName + " to gid");
throw std::system_error(ret, std::system_category(), "getgrnam_r() failed");
+ }
break;
}
vgroups.push_back(result->gr_gid);
// create privilege -> gids mapping & gather all privilege related gids
for (auto &group_priv : group_privs) {
- gid_t g = g2g.get(group_priv.first);
- LogDebug("group " << group_priv.first << "(" << g << ") privilege " << group_priv.second);
- m_gids.push_back(g);
- m_privileges.push_back(group_priv.second);
- m_priv2gids[group_priv.second].push_back(g);
+ try {
+ gid_t g = g2g.get(group_priv.first);
+ LogDebug("group " << group_priv.first << "(" << g << ") privilege " << group_priv.second);
+ m_gids.push_back(g);
+ m_privileges.push_back(group_priv.second);
+ m_priv2gids[group_priv.second].push_back(g);
+ } catch (...) {
+ LogError("Cannot map required group " + group_priv.first
+ + " for privilege " + group_priv.second
+ + " ; check if the group is configured in your system");
+ throw;
+ }
}
// remove duplicates