12#ifndef OPENVPN_COMMON_USERGROUP_H
13#define OPENVPN_COMMON_USERGROUP_H
25#ifdef OPENVPN_PLATFORM_LINUX
71 const std::string &
user()
const
76 const std::string &
group()
const
96 void chown(
const std::string &fn)
const
103 const int eno = errno;
109 void chown(
const int fd,
const std::string &title)
const
113 const int status = ::fchown(fd,
uid(),
gid());
116 const int eno = errno;
164 if (::setgid(
gr->gr_gid))
166 const int eno = errno;
170 gr_list[0] =
gr->gr_gid;
171 if (::setgroups(1, gr_list))
173 const int eno = errno;
184 if (::setuid(
pw->pw_uid))
186 const int eno = errno;
195#ifdef OPENVPN_PLATFORM_LINUX
199 if (::prctl(PR_SET_DUMPABLE, 1))
201 const int eno = errno;
virtual void post_thread() const
void chown(const int fd, const std::string &title) const
SetUserGroup(const char *user, const char *group, const bool strict)
virtual void pre_thread() const
void chown(const std::string &fn) const
void do_setgid_setgroups() const
const std::string & user() const
virtual ~SetUserGroup()=default
SetUserGroup(const std::string &user, const std::string &group, const bool strict)
OPENVPN_EXCEPTION(user_group_err)
const std::string & group() const
void retain_core_dumps() const
virtual void activate() const
#define OPENVPN_THROW(exc, stuff)
#define OPENVPN_LOG(args)
std::string strerror_str(const int errnum)