forked from pool/xorg-x11-server
106 lines
3.4 KiB
Diff
106 lines
3.4 KiB
Diff
|
Index: xorg-server-1.6.3/hw/xfree86/os-support/linux/lnx_init.c
|
||
|
===================================================================
|
||
|
--- xorg-server-1.6.3.orig/hw/xfree86/os-support/linux/lnx_init.c
|
||
|
+++ xorg-server-1.6.3/hw/xfree86/os-support/linux/lnx_init.c
|
||
|
@@ -49,6 +49,7 @@ static Bool KeepTty = FALSE;
|
||
|
static int VTnum = -1;
|
||
|
static Bool VTSwitch = TRUE;
|
||
|
static Bool ShareVTs = FALSE;
|
||
|
+Bool NoHwAccess = FALSE;
|
||
|
static int activeVT = -1;
|
||
|
|
||
|
static int vtPermSave[4];
|
||
|
@@ -80,9 +81,11 @@ saveVtPerms(void)
|
||
|
static void
|
||
|
restoreVtPerms(void)
|
||
|
{
|
||
|
- /* Set the terminal permissions back to before we started. */
|
||
|
- chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
|
||
|
- chown(vtname, vtPermSave[2], vtPermSave[3]);
|
||
|
+ if (geteuid() == 0) {
|
||
|
+ /* Set the terminal permissions back to before we started. */
|
||
|
+ (void)chown("/dev/tty0", vtPermSave[0], vtPermSave[1]);
|
||
|
+ (void)chown(vtname, vtPermSave[2], vtPermSave[3]);
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
static void *console_handler;
|
||
|
@@ -210,20 +213,22 @@ xf86OpenConsole(void)
|
||
|
xf86Msg(X_WARNING,
|
||
|
"xf86OpenConsole: Could not save ownership of VT\n");
|
||
|
|
||
|
- /* change ownership of the vt */
|
||
|
- if (chown(vtname, getuid(), getgid()) < 0)
|
||
|
- xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
|
||
|
- vtname, strerror(errno));
|
||
|
-
|
||
|
- /*
|
||
|
- * the current VT device we're running on is not "console", we want
|
||
|
- * to grab all consoles too
|
||
|
- *
|
||
|
- * Why is this needed??
|
||
|
- */
|
||
|
- if (chown("/dev/tty0", getuid(), getgid()) < 0)
|
||
|
- xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
|
||
|
- strerror(errno));
|
||
|
+ if (geteuid() == 0) {
|
||
|
+ /* change ownership of the vt */
|
||
|
+ if (chown(vtname, getuid(), getgid()) < 0)
|
||
|
+ xf86Msg(X_WARNING,"xf86OpenConsole: chown %s failed: %s\n",
|
||
|
+ vtname, strerror(errno));
|
||
|
+
|
||
|
+ /*
|
||
|
+ * the current VT device we're running on is not
|
||
|
+ * "console", we want to grab all consoles too
|
||
|
+ *
|
||
|
+ * Why is this needed??
|
||
|
+ */
|
||
|
+ if (chown("/dev/tty0", getuid(), getgid()) < 0)
|
||
|
+ xf86Msg(X_WARNING,"xf86OpenConsole: chown /dev/tty0 failed: %s\n",
|
||
|
+ strerror(errno));
|
||
|
+ }
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
@@ -434,6 +439,11 @@ xf86ProcessArgument(int argc, char *argv
|
||
|
ShareVTs = TRUE;
|
||
|
return(1);
|
||
|
}
|
||
|
+ if (!strcmp(argv[i], "-nohwaccess"))
|
||
|
+ {
|
||
|
+ NoHwAccess = TRUE;
|
||
|
+ return(1);
|
||
|
+ }
|
||
|
if ((argv[i][0] == 'v') && (argv[i][1] == 't'))
|
||
|
{
|
||
|
if (sscanf(argv[i], "vt%2d", &VTnum) == 0)
|
||
|
@@ -455,5 +465,6 @@ xf86UseMsg()
|
||
|
ErrorF("don't detach controlling tty (for debugging only)\n");
|
||
|
ErrorF("-novtswitch don't immediately switch to new VT\n");
|
||
|
ErrorF("-sharevts share VTs with another X server\n");
|
||
|
+ ErrorF("-nohwaccess don't access hardware ports directly\n");
|
||
|
return;
|
||
|
}
|
||
|
Index: xorg-server-1.6.3/hw/xfree86/os-support/linux/lnx_video.c
|
||
|
===================================================================
|
||
|
--- xorg-server-1.6.3.orig/hw/xfree86/os-support/linux/lnx_video.c
|
||
|
+++ xorg-server-1.6.3/hw/xfree86/os-support/linux/lnx_video.c
|
||
|
@@ -51,6 +51,7 @@
|
||
|
#define MAP_FAILED ((void *)-1)
|
||
|
#endif
|
||
|
|
||
|
+extern Bool NoHwAccess;
|
||
|
static Bool ExtendedEnabled = FALSE;
|
||
|
|
||
|
#ifdef __ia64__
|
||
|
@@ -509,6 +510,9 @@ xf86EnableIO(void)
|
||
|
int fd;
|
||
|
unsigned int ioBase_phys;
|
||
|
#endif
|
||
|
+ /* Fake it... */
|
||
|
+ if (NoHwAccess)
|
||
|
+ return TRUE;
|
||
|
|
||
|
if (ExtendedEnabled)
|
||
|
return TRUE;
|