Hello,
what is the status of this?
FWIW I send the patch which prints how privileges are detected.
For me it falls back to seteuid which does not seem to be usable detection.
Thanks
Michal
Index: xserver/hw/xfree86/common/xf86Init.c
===================================================================
--- xserver.orig/hw/xfree86/common/xf86Init.c 2011-10-07 17:08:30.000000000 +0200
+++ xserver/hw/xfree86/common/xf86Init.c 2011-10-07 17:29:29.000000000 +0200
@@ -242,18 +242,26 @@
Bool xf86PrivsElevated(void)
{
if (!privsTested) {
+ fprintf(stderr, "%s: not tested yet.\n", __FUNCTION__);
#if !defined(WIN32)
if ((getuid() != geteuid()) || (getgid() != getegid())) {
+ fprintf(stderr, "%s: elevated: uid %i, euid %i, gid %i, egid %i.\n",
+ __FUNCTION__, getuid(), geteuid(), getgid(), getegid());
privsElevated = TRUE;
} else {
#if defined(HASSETUGID)
privsElevated = issetugid();
+ if (privsElevated)
+ fprintf(stderr, "%s: elevated: %i.\n", __FUNCTION__, issetugid());
#elif defined(HASGETRESUID)
uid_t ruid, euid, suid;
gid_t rgid, egid, sgid;
if ((getresuid(&ruid, &euid, &suid) == 0) &&
(getresgid(&rgid, &egid, &sgid) == 0))
privsElevated = (euid != suid) || (egid != sgid);
+ if (privsElevated)
+ fprintf(stderr, "%s: elevated: ruid %i, euid %i, suid %i, rgid %i, egid %i, sgid %i.\n",
+ __FUNCTION__, ruid, euid, suid, rgid, egid, sgid);
#else
/*
* If there are saved ID's the process might still be priviledged
@@ -266,6 +274,7 @@
if (seteuid(0) != 0) {
privsElevated = FALSE;
} else {
+ fprintf(stderr, "%s: elevated: seteuid(0)\n", __FUNCTION__);
if (seteuid(oldeuid) == -1) {
/* XXX ouch, coudn't get back to original uid
what can we do ??? */
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel