Open Lighting Architecture  Latest Git
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Credentials.h
Go to the documentation of this file.
1 /*
2  * This library is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU Lesser General Public
4  * License as published by the Free Software Foundation; either
5  * version 2.1 of the License, or (at your option) any later version.
6  *
7  * This library is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10  * Lesser General Public License for more details.
11  *
12  * You should have received a copy of the GNU Lesser General Public
13  * License along with this library; if not, write to the Free Software
14  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15  *
16  * Credentials.h
17  * Handle getting and setting a process's credentials.
18  * Copyright (C) 2012 Simon Newton
19  */
20 
33 #ifndef INCLUDE_OLA_BASE_CREDENTIALS_H_
34 #define INCLUDE_OLA_BASE_CREDENTIALS_H_
35 
36 #include <unistd.h>
37 #include <string>
38 
39 #ifdef _WIN32
40 #ifndef uid_t
41 #define uid_t int
42 #endif // uid_t
43 #ifndef gid_t
44 #define gid_t int
45 #endif // gid_t
46 #endif // _WIN32
47 
48 namespace ola {
49 
55 // These functions wrap their POSIX counterparts.
56 
66 bool SupportsUIDs();
67 
73 bool GetUID(uid_t* uid);
74 
80 bool GetEUID(uid_t* euid);
81 
89 bool SetUID(uid_t new_uid);
90 
103 bool GetGID(gid_t* gid);
104 
110 bool GetEGID(gid_t* egid);
111 
119 bool SetGID(gid_t new_gid);
120 
137 int GetGroups(int size, gid_t list[]);
138 
145 bool SetGroups(size_t size, const gid_t *list);
146 
155 typedef struct {
157  std::string pw_name;
158 
160  std::string pw_passwd; // no passwd for now
161 
163  uid_t pw_uid;
164 
166  gid_t pw_gid;
167 
169  std::string pw_dir;
170 
172  std::string pw_shell;
173 } PasswdEntry;
174 
191 bool GetPasswdName(const std::string &name, PasswdEntry *passwd);
192 
203 bool GetPasswdUID(uid_t uid, PasswdEntry *passwd);
204 
213 typedef struct {
215  std::string gr_name;
220  std::string gr_passwd; // no passwd for now
222  gid_t gr_gid;
223  // vector<string> gr_mem; // no members for now
224 } GroupEntry;
225 
241 bool GetGroupName(const std::string &name, GroupEntry *passwd);
242 
253 bool GetGroupGID(gid_t gid, GroupEntry *passwd);
258 } // namespace ola
259 #endif // INCLUDE_OLA_BASE_CREDENTIALS_H_
bool SupportsUIDs()
Check whether the current platform supports User and Group IDs.
Definition: Credentials.cpp:53
gid_t gr_gid
Group ID.
Definition: Credentials.h:222
bool SetGID(gid_t new_gid)
Set the effective Group ID of the process.
Definition: Credentials.cpp:135
bool GetEUID(uid_t *euid)
Get the effective UID of the process.
Definition: Credentials.cpp:76
int GetGroups(int size, gid_t list[])
Get the supplementary group ID's of the process.
Definition: Credentials.cpp:148
std::string pw_passwd
Unused currently.
Definition: Credentials.h:160
bool GetEGID(gid_t *egid)
Get the effective group ID.
Definition: Credentials.cpp:106
bool SetGroups(size_t size, const gid_t *list)
Set the supplementary group ID's of the process.
Definition: Credentials.cpp:158
bool GetPasswdUID(uid_t uid, PasswdEntry *passwd)
Lookup a user account by UID.
Definition: Credentials.cpp:258
std::string gr_name
name of the group
Definition: Credentials.h:215
uid_t pw_uid
real User ID
Definition: Credentials.h:163
std::string gr_passwd
password for the group
Definition: Credentials.h:220
Contains information about a group.
Definition: Credentials.h:213
std::string pw_name
name of the user
Definition: Credentials.h:157
bool GetGID(gid_t *gid)
Get the real Group ID.
Definition: Credentials.cpp:91
bool GetUID(uid_t *uid)
Get the real UID of the process.
Definition: Credentials.cpp:61
gid_t pw_gid
real Group ID
Definition: Credentials.h:166
std::string pw_shell
user's shell program
Definition: Credentials.h:172
bool SetUID(uid_t new_uid)
Set the effective UID of the process.
Definition: Credentials.cpp:121
The namespace containing all OLA symbols.
Definition: Credentials.cpp:44
bool GetPasswdName(const string &name, PasswdEntry *passwd)
Lookup a user account by username.
Definition: Credentials.cpp:243
Contains information about a user.
Definition: Credentials.h:155
std::string pw_dir
user's home directory
Definition: Credentials.h:169
bool GetGroupName(const string &name, GroupEntry *group_entry)
Lookup a group account by name.
Definition: Credentials.cpp:336
bool GetGroupGID(gid_t gid, GroupEntry *group_entry)
Lookup a group account by GID.
Definition: Credentials.cpp:351