mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-27 10:51:24 +00:00
utils: improve lxc_switch_uid_gid()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
b962868f4c
commit
db2d1af171
@ -1353,19 +1353,27 @@ int lxc_preserve_ns(const int pid, const char *ns)
|
|||||||
|
|
||||||
int lxc_switch_uid_gid(uid_t uid, gid_t gid)
|
int lxc_switch_uid_gid(uid_t uid, gid_t gid)
|
||||||
{
|
{
|
||||||
if (setgid(gid) < 0) {
|
int ret = 0;
|
||||||
SYSERROR("Failed to switch to gid %d.", gid);
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
NOTICE("Switched to gid %d.", gid);
|
|
||||||
|
|
||||||
if (setuid(uid) < 0) {
|
if (gid != LXC_INVALID_GID) {
|
||||||
SYSERROR("Failed to switch to uid %d.", uid);
|
ret = setgid(gid);
|
||||||
return -errno;
|
if (ret < 0) {
|
||||||
|
SYSERROR("Failed to switch to gid %d", gid);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
NOTICE("Switched to gid %d", gid);
|
||||||
}
|
}
|
||||||
NOTICE("Switched to uid %d.", uid);
|
|
||||||
|
|
||||||
return 0;
|
if (uid != LXC_INVALID_UID) {
|
||||||
|
ret = setuid(uid);
|
||||||
|
if (ret < 0) {
|
||||||
|
SYSERROR("Failed to switch to uid %d", uid);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
NOTICE("Switched to uid %d", uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Simple covenience function which enables uniform logging. */
|
/* Simple covenience function which enables uniform logging. */
|
||||||
|
@ -358,7 +358,9 @@ extern int lxc_preserve_ns(const int pid, const char *ns);
|
|||||||
/* Check whether a signal is blocked by a process. */
|
/* Check whether a signal is blocked by a process. */
|
||||||
extern bool task_blocks_signal(pid_t pid, int signal);
|
extern bool task_blocks_signal(pid_t pid, int signal);
|
||||||
|
|
||||||
/* Switch to a new uid and gid. */
|
/* Switch to a new uid and gid.
|
||||||
|
* If LXC_INVALID_{G,U}ID is passed then the set{g,u}id() will not be called.
|
||||||
|
*/
|
||||||
extern int lxc_switch_uid_gid(uid_t uid, gid_t gid);
|
extern int lxc_switch_uid_gid(uid_t uid, gid_t gid);
|
||||||
extern int lxc_setgroups(int size, gid_t list[]);
|
extern int lxc_setgroups(int size, gid_t list[]);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user