user: use setresuid32 where available first (on some 32bit platforms:
This commit is contained in:
parent
411955c5ae
commit
fb018c2596
44
user.c
44
user.c
@ -40,6 +40,38 @@
|
|||||||
#include "subproc.h"
|
#include "subproc.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
static bool userSetResGid(gid_t gid)
|
||||||
|
{
|
||||||
|
LOG_D("setresgid(%d)", gid);
|
||||||
|
#if defined(__NR_setresgid32)
|
||||||
|
if (syscall(__NR_setresgid32, (uintptr_t)gid, (uintptr_t)gid, (uintptr_t)gid) == -1 && errno != ENOSYS) {
|
||||||
|
PLOG_W("setresgid32(%d)", (int)gid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (syscall(__NR_setresgid, (uintptr_t)gid, (uintptr_t)gid, (uintptr_t)gid) == -1) {
|
||||||
|
PLOG_W("setresgid(%d)", gid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool userSetResUid(uid_t uid)
|
||||||
|
{
|
||||||
|
LOG_D("setresuid(%d)", uid);
|
||||||
|
#if defined(__NR_setresuid32)
|
||||||
|
if (syscall(__NR_setresuid32, (uintptr_t)uid, (uintptr_t)uid, (uintptr_t)uid) == -1 && errno != ENOSYS) {
|
||||||
|
PLOG_W("setresuid32(%d)", (int)uid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (syscall(__NR_setresuid, (uintptr_t)uid, (uintptr_t)uid, (uintptr_t)uid) == -1) {
|
||||||
|
PLOG_W("setresuid(%d)", uid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool userSetGroups(pid_t pid)
|
static bool userSetGroups(pid_t pid)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -279,19 +311,11 @@ bool userInitNsFromChild(struct nsjconf_t* nsjconf)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D("setresgid(%d, %d, %d)", TAILQ_FIRST(&nsjconf->gids)->inside_id,
|
if (!userSetResGid(TAILQ_FIRST(&nsjconf->gids)->inside_id)) {
|
||||||
TAILQ_FIRST(&nsjconf->gids)->inside_id, TAILQ_FIRST(&nsjconf->gids)->inside_id);
|
|
||||||
if (syscall(__NR_setresgid, TAILQ_FIRST(&nsjconf->gids)->inside_id,
|
|
||||||
TAILQ_FIRST(&nsjconf->gids)->inside_id, TAILQ_FIRST(&nsjconf->gids)->inside_id)
|
|
||||||
== -1) {
|
|
||||||
PLOG_E("setresgid(%u)", TAILQ_FIRST(&nsjconf->gids)->inside_id);
|
PLOG_E("setresgid(%u)", TAILQ_FIRST(&nsjconf->gids)->inside_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LOG_D("setresuid(%d, %d, %d)", TAILQ_FIRST(&nsjconf->uids)->inside_id,
|
if (!userSetResUid(TAILQ_FIRST(&nsjconf->uids)->inside_id)) {
|
||||||
TAILQ_FIRST(&nsjconf->uids)->inside_id, TAILQ_FIRST(&nsjconf->uids)->inside_id);
|
|
||||||
if (syscall(__NR_setresuid, TAILQ_FIRST(&nsjconf->uids)->inside_id,
|
|
||||||
TAILQ_FIRST(&nsjconf->uids)->inside_id, TAILQ_FIRST(&nsjconf->uids)->inside_id)
|
|
||||||
== -1) {
|
|
||||||
PLOG_E("setresuid(%u)", TAILQ_FIRST(&nsjconf->uids)->inside_id);
|
PLOG_E("setresuid(%u)", TAILQ_FIRST(&nsjconf->uids)->inside_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user