提交 903db210 编写于 作者: D Daniel P. Berrange

Remove (nearly) all use of getuid()/getgid()

Most of the usage of getuid()/getgid() is in cases where we are
considering what privileges we have. As such the code should be
using the effective IDs, not real IDs.
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 9b0af092)
上级 ffc828dd
...@@ -133,7 +133,7 @@ static int virConnectAuthGainPolkit(const char *privilege) { ...@@ -133,7 +133,7 @@ static int virConnectAuthGainPolkit(const char *privilege) {
int status; int status;
int ret = -1; int ret = -1;
if (getuid() == 0) if (geteuid() == 0)
return 0; return 0;
cmd = virCommandNewArgList(POLKIT_AUTH, "--obtain", privilege, NULL); cmd = virCommandNewArgList(POLKIT_AUTH, "--obtain", privilege, NULL);
......
...@@ -1167,7 +1167,7 @@ int main(int argc, char **argv) { ...@@ -1167,7 +1167,7 @@ int main(int argc, char **argv) {
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
privileged = getuid() == 0; privileged = geteuid() == 0;
if (setlocale(LC_ALL, "") == NULL || if (setlocale(LC_ALL, "") == NULL ||
bindtextdomain(PACKAGE, LOCALEDIR) == NULL || bindtextdomain(PACKAGE, LOCALEDIR) == NULL ||
......
...@@ -302,7 +302,7 @@ virLockManagerLockDaemonConnect(virLockManagerPtr lock, ...@@ -302,7 +302,7 @@ virLockManagerLockDaemonConnect(virLockManagerPtr lock,
{ {
virNetClientPtr client; virNetClientPtr client;
if (!(client = virLockManagerLockDaemonConnectionNew(getuid() == 0, program))) if (!(client = virLockManagerLockDaemonConnectionNew(geteuid() == 0, program)))
return NULL; return NULL;
if (virLockManagerLockDaemonConnectionRegister(lock, if (virLockManagerLockDaemonConnectionRegister(lock,
...@@ -331,7 +331,7 @@ static int virLockManagerLockDaemonSetupLockspace(const char *path) ...@@ -331,7 +331,7 @@ static int virLockManagerLockDaemonSetupLockspace(const char *path)
memset(&args, 0, sizeof(args)); memset(&args, 0, sizeof(args));
args.path = (char*)path; args.path = (char*)path;
if (!(client = virLockManagerLockDaemonConnectionNew(getuid() == 0, &program))) if (!(client = virLockManagerLockDaemonConnectionNew(geteuid() == 0, &program)))
return -1; return -1;
if (virNetClientProgramCall(program, if (virNetClientProgramCall(program,
......
...@@ -2346,7 +2346,7 @@ int main(int argc, char *argv[]) ...@@ -2346,7 +2346,7 @@ int main(int argc, char *argv[])
goto cleanup; goto cleanup;
} }
if (getuid() != 0) { if (geteuid() != 0) {
fprintf(stderr, "%s: must be run as the 'root' user\n", argv[0]); fprintf(stderr, "%s: must be run as the 'root' user\n", argv[0]);
goto cleanup; goto cleanup;
} }
......
...@@ -2787,8 +2787,8 @@ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid, ...@@ -2787,8 +2787,8 @@ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid,
unsigned int vfoflags = 0; unsigned int vfoflags = 0;
int fd = -1; int fd = -1;
int path_shared = virStorageFileIsSharedFS(path); int path_shared = virStorageFileIsSharedFS(path);
uid_t uid = getuid(); uid_t uid = geteuid();
gid_t gid = getgid(); gid_t gid = getegid();
/* path might be a pre-existing block dev, in which case /* path might be a pre-existing block dev, in which case
* we need to skip the create step, and also avoid unlink * we need to skip the create step, and also avoid unlink
...@@ -2828,7 +2828,7 @@ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid, ...@@ -2828,7 +2828,7 @@ qemuOpenFileAs(uid_t fallback_uid, gid_t fallback_gid,
qemu user is non-root, just set a flag to qemu user is non-root, just set a flag to
bypass security driver shenanigans, and retry the operation bypass security driver shenanigans, and retry the operation
after doing setuid to qemu user */ after doing setuid to qemu user */
if ((fd != -EACCES && fd != -EPERM) || fallback_uid == getuid()) if ((fd != -EACCES && fd != -EPERM) || fallback_uid == geteuid())
goto error; goto error;
/* On Linux we can also verify the FS-type of the directory. */ /* On Linux we can also verify the FS-type of the directory. */
......
...@@ -995,7 +995,7 @@ remoteConnectOpen(virConnectPtr conn, ...@@ -995,7 +995,7 @@ remoteConnectOpen(virConnectPtr conn,
(strstr(conn->uri->scheme, "+unix") != NULL)) && (strstr(conn->uri->scheme, "+unix") != NULL)) &&
(STREQ(conn->uri->path, "/session") || (STREQ(conn->uri->path, "/session") ||
STRPREFIX(conn->uri->scheme, "test+")) && STRPREFIX(conn->uri->scheme, "test+")) &&
getuid() > 0) { geteuid() > 0) {
VIR_DEBUG("Auto-spawn user daemon instance"); VIR_DEBUG("Auto-spawn user daemon instance");
rflags |= VIR_DRV_OPEN_REMOTE_USER; rflags |= VIR_DRV_OPEN_REMOTE_USER;
if (!virIsSUID() && if (!virIsSUID() &&
...@@ -1013,7 +1013,7 @@ remoteConnectOpen(virConnectPtr conn, ...@@ -1013,7 +1013,7 @@ remoteConnectOpen(virConnectPtr conn,
if (!conn->uri) { if (!conn->uri) {
VIR_DEBUG("Auto-probe remote URI"); VIR_DEBUG("Auto-probe remote URI");
#ifndef __sun #ifndef __sun
if (getuid() > 0) { if (geteuid() > 0) {
VIR_DEBUG("Auto-spawn user daemon instance"); VIR_DEBUG("Auto-spawn user daemon instance");
rflags |= VIR_DRV_OPEN_REMOTE_USER; rflags |= VIR_DRV_OPEN_REMOTE_USER;
if (!virIsSUID() && if (!virIsSUID() &&
......
...@@ -527,11 +527,11 @@ virStorageBackendCreateExecCommand(virStoragePoolObjPtr pool, ...@@ -527,11 +527,11 @@ virStorageBackendCreateExecCommand(virStoragePoolObjPtr pool,
bool filecreated = false; bool filecreated = false;
if ((pool->def->type == VIR_STORAGE_POOL_NETFS) if ((pool->def->type == VIR_STORAGE_POOL_NETFS)
&& (((getuid() == 0) && (((geteuid() == 0)
&& (vol->target.perms.uid != (uid_t) -1) && (vol->target.perms.uid != (uid_t) -1)
&& (vol->target.perms.uid != 0)) && (vol->target.perms.uid != 0))
|| ((vol->target.perms.gid != (gid_t) -1) || ((vol->target.perms.gid != (gid_t) -1)
&& (vol->target.perms.gid != getgid())))) { && (vol->target.perms.gid != getegid())))) {
virCommandSetUID(cmd, vol->target.perms.uid); virCommandSetUID(cmd, vol->target.perms.uid);
virCommandSetGID(cmd, vol->target.perms.gid); virCommandSetGID(cmd, vol->target.perms.gid);
......
...@@ -785,9 +785,9 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED, ...@@ -785,9 +785,9 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
/* Reflect the actual uid and gid to the config. */ /* Reflect the actual uid and gid to the config. */
if (pool->def->target.perms.uid == (uid_t) -1) if (pool->def->target.perms.uid == (uid_t) -1)
pool->def->target.perms.uid = getuid(); pool->def->target.perms.uid = geteuid();
if (pool->def->target.perms.gid == (gid_t) -1) if (pool->def->target.perms.gid == (gid_t) -1)
pool->def->target.perms.gid = getgid(); pool->def->target.perms.gid = getegid();
if (flags != 0) { if (flags != 0) {
ret = virStorageBackendMakeFileSystem(pool, flags); ret = virStorageBackendMakeFileSystem(pool, flags);
......
...@@ -718,7 +718,7 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn, ...@@ -718,7 +718,7 @@ virStorageBackendLogicalCreateVol(virConnectPtr conn,
goto error; goto error;
/* We can only chown/grp if root */ /* We can only chown/grp if root */
if (getuid() == 0) { if (geteuid() == 0) {
if (fchown(fd, vol->target.perms.uid, vol->target.perms.gid) < 0) { if (fchown(fd, vol->target.perms.uid, vol->target.perms.gid) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
_("cannot set file owner '%s'"), _("cannot set file owner '%s'"),
......
...@@ -1539,8 +1539,8 @@ virFileAccessibleAs(const char *path, int mode, ...@@ -1539,8 +1539,8 @@ virFileAccessibleAs(const char *path, int mode,
gid_t *groups; gid_t *groups;
int ngroups; int ngroups;
if (uid == getuid() && if (uid == geteuid() &&
gid == getgid()) gid == getegid())
return access(path, mode); return access(path, mode);
ngroups = virGetGroupList(uid, gid, &groups); ngroups = virGetGroupList(uid, gid, &groups);
...@@ -1832,9 +1832,9 @@ virFileOpenAs(const char *path, int openflags, mode_t mode, ...@@ -1832,9 +1832,9 @@ virFileOpenAs(const char *path, int openflags, mode_t mode,
/* allow using -1 to mean "current value" */ /* allow using -1 to mean "current value" */
if (uid == (uid_t) -1) if (uid == (uid_t) -1)
uid = getuid(); uid = geteuid();
if (gid == (gid_t) -1) if (gid == (gid_t) -1)
gid = getgid(); gid = getegid();
/* treat absence of both flags as presence of both for simpler /* treat absence of both flags as presence of both for simpler
* calling. */ * calling. */
...@@ -1842,7 +1842,7 @@ virFileOpenAs(const char *path, int openflags, mode_t mode, ...@@ -1842,7 +1842,7 @@ virFileOpenAs(const char *path, int openflags, mode_t mode,
flags |= VIR_FILE_OPEN_NOFORK|VIR_FILE_OPEN_FORK; flags |= VIR_FILE_OPEN_NOFORK|VIR_FILE_OPEN_FORK;
if ((flags & VIR_FILE_OPEN_NOFORK) if ((flags & VIR_FILE_OPEN_NOFORK)
|| (getuid() != 0) || (geteuid() != 0)
|| ((uid == 0) && (gid == 0))) { || ((uid == 0) && (gid == 0))) {
if ((fd = open(path, openflags, mode)) < 0) { if ((fd = open(path, openflags, mode)) < 0) {
...@@ -1953,12 +1953,12 @@ virDirCreate(const char *path, ...@@ -1953,12 +1953,12 @@ virDirCreate(const char *path,
/* allow using -1 to mean "current value" */ /* allow using -1 to mean "current value" */
if (uid == (uid_t) -1) if (uid == (uid_t) -1)
uid = getuid(); uid = geteuid();
if (gid == (gid_t) -1) if (gid == (gid_t) -1)
gid = getgid(); gid = getegid();
if ((!(flags & VIR_DIR_CREATE_AS_UID)) if ((!(flags & VIR_DIR_CREATE_AS_UID))
|| (getuid() != 0) || (geteuid() != 0)
|| ((uid == 0) && (gid == 0)) || ((uid == 0) && (gid == 0))
|| ((flags & VIR_DIR_CREATE_ALLOW_EXIST) && (stat(path, &st) >= 0))) { || ((flags & VIR_DIR_CREATE_ALLOW_EXIST) && (stat(path, &st) >= 0))) {
return virDirCreateNoFork(path, mode, uid, gid, flags); return virDirCreateNoFork(path, mode, uid, gid, flags);
......
...@@ -157,14 +157,14 @@ virIdentityPtr virIdentityGetSystem(void) ...@@ -157,14 +157,14 @@ virIdentityPtr virIdentityGetSystem(void)
virAsprintf(&processtime, "%llu", timestamp) < 0) virAsprintf(&processtime, "%llu", timestamp) < 0)
goto cleanup; goto cleanup;
if (!(username = virGetUserName(getuid()))) if (!(username = virGetUserName(geteuid())))
goto cleanup; goto cleanup;
if (virAsprintf(&userid, "%d", (int)getuid()) < 0) if (virAsprintf(&userid, "%d", (int)geteuid()) < 0)
goto cleanup; goto cleanup;
if (!(groupname = virGetGroupName(getgid()))) if (!(groupname = virGetGroupName(getegid())))
goto cleanup; goto cleanup;
if (virAsprintf(&groupid, "%d", (int)getgid()) < 0) if (virAsprintf(&groupid, "%d", (int)getegid()) < 0)
goto cleanup; goto cleanup;
#if WITH_SELINUX #if WITH_SELINUX
......
...@@ -572,7 +572,7 @@ virFindBackingFile(const char *start, bool start_is_dir, const char *path, ...@@ -572,7 +572,7 @@ virFindBackingFile(const char *start, bool start_is_dir, const char *path,
goto cleanup; goto cleanup;
} }
if (virFileAccessibleAs(combined, F_OK, getuid(), getgid()) < 0) { if (virFileAccessibleAs(combined, F_OK, geteuid(), getegid()) < 0) {
virReportSystemError(errno, virReportSystemError(errno,
_("Cannot access backing file '%s'"), _("Cannot access backing file '%s'"),
combined); combined);
......
...@@ -153,7 +153,7 @@ static virDrvOpenStatus vboxConnectOpen(virConnectPtr conn, ...@@ -153,7 +153,7 @@ static virDrvOpenStatus vboxConnectOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags) unsigned int flags)
{ {
uid_t uid = getuid(); uid_t uid = geteuid();
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
......
...@@ -999,7 +999,7 @@ static virDrvOpenStatus vboxConnectOpen(virConnectPtr conn, ...@@ -999,7 +999,7 @@ static virDrvOpenStatus vboxConnectOpen(virConnectPtr conn,
unsigned int flags) unsigned int flags)
{ {
vboxGlobalData *data = NULL; vboxGlobalData *data = NULL;
uid_t uid = getuid(); uid_t uid = geteuid();
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
......
...@@ -785,7 +785,7 @@ qemuMonitorCommonTestNew(virDomainXMLOptionPtr xmlopt, ...@@ -785,7 +785,7 @@ qemuMonitorCommonTestNew(virDomainXMLOptionPtr xmlopt,
goto error; goto error;
} }
if (virNetSocketNewListenUNIX(path, 0700, getuid(), getgid(), if (virNetSocketNewListenUNIX(path, 0700, geteuid(), getegid(),
&test->server) < 0) &test->server) < 0)
goto error; goto error;
......
...@@ -220,7 +220,7 @@ static int testSocketUNIXAccept(const void *data ATTRIBUTE_UNUSED) ...@@ -220,7 +220,7 @@ static int testSocketUNIXAccept(const void *data ATTRIBUTE_UNUSED)
if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0) if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0)
goto cleanup; goto cleanup;
if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0) if (virNetSocketNewListenUNIX(path, 0700, -1, getegid(), &lsock) < 0)
goto cleanup; goto cleanup;
if (virNetSocketListen(lsock, 0) < 0) if (virNetSocketListen(lsock, 0) < 0)
...@@ -270,7 +270,7 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED) ...@@ -270,7 +270,7 @@ static int testSocketUNIXAddrs(const void *data ATTRIBUTE_UNUSED)
if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0) if (virAsprintf(&path, "%s/test.sock", tmpdir) < 0)
goto cleanup; goto cleanup;
if (virNetSocketNewListenUNIX(path, 0700, -1, getgid(), &lsock) < 0) if (virNetSocketNewListenUNIX(path, 0700, -1, getegid(), &lsock) < 0)
goto cleanup; goto cleanup;
if (STRNEQ(virNetSocketLocalAddrString(lsock), "127.0.0.1;0")) { if (STRNEQ(virNetSocketLocalAddrString(lsock), "127.0.0.1;0")) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册