11 #elif !defined(__rtems__) && !defined(vxWorks) 12 # define USE_UNIX_GROUPS 16 #if defined(USE_UNIX_GROUPS) 18 #include <sys/types.h> 34 #elif defined(USE_LANMAN) 43 #define epicsExportSharedSymbols 49 #if defined(USE_UNIX_GROUPS) 53 passwd *user = getpwnam(account.c_str());
57 typedef std::set<gid_t> gids_t;
60 gids.insert(user->pw_gid);
79 std::vector<osi_gid_t> gtemp(16, (
osi_gid_t)-1);
82 int gcount = int(gtemp.size());
83 int ret = getgrouplist(user->pw_name, user->pw_gid, >emp[0], &gcount);
85 if(ret>=0 && gcount>=0 && gcount <=
int(gtemp.size())) {
95 }
else if(gcount ==
int(gtemp.size())) {
98 gtemp.resize(gtemp.size()*2u, (
osi_gid_t)-1);
100 }
else if(gcount >
int(gtemp.size())) {
111 for(
size_t i=0, N=gtemp.size();
i<N;
i++)
112 gids.insert(gtemp[
i]);
116 for(gids_t::iterator it(gids.begin()), end(gids.end()); it!=end; it++) {
117 group* gr = getgrgid(*it);
120 roles.insert(gr->gr_name);
124 #elif defined(USE_LANMAN) 129 LPLOCALGROUP_USERS_INFO_0 pinfo =
NULL;
130 DWORD ninfo = 0, nmaxinfo = 0;
131 std::vector<wchar_t> wbuf;
134 size_t N = mbstowcs(
NULL, account.c_str(), 0);
138 N = mbstowcs(&wbuf[0], account.c_str(), account.size());
144 sts = NetUserGetLocalGroups(
NULL, &wbuf[0], 0,
147 MAX_PREFERRED_LENGTH,
150 if(sts!=NERR_Success)
154 std::vector<char> buf;
156 for(DWORD
i=0;
i<ninfo;
i++) {
157 size_t N = wcstombs(
NULL, pinfo[
i].lgrui0_name, 0);
162 N = wcstombs(&buf[0], pinfo[
i].lgrui0_name, buf.size());
165 roles.insert(&buf[0]);
168 NetApiBufferFree(pinfo);
170 NetApiBufferFree(pinfo);
#define assert(exp)
Declare that a condition should be true.
TODO only here because of the Lockable.
epicsShareFunc void osdGetRoles(const std::string &account, PeerInfo::roles_t &roles)
Query OS specific DB for role/group names assocated with a user account.
std::set< std::string > roles_t