#include <regex>
#include <memory>
+#include <klay/error.h>
#include <klay/exception.h>
#include <klay/auth/group.h>
Group::Group(const std::string& group)
{
struct group grp, *result;
- int bufsize;
+ int bufsize, ret;
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
if (bufsize == -1)
std::unique_ptr<char[]> buf(new char[bufsize]);
- ::getgrnam_r(group.c_str(), &grp, buf.get(), bufsize, &result);
+ ret = ::getgrnam_r(group.c_str(), &grp, buf.get(), bufsize, &result);
if (result == NULL) {
- throw runtime::Exception("Group doesn't exist");
+ if (ret == 0)
+ throw runtime::Exception("Group doesn't exist");
+ else
+ throw runtime::Exception(runtime::GetSystemErrorMessage(ret));
}
name = result->gr_name;
Group::Group(const gid_t group)
{
struct group grp, *result;
- int bufsize;
+ int bufsize, ret;
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
if (bufsize == -1)
std::unique_ptr<char[]> buf(new char[bufsize]);
- ::getgrgid_r(group, &grp, buf.get(), bufsize, &result);
+ ret = ::getgrgid_r(group, &grp, buf.get(), bufsize, &result);
if (result == NULL) {
- throw runtime::Exception("Group doesn't exist");
+ if (ret == 0)
+ throw runtime::Exception("Group doesn't exist");
+ else
+ throw runtime::Exception(runtime::GetSystemErrorMessage(ret));
}
name = result->gr_name;
#include <regex>
#include <memory>
+#include <klay/error.h>
#include <klay/exception.h>
#include <klay/auth/user.h>
User::User(const std::string& user)
{
struct passwd pwd, *result;
- int bufsize;
+ int bufsize, ret;
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
if (bufsize == -1)
std::unique_ptr<char[]> buf(new char[bufsize]);
- ::getpwnam_r(user.c_str(), &pwd, buf.get(), bufsize, &result);
+ ret = ::getpwnam_r(user.c_str(), &pwd, buf.get(), bufsize, &result);
if (result == NULL) {
- throw runtime::Exception("User " + user + " doesn't exist");
+ if (ret == 0)
+ throw runtime::Exception("User " + user + " doesn't exist");
+ else
+ throw runtime::Exception(runtime::GetSystemErrorMessage(ret));
}
name = result->pw_name;
User::User(const uid_t user)
{
struct passwd pwd, *result;
- int bufsize;
+ int bufsize, ret;
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
if (bufsize == -1)
bufsize = 16384;
std::unique_ptr<char[]> buf(new char[bufsize]);
- ::getpwuid_r(user, &pwd, buf.get(), bufsize, &result);
+ ret = ::getpwuid_r(user, &pwd, buf.get(), bufsize, &result);
if (result == NULL) {
- throw runtime::Exception("User " + std::to_string(user) + "doesn't exist");
+ if (ret == 0)
+ throw runtime::Exception("User " + std::to_string(user) + "doesn't exist");
+ else
+ throw runtime::Exception(runtime::GetSystemErrorMessage(ret));
}
name = result->pw_name;
void Mainloop::stop()
{
- wakeupSignal.send();
+ try {
+ wakeupSignal.send();
+ } catch (std::exception &e) {
+ std::cout << "EXCEPTION ON EVENTFD IN MAINLOOP" << std::endl;
+ }
}
void Mainloop::prepare()