xserver: Branch 'XACE-SELINUX' - 45 commits
Eamon Walsh
ewalsh at kemper.freedesktop.org
Tue Dec 12 20:55:19 EET 2006
GL/glx/indirect_dispatch_swap.c | 2
GL/glx/indirect_program.c | 2
GL/glx/indirect_reqsize.c | 2
GL/glx/indirect_texture_compression.c | 2
GL/glx/indirect_util.c | 2
GL/glx/swap_interval.c | 2
Xext/security.c | 14
Xext/xace.c | 2
Xext/xace.h | 26 +
Xext/xselinux.c | 34 -
composite/compext.c | 5
config/config.c | 241 ++++++++----
configure.ac | 6
cpprules.in | 1
dix/Makefile.am | 2
dix/devices.c | 22 -
dix/dispatch.c | 45 --
dix/dixutils.c | 2
dix/events.c | 53 +-
dix/extension.c | 17
dix/getevents.c | 19
dix/main.c | 6
dix/property.c | 77 +--
dix/resource.c | 8
dix/window.c | 42 --
hw/kdrive/linux/keyboard.c | 3
hw/kdrive/linux/tslib.c | 20 -
hw/kdrive/mga/g400_composite.c | 4
hw/xfree86/Makefile.am | 1
hw/xfree86/common/compiler.h | 4
hw/xfree86/common/xf86.h | 2
hw/xfree86/common/xf86Bus.c | 8
hw/xfree86/common/xf86Bus.h | 2
hw/xfree86/common/xf86Configure.c | 8
hw/xfree86/common/xf86Events.c | 2
hw/xfree86/common/xf86Init.c | 3
hw/xfree86/common/xf86Xinput.c | 51 --
hw/xfree86/ddc/ddcProperty.c | 3
hw/xfree86/ddc/interpret_edid.c | 12
hw/xfree86/dixmods/type1mod.c | 15
hw/xfree86/doc/man/Xorg.man.pre | 2
hw/xfree86/doc/man/xorg.conf.man.pre | 2
hw/xfree86/loader/xf86sym.c | 2
hw/xfree86/os-support/solaris/sun_bell.c | 12
hw/xfree86/scanpci/pci.ids | 85 +++-
hw/xfree86/scanpci/xf86PciStdIds.h | 619 ++++++++++++++++++++++++++++---
hw/xfree86/utils/xorgcfg/loadmod.c | 2
hw/xfree86/xorgconf.cpp | 1
hw/xwin/InitOutput.c | 1
hw/xwin/winmultiwindowwindow.c | 7
include/Makefile.am | 2
os/Makefile.am | 2
os/access.c | 6
os/connection.c | 6
randr/rrcrtc.c | 2
randr/rroutput.c | 2
randr/rrproperty.c | 2
xkb/xkbUtils.c | 14
58 files changed, 1042 insertions(+), 499 deletions(-)
New commits:
diff-tree 62e7722ebd8d341a23eb56cb330eeb00e6a975a6 (from parents)
Merge: e124806994675e16ca8e3937388f2cadeb529fc3 f3c60900e575e65254cd2576cc6c90b97c8f63ae
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Tue Dec 12 13:54:33 2006 -0500
Merge branch 'XACE-SELINUX' into my-XACE-SELINUX
diff-tree e124806994675e16ca8e3937388f2cadeb529fc3 (from ca77c121075a9de1f47d42f6aaf91c20185231de)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Tue Dec 12 13:35:22 2006 -0500
Remove trailing whitespace (whitespace police).
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 8d710f6..1c2b508 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -135,8 +135,8 @@ static char *XSELinuxRootWindowContext =
extern Selection *CurrentSelections;
extern int NumCurrentSelections;
-/*
- * list of classes corresponding to SIDs in the
+/*
+ * list of classes corresponding to SIDs in the
* rsid array of the security state structure (below).
*
* XXX SIDs should be stored in their native objects, not all
@@ -193,7 +193,7 @@ IndexByClass(security_class_t class)
}
/*
- * Does sanity checking on a resource ID. This can be removed after
+ * Does sanity checking on a resource ID. This can be removed after
* testing.
*/
static void
@@ -351,7 +351,7 @@ ObjectSIDByLabel(security_context_t base
con = context_new(base);
if (!con)
goto out2;
-
+
/* look in the mappings of names to types */
ptr = (class == SECCLASS_PROPERTY) ? propertyTypes : extensionTypes;
for (; *ptr; ptr+=2)
@@ -564,14 +564,14 @@ CheckSendEventPerms(ClientPtr client)
swapl(&stuff->destination, n);
return IDPerm(client, stuff->destination, SECCLASS_WINDOW, perm);
}
-
+
static int
CheckConvertSelectionPerms(ClientPtr client)
{
register char n;
int rval = TRUE;
REQUEST(xConvertSelectionReq);
-
+
if (!REQUEST_SIZE_CHECK(client, xConvertSelectionReq))
return FALSE;
@@ -620,11 +620,11 @@ CheckSetSelectionOwnerPerms(ClientPtr cl
rval = rval && IDPerm(client, CurrentSelections[i].window,
SECCLASS_WINDOW, WINDOW__CHSELECTION);
}
- rval = rval && IDPerm(client, stuff->window,
+ rval = rval && IDPerm(client, stuff->window,
SECCLASS_WINDOW, WINDOW__CHSELECTION);
return rval;
}
-
+
CALLBACK(XSELinuxCoreDispatch)
{
XaceCoreDispatchRec *rec = (XaceCoreDispatchRec*)calldata;
@@ -678,7 +678,7 @@ CALLBACK(XSELinuxCoreDispatch)
/* Window class control requirements */
case X_ChangeProperty:
rval = IDPERM(client, xChangePropertyReq, window,
- SECCLASS_WINDOW,
+ SECCLASS_WINDOW,
WINDOW__CHPROPLIST | WINDOW__CHPROP |
WINDOW__LISTPROP);
break;
@@ -914,7 +914,7 @@ CALLBACK(XSELinuxCoreDispatch)
&& IDPERM(client, xPolyTextReq, drawable,
SECCLASS_DRAWABLE, DRAWABLE__DRAW);
break;
-
+
/* Pixmap class control requirements */
case X_CreatePixmap:
rval = IDPERM(client, xCreatePixmapReq, pid,
@@ -950,7 +950,7 @@ CALLBACK(XSELinuxCoreDispatch)
rval = IDPERM(client, xResourceReq, id,
SECCLASS_CURSOR, CURSOR__FREE);
break;
-
+
/* GC class control requirements */
case X_CreateGC:
rval = IDPERM(client, xCreateGCReq, gc,
@@ -1018,7 +1018,7 @@ CALLBACK(XSELinuxExtDispatch)
security_id_t extsid;
access_vector_t perm;
REQUEST(xReq);
-
+
/* XXX there should be a separate callback for this */
if (!EXTENSIONSID(ext))
{
@@ -1215,7 +1215,7 @@ CALLBACK(XSELinuxWindowInit)
rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
PropModeReplace, strlen(ctx), ctx, FALSE);
freecon(ctx);
- }
+ }
else
rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
PropModeReplace, 10, "UNLABELED!", FALSE);
@@ -1441,7 +1441,7 @@ XSELinuxParsePropertyTypeRule(char *p)
newTypes[propertyTypesCount*2 - 2] = propcopy;
newTypes[propertyTypesCount*2 - 1] = typecopy;
-
+
propertyTypes = newTypes;
return TRUE;
@@ -1612,7 +1612,7 @@ XSELinuxLoadConfigFile(void)
int lineNumber = 0;
char **newTypes;
Bool ret = FALSE;
-
+
if (!XSELINUXCONFIGFILE)
return FALSE;
@@ -1837,7 +1837,7 @@ XSELinuxExtensionSetup(INITARGS)
{
/* Allocate the client private index */
clientPrivateIndex = AllocateClientPrivateIndex();
- if (!AllocateClientPrivate(clientPrivateIndex,
+ if (!AllocateClientPrivate(clientPrivateIndex,
sizeof (XSELinuxClientStateRec)))
FatalError("XSELinux: Failed to allocate client private.\n");
diff-tree ca77c121075a9de1f47d42f6aaf91c20185231de (from a60da1db7cced28c07960a713eb18deb45beb432)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Tue Dec 12 13:26:52 2006 -0500
Naming change: Security*Operation -> Xace*Operation
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 2f960d1..8d710f6 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1090,7 +1090,7 @@ CALLBACK(XSELinuxProperty)
{
if (errno != EACCES)
ErrorF("Property: unexpected error %d\n", errno);
- rec->rval = SecurityIgnoreOperation;
+ rec->rval = XaceIgnoreOperation;
}
} else
ErrorF("No client state in property callback!\n");
diff-tree a60da1db7cced28c07960a713eb18deb45beb432 (from 5719afe6d3a246985709e6f045617c1e16a7da51)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Wed Nov 29 22:19:57 2006 -0500
Add required root window context to config file.
diff --git a/Xext/XSELinuxConfig b/Xext/XSELinuxConfig
index faf815e..9c953f5 100644
--- a/Xext/XSELinuxConfig
+++ b/Xext/XSELinuxConfig
@@ -9,6 +9,7 @@
# security policy. Only one nonlocal_context rule may be defined.
#
nonlocal_context system_u:object_r:remote_xclient_t:s1
+root_window_context system_u:object_r:root_window_t:s1
#
# Property rules map a property name to a SELinux type. The type must
diff-tree 5719afe6d3a246985709e6f045617c1e16a7da51 (from 354c80da66af141e8ba6d75fed75a0f482987956)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Thu Oct 26 20:20:57 2006 -0400
Change symbol in libaudit library test.
diff --git a/configure.ac b/configure.ac
index 7e931ce..7306463 100644
--- a/configure.ac
+++ b/configure.ac
@@ -685,7 +685,7 @@ if test "x$XSELINUX" = xyes; then
AC_CHECK_HEADERS([selinux/selinux.h selinux/avc.h], [], AC_MSG_ERROR([SELinux include files not found]))
AC_CHECK_LIB(selinux, avc_init, [], AC_MSG_ERROR([SELinux library not found]))
AC_CHECK_HEADERS([libaudit.h], [], AC_MSG_ERROR([SELinux extension requires audit system headers]))
- AC_CHECK_LIB(audit, audit_log_avc, [], AC_MSG_ERROR([SELinux extension requires audit system library]))
+ AC_CHECK_LIB(audit, audit_open, [], AC_MSG_ERROR([SELinux extension requires audit system library]))
AC_DEFINE(XSELINUX, 1, [Build SELinux extension])
SELINUX_LIB="-lselinux -laudit"
fi
diff-tree 354c80da66af141e8ba6d75fed75a0f482987956 (from 3714d9149928754afcd6b2466a1371ca32e17985)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Thu Oct 5 16:07:26 2006 -0400
Improve error handling, messages during initialization.
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index df19e5d..2f960d1 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1211,7 +1211,7 @@ CALLBACK(XSELinuxWindowInit)
if (HAVESTATE(rec->client)) {
rc = avc_sid_to_context(SID(rec->client), &ctx);
if (rc < 0)
- FatalError("Failed to get security context!\n");
+ FatalError("XSELinux: Failed to get security context!\n");
rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
PropModeReplace, strlen(ctx), ctx, FALSE);
freecon(ctx);
@@ -1220,7 +1220,7 @@ CALLBACK(XSELinuxWindowInit)
rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
PropModeReplace, 10, "UNLABELED!", FALSE);
if (rc != Success)
- FatalError("Failed to set context property on window!\n");
+ FatalError("XSELinux: Failed to set context property on window!\n");
} /* XSELinuxWindowInit */
static char *XSELinuxKeywords[] = {
@@ -1859,13 +1859,13 @@ XSELinuxExtensionInit(INITARGS)
if (!is_selinux_enabled())
{
- ErrorF("SELinux Extension failed to load: SELinux not enabled\n");
+ ErrorF("XSELinux: Extension failed to load: SELinux not enabled\n");
return;
}
if (avc_init("xserver", NULL, &alc, NULL, NULL) < 0)
{
- FatalError("couldn't initialize SELinux userspace AVC\n");
+ FatalError("XSELinux: Couldn't initialize SELinux userspace AVC\n");
}
if (!AddCallback(&ClientStateCallback, XSELinuxClientState, NULL))
@@ -1874,10 +1874,10 @@ XSELinuxExtensionInit(INITARGS)
/* Create atoms for doing window labeling */
atom_ctx = MakeAtom("_SELINUX_CONTEXT", 16, 1);
if (atom_ctx == BAD_RESOURCE)
- return;
+ FatalError("XSELinux: Failed to create atom\n");
atom_client_ctx = MakeAtom("_SELINUX_CLIENT_CONTEXT", 23, 1);
if (atom_client_ctx == BAD_RESOURCE)
- return;
+ FatalError("XSELinux: Failed to create atom\n");
/* Load the config file. If this fails, shut down the server,
* since an unknown security status is worse than no security.
diff-tree 3714d9149928754afcd6b2466a1371ca32e17985 (from 7f16c38ae2b47b195609d8fedefb7b28f612b2d4)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Wed Oct 4 16:23:35 2006 -0400
Experimental window property holding security context.
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 5a6d2ef..df19e5d 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -35,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE
#endif
#include <X11/X.h>
+#include <X11/Xatom.h>
#include <X11/Xproto.h>
#include <X11/Xfuncproto.h>
#include "dixstruct.h"
@@ -120,6 +121,10 @@ static char **extensionTypes = NULL;
static int extensionTypesCount = 0;
static char *XSELinuxExtensionTypeDefault = NULL;
+/* Atoms for SELinux window labeling properties */
+Atom atom_ctx;
+Atom atom_client_ctx;
+
/* security context for non-local clients */
static char *XSELinuxNonlocalContextDefault = NULL;
@@ -1196,6 +1201,28 @@ CALLBACK(XSELinuxClientState)
}
} /* XSELinuxClientState */
+/* Labeling callbacks */
+CALLBACK(XSELinuxWindowInit)
+{
+ XaceWindowRec *rec = (XaceWindowRec*)calldata;
+ security_context_t ctx;
+ int rc;
+
+ if (HAVESTATE(rec->client)) {
+ rc = avc_sid_to_context(SID(rec->client), &ctx);
+ if (rc < 0)
+ FatalError("Failed to get security context!\n");
+ rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
+ PropModeReplace, strlen(ctx), ctx, FALSE);
+ freecon(ctx);
+ }
+ else
+ rc = ChangeWindowProperty(rec->pWin, atom_client_ctx, XA_STRING, 8,
+ PropModeReplace, 10, "UNLABELED!", FALSE);
+ if (rc != Success)
+ FatalError("Failed to set context property on window!\n");
+} /* XSELinuxWindowInit */
+
static char *XSELinuxKeywords[] = {
#define XSELinuxKeywordComment 0
"#",
@@ -1844,6 +1871,14 @@ XSELinuxExtensionInit(INITARGS)
if (!AddCallback(&ClientStateCallback, XSELinuxClientState, NULL))
return;
+ /* Create atoms for doing window labeling */
+ atom_ctx = MakeAtom("_SELINUX_CONTEXT", 16, 1);
+ if (atom_ctx == BAD_RESOURCE)
+ return;
+ atom_client_ctx = MakeAtom("_SELINUX_CLIENT_CONTEXT", 23, 1);
+ if (atom_client_ctx == BAD_RESOURCE)
+ return;
+
/* Load the config file. If this fails, shut down the server,
* since an unknown security status is worse than no security.
*
@@ -1873,6 +1908,7 @@ XSELinuxExtensionInit(INITARGS)
XaceRegisterCallback(XACE_BACKGRND_ACCESS, XSELinuxBackgrnd, NULL);
XaceRegisterCallback(XACE_DRAWABLE_ACCESS, XSELinuxDrawable, NULL);
XaceRegisterCallback(XACE_PROPERTY_ACCESS, XSELinuxProperty, NULL);
+ XaceRegisterCallback(XACE_WINDOW_INIT, XSELinuxWindowInit, NULL);
/* XaceRegisterCallback(XACE_DECLARE_EXT_SECURE, XSELinuxDeclare, NULL);
XaceRegisterCallback(XACE_DEVICE_ACCESS, XSELinuxDevice, NULL); */
diff-tree 7f16c38ae2b47b195609d8fedefb7b28f612b2d4 (from a7f4bbea87ada1d699bfd9e3b6a98f06191650f6)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Sep 8 15:31:18 2006 -0400
Add SELinux extension configure-time support.
diff --git a/Xext/Makefile.am b/Xext/Makefile.am
index 6ea3d74..be04c84 100644
--- a/Xext/Makefile.am
+++ b/Xext/Makefile.am
@@ -76,6 +76,16 @@ if XACE
BUILTIN_SRCS += $(XACE_SRCS)
endif
+# SELinux extension: provides SELinux policy support for X objects
+# requires X-ACE extension
+XSELINUX_SRCS = xselinux.c xselinux.h
+if XSELINUX
+BUILTIN_SRCS += $(XSELINUX_SRCS)
+
+SERVERCONFIG_DATA += XSELinuxConfig
+AM_CFLAGS += -DXSELINUXCONFIGFILE=\"$(SERVERCONFIGdir)/XSELinuxConfig\"
+endif
+
# Security extension: multi-level security to protect clients from each other
XCSECURITY_SRCS = security.c securitysrv.h
if XCSECURITY
diff-tree a7f4bbea87ada1d699bfd9e3b6a98f06191650f6 (from 28e80cd65b1207b123c02f895851bb6d207aa3c1)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Sep 8 15:17:01 2006 -0400
Add SELinux extension to the module/extension loader.
diff --git a/hw/xfree86/dixmods/extmod/modinit.h b/hw/xfree86/dixmods/extmod/modinit.h
index 41f060b..131b9e6 100644
--- a/hw/xfree86/dixmods/extmod/modinit.h
+++ b/hw/xfree86/dixmods/extmod/modinit.h
@@ -129,6 +129,11 @@ extern void ShmRegisterFuncs(
extern void XaceExtensionInit(INITARGS);
#endif
+#ifdef XSELINUX
+extern void XSELinuxExtensionSetup(INITARGS);
+extern void XSELinuxExtensionInit(INITARGS);
+#endif
+
#if 1
extern void SecurityExtensionSetup(INITARGS);
extern void SecurityExtensionInit(INITARGS);
diff --git a/mi/miinitext.c b/mi/miinitext.c
index cb34473..e270bc6 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -248,6 +248,9 @@ typedef void (*InitExtension)(INITARGS);
#include "securitysrv.h"
#include <X11/extensions/securstr.h>
#endif
+#ifdef XSELINUX
+#include "xselinux.h"
+#endif
#ifdef PANORAMIX
#include <X11/extensions/panoramiXproto.h>
#endif
@@ -321,6 +324,10 @@ extern void XaceExtensionInit(INITARGS);
extern void SecurityExtensionSetup(INITARGS);
extern void SecurityExtensionInit(INITARGS);
#endif
+#ifdef XSELINUX
+extern void XSELinuxExtensionSetup(INITARGS);
+extern void XSELinuxExtensionInit(INITARGS);
+#endif
#ifdef XPRINT
extern void XpExtensionInit(INITARGS);
#endif
@@ -532,6 +539,9 @@ InitExtensions(argc, argv)
#ifdef XCSECURITY
SecurityExtensionSetup();
#endif
+#ifdef XSELINUX
+ XSELinuxExtensionSetup();
+#endif
#ifdef PANORAMIX
# if !defined(PRINT_ONLY_SERVER) && !defined(NO_PANORAMIX)
if (!noPanoramiXExtension) PanoramiXExtensionInit();
@@ -600,6 +610,9 @@ InitExtensions(argc, argv)
#ifdef XCSECURITY
if (!noSecurityExtension) SecurityExtensionInit();
#endif
+#ifdef XSELINUX
+ XSELinuxExtensionInit();
+#endif
#ifdef XPRINT
XpExtensionInit(); /* server-specific extension, cannot be disabled */
#endif
@@ -705,6 +718,9 @@ static ExtensionModule staticExtensions[
#ifdef XCSECURITY
{ SecurityExtensionInit, SECURITY_EXTENSION_NAME, &noSecurityExtension, SecurityExtensionSetup, NULL },
#endif
+#ifdef XSELINUX
+ { XSELinuxExtensionInit, XSELINUX_EXTENSION_NAME, NULL, XSELinuxExtensionSetup, NULL },
+#endif
#ifdef XPRINT
{ XpExtensionInit, XP_PRINTNAME, NULL, NULL, NULL },
#endif
diff-tree 28e80cd65b1207b123c02f895851bb6d207aa3c1 (from 83aad2be8a80890f349c2f9caf84786333f7cc8c)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Sep 8 15:15:19 2006 -0400
Add SELinux extension configure-time support.
diff --git a/configure.ac b/configure.ac
index 002be62..7e931ce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -442,6 +442,7 @@ AC_ARG_ENABLE(xinerama, AS_HELP_ST
AC_ARG_ENABLE(xf86vidmode, AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: auto)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=auto])
AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: auto)]), [XF86MISC=$enableval], [XF86MISC=auto])
AC_ARG_ENABLE(xace, AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
+AC_ARG_ENABLE(xselinux, AS_HELP_STRING([--disable-xselinux], [Build SELinux extension (default: enabled)]), [XSELINUX=$enableval], [XSELINUX=$XACE])
AC_ARG_ENABLE(xcsecurity, AS_HELP_STRING([--disable-xcsecurity], [Build Security extension (default: enabled)]), [XCSECURITY=$enableval], [XCSECURITY=$XACE])
AC_ARG_ENABLE(appgroup, AS_HELP_STRING([--disable-appgroup], [Build XC-APPGROUP extension (default: enabled)]), [APPGROUP=$enableval], [APPGROUP=$XCSECURITY])
AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
@@ -676,6 +677,19 @@ if test "x$XACE" = xyes; then
AC_DEFINE(XACE, 1, [Build X-ACE extension])
fi
+AM_CONDITIONAL(XSELINUX, [test "x$XSELINUX" = xyes])
+if test "x$XSELINUX" = xyes; then
+ if test "x$XACE" != xyes; then
+ AC_MSG_ERROR([cannot build SELinux extension without X-ACE])
+ fi
+ AC_CHECK_HEADERS([selinux/selinux.h selinux/avc.h], [], AC_MSG_ERROR([SELinux include files not found]))
+ AC_CHECK_LIB(selinux, avc_init, [], AC_MSG_ERROR([SELinux library not found]))
+ AC_CHECK_HEADERS([libaudit.h], [], AC_MSG_ERROR([SELinux extension requires audit system headers]))
+ AC_CHECK_LIB(audit, audit_log_avc, [], AC_MSG_ERROR([SELinux extension requires audit system library]))
+ AC_DEFINE(XSELINUX, 1, [Build SELinux extension])
+ SELINUX_LIB="-lselinux -laudit"
+fi
+
AM_CONDITIONAL(XCSECURITY, [test "x$XCSECURITY" = xyes])
if test "x$XCSECURITY" = xyes; then
if test "x$XACE" != xyes; then
@@ -1162,7 +1176,7 @@ if test "x$XORG" = xyes -o "x$XGL" = xye
XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os'
XORG_INCS="$XORG_DDXINCS $XORG_OSINCS"
XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
- XORG_LIBS="$COMPOSITE_LIB $MI_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XPSTUBS_LIB $OS_LIB"
+ XORG_LIBS="$COMPOSITE_LIB $MI_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XPSTUBS_LIB $SELINUX_LIB $OS_LIB"
if test "x$DGA" = xauto; then
PKG_CHECK_MODULES(DGA, xf86dgaproto, [DGA=yes], [DGA=no])
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 7aabae2..4a0b128 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -317,6 +317,9 @@
/* Build X-ACE extension */
#undef XACE
+/* Build SELinux extension */
+#undef XSELINUX
+
/* Support XCMisc extension */
#undef XCMISC
diff-tree 83aad2be8a80890f349c2f9caf84786333f7cc8c (from 81281cb298a5825bc7a2e692375a86199293bbbe)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Sep 8 15:11:04 2006 -0400
Add SELinux extension source files.
diff --git a/Xext/XSELinuxConfig b/Xext/XSELinuxConfig
new file mode 100644
index 0000000..faf815e
--- /dev/null
+++ b/Xext/XSELinuxConfig
@@ -0,0 +1,83 @@
+#
+# Config file for XSELinux extension
+#
+
+#
+# The nonlocal_context rule defines a context to be used for all clients
+# connecting to the server from a remote host. The nonlocal context must
+# be defined, and it must be a valid context according to the SELinux
+# security policy. Only one nonlocal_context rule may be defined.
+#
+nonlocal_context system_u:object_r:remote_xclient_t:s1
+
+#
+# Property rules map a property name to a SELinux type. The type must
+# be valid according to the SELinux security policy. There can be any
+# number of property rules. Additionally, a default property type can be
+# defined for all properties not explicitly listed. The default
+# property type may not be omitted. The default rule may appear in
+# any position (it need not be the last property rule listed).
+#
+property WM_NAME wm_property_t
+property WM_CLASS wm_property_t
+property WM_ICON_NAME wm_property_t
+property WM_HINTS wm_property_t
+property WM_NORMAL_HINTS wm_property_t
+property WM_COMMAND wm_property_t
+
+property CUT_BUFFER0 cut_buffer_property_t
+property CUT_BUFFER1 cut_buffer_property_t
+property CUT_BUFFER2 cut_buffer_property_t
+property CUT_BUFFER3 cut_buffer_property_t
+property CUT_BUFFER4 cut_buffer_property_t
+property CUT_BUFFER5 cut_buffer_property_t
+property CUT_BUFFER6 cut_buffer_property_t
+property CUT_BUFFER7 cut_buffer_property_t
+
+property default unknown_property_t
+
+#
+# Extension rules map an extension name to a SELinux type. The type must
+# be valid according to the SELinux security policy. There can be any
+# number of extension rules. Additionally, a default extension type can
+# be defined for all extensions not explicitly listed. The default
+# extension type may not be omitted. The default rule may appear in
+# any position (it need not be the last extension rule listed).
+#
+extension BIG-REQUESTS std_ext_t
+extension DOUBLE-BUFFER std_ext_t
+extension DPMS screensaver_ext_t
+extension Extended-Visual-Information std_ext_t
+extension FontCache font_ext_t
+extension GLX std_ext_t
+extension LBX std_ext_t
+extension MIT-SCREEN-SAVER screensaver_ext_t
+extension MIT-SHM shmem_ext_t
+extension MIT-SUNDRY-NONSTANDARD std_ext_t
+extension NV-CONTROL accelgraphics_ext_t
+extension NV-GLX accelgraphics_ext_t
+extension NVIDIA-GLX accelgraphics_ext_t
+extension RANDR std_ext_t
+extension RECORD debug_ext_t
+extension RENDER std_ext_t
+extension SECURITY security_ext_t
+extension SELinux security_ext_t
+extension SHAPE std_ext_t
+extension SYNC sync_ext_t
+extension TOG-CUP windowmgr_ext_t
+extension X-Resource debug_ext_t
+extension XAccessControlExtension security_ext_t
+extension XACEUSR security_ext_t
+extension XC-APPGROUP security_ext_t
+extension XC-MISC std_ext_t
+extension XFree86-Bigfont font_ext_t
+extension XFree86-DGA accelgraphics_ext_t
+extension XFree86-Misc std_ext_t
+extension XFree86-VidModeExtension video_ext_t
+extension XInputExtension input_ext_t
+extension XKEYBOARD input_ext_t
+extension XpExtension std_ext_t
+extension XTEST debug_ext_t
+extension XVideo video_ext_t
+extension XVideo-MotionCompensation video_ext_t
+extension default unknown_ext_t
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
new file mode 100644
index 0000000..5a6d2ef
--- /dev/null
+++ b/Xext/xselinux.c
@@ -0,0 +1,1884 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation. This permission
+notice shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+********************************************************/
+
+/*
+ * Portions of this code copyright (c) 2005 by Trusted Computer Solutions, Inc.
+ * All rights reserved.
+ */
+
+#include <selinux/flask.h>
+#include <selinux/av_permissions.h>
+#include <selinux/selinux.h>
+#include <selinux/context.h>
+#include <selinux/avc.h>
+
+#include <libaudit.h>
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include <X11/Xfuncproto.h>
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "resource.h"
+#include "selection.h"
+#include "xacestr.h"
+#include "xselinux.h"
+#define XSERV_t
+#define TRANS_SERVER
+#include <X11/Xtrans/Xtrans.h>
+#include "../os/osdep.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include "modinit.h"
+
+#ifndef XSELINUXCONFIGFILE
+#warning "XSELinux Policy file is not defined"
+#define XSELINUXCONFIGFILE NULL
+#endif
+
+
+/* Make sure a locally connecting client has a valid context. The context
+ * for this client is retrieved again later on in AssignClientState(), but
+ * by that point it's too late to reject the client.
+ */
+static char *
+XSELinuxValidContext (ClientPtr client)
+{
+ security_context_t ctx = NULL;
+ XtransConnInfo ci = ((OsCommPtr)client->osPrivate)->trans_conn;
+ char reason[256];
+ char *ret = (char *)NULL;
+
+ if (_XSERVTransIsLocal(ci))
+ {
+ int fd = _XSERVTransGetConnectionNumber(ci);
+ if (getpeercon(fd, &ctx) < 0)
+ {
+ snprintf(reason, sizeof(reason), "Failed to retrieve SELinux context from socket");
+ ret = reason;
+ goto out;
+ }
+ if (security_check_context(ctx))
+ {
+ snprintf(reason, sizeof(reason), "Client's SELinux context is invalid: %s", ctx);
+ ret = reason;
+ }
+
+ freecon(ctx);
+ }
+
+out:
+ return ret;
+}
+
+
+/* devPrivates in client and extension */
+static int clientPrivateIndex;
+static int extnsnPrivateIndex;
+
+/* audit file descriptor */
+static int audit_fd;
+
+/* structure passed to auditing callback */
+typedef struct {
+ ClientPtr client; /* client */
+ char *property; /* property name, if any */
+ char *extension; /* extension name, if any */
+} XSELinuxAuditRec;
+
+/*
+ * Table of SELinux types for property names.
+ */
+static char **propertyTypes = NULL;
+static int propertyTypesCount = 0;
+char *XSELinuxPropertyTypeDefault = NULL;
+
+/*
+ * Table of SELinux types for each extension.
+ */
+static char **extensionTypes = NULL;
+static int extensionTypesCount = 0;
+static char *XSELinuxExtensionTypeDefault = NULL;
+
+/* security context for non-local clients */
+static char *XSELinuxNonlocalContextDefault = NULL;
+
+/* security context for the root window */
+static char *XSELinuxRootWindowContext = NULL;
+
+/* Selection stuff from dix */
+extern Selection *CurrentSelections;
+extern int NumCurrentSelections;
+
+/*
+ * list of classes corresponding to SIDs in the
+ * rsid array of the security state structure (below).
+ *
+ * XXX SIDs should be stored in their native objects, not all
+ * bunched together in the client structure. However, this will
+ * require modification to the resource manager.
+ */
+static security_class_t sClasses[] = {
+ SECCLASS_WINDOW,
+ SECCLASS_DRAWABLE,
+ SECCLASS_GC,
+ SECCLASS_CURSOR,
+ SECCLASS_FONT,
+ SECCLASS_COLORMAP,
+ SECCLASS_PROPERTY,
+ SECCLASS_XCLIENT,
+ SECCLASS_XINPUT
+};
+#define NRES (sizeof(sClasses)/sizeof(sClasses[0]))
+
+/* This is what we store for client security state */
+typedef struct {
+ int haveState;
+ security_id_t sid;
+ security_id_t rsid[NRES];
+ struct avc_entry_ref aeref;
+} XSELinuxClientStateRec;
+
+/* Convenience macros for accessing security state fields */
+#define STATEPTR(client) \
+ ((client)->devPrivates[clientPrivateIndex].ptr)
+#define HAVESTATE(client) \
+ (((XSELinuxClientStateRec*)STATEPTR(client))->haveState)
+#define SID(client) \
+ (((XSELinuxClientStateRec*)STATEPTR(client))->sid)
+#define RSID(client,n) \
+ (((XSELinuxClientStateRec*)STATEPTR(client))->rsid[n])
+#define AEREF(client) \
+ (((XSELinuxClientStateRec*)STATEPTR(client))->aeref)
+#define EXTENSIONSID(ext) \
+ ((ext)->devPrivates[extnsnPrivateIndex].ptr)
+
+/*
+ * Returns the index into the rsid array where the SID for the
+ * given class is stored.
+ */
+static int
+IndexByClass(security_class_t class)
+{
+ int i;
+ for (i=0; i<NRES; i++)
+ if (class == sClasses[i])
+ return i;
+ return 0;
+}
+
+/*
+ * Does sanity checking on a resource ID. This can be removed after
+ * testing.
+ */
+static void
+CheckXID(XID id)
+{
+ /*
+ XID c = CLIENT_ID(id);
+
+ if (c > 10)
+ ErrorF("Warning: possibly mangled ID %x\n", id);
+
+ c = id & RESOURCE_ID_MASK;
+ if (c > 100)
+ ErrorF("Warning: possibly mangled ID %x\n", id);
+ */
+}
+
+/*
+ * Byte-swap a CARD32 id if necessary.
+ */
+static XID
+SwapXID(ClientPtr client, XID id)
+{
+ register char n;
+ if (client->swapped)
+ swapl(&id, n);
+ return id;
+}
+
+/*
+ * ServerPerm - check access permissions on a server-owned object.
+ *
+ * Arguments:
+ * client: Client doing the request.
+ * class: Security class of the server object being accessed.
+ * perm: Permissions required on the object.
+ *
+ * Returns: boolean TRUE=allowed, FALSE=denied.
+ */
+static int
+ServerPerm(ClientPtr client,
+ security_class_t class,
+ access_vector_t perm)
+{
+ int idx = IndexByClass(class);
+ if (HAVESTATE(client))
+ {
+ XSELinuxAuditRec auditdata;
+ auditdata.client = client;
+ auditdata.property = NULL;
+ auditdata.extension = NULL;
+ errno = 0;
+ if (avc_has_perm(SID(client), RSID(serverClient,idx), class,
+ perm, &AEREF(client), &auditdata) < 0)
+ {
+ if (errno != EACCES)
+ ErrorF("ServerPerm: unexpected error %d\n", errno);
+ return FALSE;
+ }
+ }
+ else
+ {
+ ErrorF("No client state in server-perm check!\n");
+ return TRUE;
+ }
+
+ return TRUE;
+}
+
+/*
+ * IDPerm - check access permissions on a resource.
+ *
+ * Arguments:
+ * client: Client doing the request.
+ * id: resource id of the resource being accessed.
+ * class: Security class of the resource being accessed.
+ * perm: Permissions required on the resource.
+ *
+ * Returns: boolean TRUE=allowed, FALSE=denied.
+ */
+static int
+IDPerm(ClientPtr sclient,
+ XID id,
+ security_class_t class,
+ access_vector_t perm)
+{
+ ClientPtr tclient;
+ int idx = IndexByClass(class);
+ XSELinuxAuditRec auditdata;
+
+ if (id == None)
+ return TRUE;
+
+ CheckXID(id);
+ tclient = clients[CLIENT_ID(id)];
+
+ /*
+ * This happens in the case where a client has
+ * disconnected. XXX might want to make the server
+ * own orphaned resources...
+ */
+ if (!tclient || !HAVESTATE(tclient) || !HAVESTATE(sclient))
+ {
+ return TRUE;
+ }
+
+ auditdata.client = sclient;
+ auditdata.property = NULL;
+ auditdata.extension = NULL;
+ errno = 0;
+ if (avc_has_perm(SID(sclient), RSID(tclient,idx), class,
+ perm, &AEREF(sclient), &auditdata) < 0)
+ {
+ if (errno != EACCES)
+ ErrorF("IDPerm: unexpected error %d\n", errno);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*
+ * ObjectSIDByLabel - get SID for an extension or property.
+ *
+ * Arguments:
+ * class: should be SECCLASS_XEXTENSION or SECCLASS_PROPERTY.
+ * name: name of the extension or property.
+ *
+ * Returns: proper SID for the object or NULL on error.
+ */
+static security_id_t
+ObjectSIDByLabel(security_context_t basecontext, security_class_t class,
+ const char *name)
+{
+ security_context_t base, new;
+ context_t con;
+ security_id_t sid = NULL;
+ char **ptr, *type = NULL;
+
+ if (basecontext != NULL)
+ {
+ /* use the supplied context */
+ base = strdup(basecontext);
+ if (base == NULL)
+ goto out;
+ }
+ else
+ {
+ /* get server context */
+ if (getcon(&base) < 0)
+ goto out;
+ }
+
+ /* make a new context-manipulation object */
+ con = context_new(base);
+ if (!con)
+ goto out2;
+
+ /* look in the mappings of names to types */
+ ptr = (class == SECCLASS_PROPERTY) ? propertyTypes : extensionTypes;
+ for (; *ptr; ptr+=2)
+ if (!strcmp(*ptr, name))
+ break;
+ type = ptr[1];
+
+ /* set the role and type in the context (user unchanged) */
+ if (context_type_set(con, type) ||
+ context_role_set(con, "object_r"))
+ goto out3;
+
+ /* get a context string from the context-manipulation object */
+ new = context_str(con);
+ if (!new)
+ goto out3;
+
+ /* get a SID for the context */
+ if (avc_context_to_sid(new, &sid) < 0)
+ goto out3;
+
+ out3:
+ context_free(con);
+ out2:
+ freecon(base);
+ out:
+ return sid;
+}
+
+/*
+ * AssignClientState - set up client security state.
+ *
+ * Arguments:
+ * client: client to set up (can be serverClient).
+ */
+static void
+AssignClientState(ClientPtr client)
+{
+ int i, needToFree = 0;
+ security_context_t basectx, objctx;
+ XSELinuxClientStateRec *state = (XSELinuxClientStateRec*)STATEPTR(client);
+ Bool isServerClient = FALSE;
+
+ avc_entry_ref_init(&state->aeref);
+
+ if (client->index > 0)
+ {
+ XtransConnInfo ci = ((OsCommPtr)client->osPrivate)->trans_conn;
+ if (_XSERVTransIsLocal(ci)) {
+ /* for local clients, can get context from the socket */
+ int fd = _XSERVTransGetConnectionNumber(ci);
+ if (getpeercon(fd, &basectx) < 0)
+ {
+ FatalError("Client %d: couldn't get context from socket\n",
+ client->index);
+ }
+ needToFree = 1;
+ }
+ else
+ {
+ /* for remote clients, need to use a default context */
+ basectx = XSELinuxNonlocalContextDefault;
+ }
+ }
+ else
+ {
+ isServerClient = TRUE;
+
+ /* use the context of the X server process for the serverClient */
+ if (getcon(&basectx) < 0)
+ {
+ FatalError("Couldn't get context of X server process\n");
+ }
+ needToFree = 1;
+ }
+
+ /* get a SID from the context */
+ if (avc_context_to_sid(basectx, &state->sid) < 0)
+ {
+ FatalError("Client %d: couldn't get security ID for client\n",
+ client->index);
+ }
+
+ /* get contexts and then SIDs for each resource type */
+ for (i=0; i<NRES; i++)
+ {
+ if (security_compute_create(basectx, basectx, sClasses[i],
+ &objctx) < 0)
+ {
+ FatalError("Client %d: couldn't get context for class %x\n",
+ client->index, sClasses[i]);
+ }
+ else if (avc_context_to_sid(objctx, &state->rsid[i]) < 0)
+ {
+ FatalError("Client %d: couldn't get SID for class %x\n",
+ client->index, sClasses[i]);
+ }
+ freecon(objctx);
+ }
+
+ /* special handling for serverClient windows (that is, root windows) */
+ if (isServerClient == TRUE)
+ {
+ i = IndexByClass(SECCLASS_WINDOW);
+ sidput(state->rsid[i]);
+ if (avc_context_to_sid(XSELinuxRootWindowContext, &state->rsid[i]))
+ {
+ FatalError("Failed to set SID for root window\n");
+ }
+ }
+
+ /* mark as set up, free base context if necessary, and return */
+ state->haveState = TRUE;
+ if (needToFree)
+ freecon(basectx);
+}
+
+/*
+ * FreeClientState - tear down client security state.
+ *
+ * Arguments:
+ * client: client to release (can be serverClient).
+ */
+static void
+FreeClientState(ClientPtr client)
+{
+ int i;
+ XSELinuxClientStateRec *state = (XSELinuxClientStateRec*)STATEPTR(client);
+
+ /* client state may not be set up if its auth was rejected */
+ if (state->haveState) {
+ state = (XSELinuxClientStateRec*)STATEPTR(client);
+ sidput(state->sid);
+ for (i=0; i<NRES; i++)
+ sidput(state->rsid[i]);
+ state->haveState = FALSE;
+ }
+}
+
+#define REQUEST_SIZE_CHECK(client, req) \
+ (client->req_len >= (sizeof(req) >> 2))
+#define IDPERM(client, req, field, class, perm) \
+ (REQUEST_SIZE_CHECK(client,req) && \
+ IDPerm(client, SwapXID(client,((req*)stuff)->field), class, perm))
+#define CALLBACK(name) static void \
+name(CallbackListPtr *pcbl, pointer nulldata, pointer calldata)
+
+static int
+CheckSendEventPerms(ClientPtr client)
+{
+ register char n;
+ access_vector_t perm = 0;
+ REQUEST(xSendEventReq);
+
+ /* might need type bounds checking here */
+ if (!REQUEST_SIZE_CHECK(client, xSendEventReq))
+ return FALSE;
+
+ switch (stuff->event.u.u.type) {
+ case SelectionClear:
+ case SelectionNotify:
+ case SelectionRequest:
+ case ClientMessage:
+ case PropertyNotify:
+ perm = WINDOW__CLIENTCOMEVENT;
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ case KeyPress:
+ case KeyRelease:
+ case KeymapNotify:
+ case MotionNotify:
+ case EnterNotify:
+ case LeaveNotify:
+ case FocusIn:
+ case FocusOut:
+ perm = WINDOW__INPUTEVENT;
+ break;
+ case Expose:
+ case GraphicsExpose:
+ case NoExpose:
+ case VisibilityNotify:
+ perm = WINDOW__DRAWEVENT;
+ break;
+ case CirculateNotify:
+ case ConfigureNotify:
+ case CreateNotify:
+ case DestroyNotify:
+ case MapNotify:
+ case UnmapNotify:
+ case GravityNotify:
+ case ReparentNotify:
+ perm = WINDOW__WINDOWCHANGEEVENT;
+ break;
+ case CirculateRequest:
+ case ConfigureRequest:
+ case MapRequest:
+ case ResizeRequest:
+ perm = WINDOW__WINDOWCHANGEREQUEST;
+ break;
+ case ColormapNotify:
+ case MappingNotify:
+ perm = WINDOW__SERVERCHANGEEVENT;
+ break;
+ default:
+ perm = WINDOW__EXTENSIONEVENT;
+ break;
+ }
+ if (client->swapped)
+ swapl(&stuff->destination, n);
+ return IDPerm(client, stuff->destination, SECCLASS_WINDOW, perm);
+}
+
+static int
+CheckConvertSelectionPerms(ClientPtr client)
+{
+ register char n;
+ int rval = TRUE;
+ REQUEST(xConvertSelectionReq);
+
+ if (!REQUEST_SIZE_CHECK(client, xConvertSelectionReq))
+ return FALSE;
+
+ if (client->swapped)
+ {
+ swapl(&stuff->selection, n);
+ swapl(&stuff->requestor, n);
+ }
+
+ if (ValidAtom(stuff->selection))
+ {
+ int i = 0;
+ while ((i < NumCurrentSelections) &&
+ CurrentSelections[i].selection != stuff->selection) i++;
+ if (i < NumCurrentSelections)
+ rval = rval && IDPerm(client, CurrentSelections[i].window,
+ SECCLASS_WINDOW, WINDOW__CLIENTCOMEVENT);
+ }
+ rval = rval && IDPerm(client, stuff->requestor,
+ SECCLASS_WINDOW, WINDOW__CLIENTCOMEVENT);
+ return rval;
+}
+
+static int
+CheckSetSelectionOwnerPerms(ClientPtr client)
+{
+ register char n;
+ int rval = TRUE;
+ REQUEST(xSetSelectionOwnerReq);
+
+ if (!REQUEST_SIZE_CHECK(client, xSetSelectionOwnerReq))
+ return FALSE;
+
+ if (client->swapped)
+ {
+ swapl(&stuff->selection, n);
+ swapl(&stuff->window, n);
+ }
+
+ if (ValidAtom(stuff->selection))
+ {
+ int i = 0;
+ while ((i < NumCurrentSelections) &&
+ CurrentSelections[i].selection != stuff->selection) i++;
+ if (i < NumCurrentSelections)
+ rval = rval && IDPerm(client, CurrentSelections[i].window,
+ SECCLASS_WINDOW, WINDOW__CHSELECTION);
+ }
+ rval = rval && IDPerm(client, stuff->window,
+ SECCLASS_WINDOW, WINDOW__CHSELECTION);
+ return rval;
+}
+
+CALLBACK(XSELinuxCoreDispatch)
+{
+ XaceCoreDispatchRec *rec = (XaceCoreDispatchRec*)calldata;
+ ClientPtr client = rec->client;
+ REQUEST(xReq);
+ Bool rval;
+
+ switch(stuff->reqType) {
+ /* Drawable class control requirements */
+ case X_ClearArea:
+ rval = IDPERM(client, xClearAreaReq, window,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_PolySegment:
+ case X_PolyRectangle:
+ case X_PolyArc:
+ case X_PolyFillRectangle:
+ case X_PolyFillArc:
+ rval = IDPERM(client, xPolySegmentReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_PolyPoint:
+ case X_PolyLine:
+ rval = IDPERM(client, xPolyPointReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_FillPoly:
+ rval = IDPERM(client, xFillPolyReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_PutImage:
+ rval = IDPERM(client, xPutImageReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_CopyArea:
+ case X_CopyPlane:
+ rval = IDPERM(client, xCopyAreaReq, srcDrawable,
+ SECCLASS_DRAWABLE, DRAWABLE__COPY)
+ && IDPERM(client, xCopyAreaReq, dstDrawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_GetImage:
+ rval = IDPERM(client, xGetImageReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__COPY);
+ break;
+ case X_GetGeometry:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_DRAWABLE, DRAWABLE__GETATTR);
+ break;
+
+ /* Window class control requirements */
+ case X_ChangeProperty:
+ rval = IDPERM(client, xChangePropertyReq, window,
+ SECCLASS_WINDOW,
+ WINDOW__CHPROPLIST | WINDOW__CHPROP |
+ WINDOW__LISTPROP);
+ break;
+ case X_ChangeSaveSet:
+ rval = IDPERM(client, xChangeSaveSetReq, window,
+ SECCLASS_WINDOW,
+ WINDOW__CTRLLIFE | WINDOW__CHPARENT);
+ break;
+ case X_ChangeWindowAttributes:
+ rval = IDPERM(client, xChangeWindowAttributesReq, window,
+ SECCLASS_WINDOW, WINDOW__SETATTR);
+ break;
+ case X_CirculateWindow:
+ rval = IDPERM(client, xCirculateWindowReq, window,
+ SECCLASS_WINDOW, WINDOW__CHSTACK);
+ break;
+ case X_ConfigureWindow:
+ rval = IDPERM(client, xConfigureWindowReq, window,
+ SECCLASS_WINDOW,
+ WINDOW__SETATTR | WINDOW__MOVE | WINDOW__CHSTACK);
+ break;
+ case X_ConvertSelection:
+ rval = CheckConvertSelectionPerms(client);
+ break;
+ case X_CreateWindow:
+ rval = IDPERM(client, xCreateWindowReq, wid,
+ SECCLASS_WINDOW,
+ WINDOW__CREATE | WINDOW__SETATTR | WINDOW__MOVE)
+ && IDPERM(client, xCreateWindowReq, parent,
+ SECCLASS_WINDOW,
+ WINDOW__CHSTACK | WINDOW__ADDCHILD)
+ && IDPERM(client, xCreateWindowReq, wid,
+ SECCLASS_DRAWABLE, DRAWABLE__CREATE);
+ break;
+ case X_DeleteProperty:
+ rval = IDPERM(client, xDeletePropertyReq, window,
+ SECCLASS_WINDOW,
+ WINDOW__CHPROP | WINDOW__CHPROPLIST);
+ break;
+ case X_DestroyWindow:
+ case X_DestroySubwindows:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW,
+ WINDOW__ENUMERATE | WINDOW__UNMAP | WINDOW__DESTROY)
+ && IDPERM(client, xResourceReq, id,
+ SECCLASS_DRAWABLE, DRAWABLE__DESTROY);
+ break;
+ case X_GetMotionEvents:
+ rval = IDPERM(client, xGetMotionEventsReq, window,
+ SECCLASS_WINDOW, WINDOW__MOUSEMOTION);
+ break;
+ case X_GetProperty:
+ rval = IDPERM(client, xGetPropertyReq, window,
+ SECCLASS_WINDOW, WINDOW__LISTPROP);
+ break;
+ case X_GetWindowAttributes:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW, WINDOW__GETATTR);
+ break;
+ case X_KillClient:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_XCLIENT, XCLIENT__KILL);
+ break;
+ case X_ListProperties:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW, WINDOW__LISTPROP);
+ break;
+ case X_MapWindow:
+ case X_MapSubwindows:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW,
+ WINDOW__ENUMERATE | WINDOW__GETATTR | WINDOW__MAP);
+ break;
+ case X_QueryTree:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW, WINDOW__ENUMERATE | WINDOW__GETATTR);
+ break;
+ case X_RotateProperties:
+ rval = IDPERM(client, xRotatePropertiesReq, window,
+ SECCLASS_WINDOW, WINDOW__CHPROP | WINDOW__CHPROPLIST);
+ break;
+ case X_ReparentWindow:
+ rval = IDPERM(client, xReparentWindowReq, window,
+ SECCLASS_WINDOW, WINDOW__CHPARENT | WINDOW__MOVE)
+ && IDPERM(client, xReparentWindowReq, parent,
+ SECCLASS_WINDOW, WINDOW__CHSTACK | WINDOW__ADDCHILD);
+ break;
+ case X_SendEvent:
+ rval = CheckSendEventPerms(client);
+ break;
+ case X_SetInputFocus:
+ rval = IDPERM(client, xSetInputFocusReq, focus,
+ SECCLASS_WINDOW, WINDOW__SETFOCUS)
+ && ServerPerm(client, SECCLASS_XINPUT, XINPUT__SETFOCUS);
+ break;
+ case X_SetSelectionOwner:
+ rval = CheckSetSelectionOwnerPerms(client);
+ break;
+ case X_TranslateCoords:
+ rval = IDPERM(client, xTranslateCoordsReq, srcWid,
+ SECCLASS_WINDOW, WINDOW__GETATTR)
+ && IDPERM(client, xTranslateCoordsReq, dstWid,
+ SECCLASS_WINDOW, WINDOW__GETATTR);
+ break;
+ case X_UnmapWindow:
+ case X_UnmapSubwindows:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_WINDOW,
+ WINDOW__ENUMERATE | WINDOW__GETATTR |
+ WINDOW__UNMAP);
+ break;
+ case X_WarpPointer:
+ rval = IDPERM(client, xWarpPointerReq, srcWid,
+ SECCLASS_WINDOW, WINDOW__GETATTR)
+ && IDPERM(client, xWarpPointerReq, dstWid,
+ SECCLASS_WINDOW, WINDOW__GETATTR)
+ && ServerPerm(client, SECCLASS_XINPUT, XINPUT__WARPPOINTER);
+ break;
+
+ /* Input class control requirements */
+ case X_GrabButton:
+ case X_GrabKey:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__PASSIVEGRAB);
+ break;
+ case X_GrabKeyboard:
+ case X_GrabPointer:
+ case X_ChangeActivePointerGrab:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__ACTIVEGRAB);
+ break;
+ case X_AllowEvents:
+ case X_UngrabButton:
+ case X_UngrabKey:
+ case X_UngrabKeyboard:
+ case X_UngrabPointer:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__UNGRAB);
+ break;
+ case X_GetKeyboardControl:
+ case X_GetKeyboardMapping:
+ case X_GetPointerControl:
+ case X_GetPointerMapping:
+ case X_GetModifierMapping:
+ case X_QueryKeymap:
+ case X_QueryPointer:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__GETATTR);
+ break;
+ case X_ChangeKeyboardControl:
+ case X_ChangePointerControl:
+ case X_ChangeKeyboardMapping:
+ case X_SetModifierMapping:
+ case X_SetPointerMapping:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__SETATTR);
+ break;
+ case X_Bell:
+ rval = ServerPerm(client, SECCLASS_XINPUT, XINPUT__BELL);
+ break;
+
+ /* Colormap class control requirements */
+ case X_AllocColor:
+ case X_AllocColorCells:
+ case X_AllocColorPlanes:
+ case X_AllocNamedColor:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP,
+ COLORMAP__READ | COLORMAP__STORE);
+ break;
+ case X_CopyColormapAndFree:
+ rval = IDPERM(client, xCopyColormapAndFreeReq, mid,
+ SECCLASS_COLORMAP, COLORMAP__CREATE)
+ && IDPERM(client, xCopyColormapAndFreeReq, srcCmap,
+ SECCLASS_COLORMAP,
+ COLORMAP__READ | COLORMAP__FREE);
+ break;
+ case X_CreateColormap:
+ rval = IDPERM(client, xCreateColormapReq, mid,
+ SECCLASS_COLORMAP, COLORMAP__CREATE)
+ && IDPERM(client, xCreateColormapReq, window,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_FreeColormap:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP, COLORMAP__FREE);
+ break;
+ case X_FreeColors:
+ rval = IDPERM(client, xFreeColorsReq, cmap,
+ SECCLASS_COLORMAP, COLORMAP__STORE);
+ break;
+ case X_InstallColormap:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP, COLORMAP__INSTALL)
+ && ServerPerm(client, SECCLASS_COLORMAP, COLORMAP__INSTALL);
+ break;
+ case X_ListInstalledColormaps:
+ rval = ServerPerm(client, SECCLASS_COLORMAP, COLORMAP__LIST);
+ break;
+ case X_LookupColor:
+ case X_QueryColors:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP, COLORMAP__READ);
+ break;
+ case X_StoreColors:
+ case X_StoreNamedColor:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP, COLORMAP__STORE);
+ break;
+ case X_UninstallColormap:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_COLORMAP, COLORMAP__UNINSTALL)
+ && ServerPerm(client, SECCLASS_COLORMAP, COLORMAP__UNINSTALL);
+ break;
+
+ /* Font class control requirements */
+ case X_CloseFont:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_FONT, FONT__FREE);
+ break;
+ case X_ImageText8:
+ case X_ImageText16:
+ /* Font accesses checked through the resource manager */
+ rval = IDPERM(client, xImageTextReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+ case X_OpenFont:
+ rval = ServerPerm(client, SECCLASS_FONT, FONT__LOAD)
+ && IDPERM(client, xOpenFontReq, fid,
+ SECCLASS_FONT, FONT__USE);
+ break;
+ case X_PolyText8:
+ case X_PolyText16:
+ /* Font accesses checked through the resource manager */
+ rval = ServerPerm(client, SECCLASS_FONT, FONT__LOAD)
+ && IDPERM(client, xPolyTextReq, gc,
+ SECCLASS_GC, GC__SETATTR)
+ && IDPERM(client, xPolyTextReq, drawable,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW);
+ break;
+
+ /* Pixmap class control requirements */
+ case X_CreatePixmap:
+ rval = IDPERM(client, xCreatePixmapReq, pid,
+ SECCLASS_DRAWABLE, DRAWABLE__CREATE);
+ break;
+ case X_FreePixmap:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_DRAWABLE, DRAWABLE__DESTROY);
+ break;
+
+ /* Cursor class control requirements */
+ case X_CreateCursor:
+ rval = IDPERM(client, xCreateCursorReq, cid,
+ SECCLASS_CURSOR, CURSOR__CREATE)
+ && IDPERM(client, xCreateCursorReq, source,
+ SECCLASS_DRAWABLE, DRAWABLE__DRAW)
+ && IDPERM(client, xCreateCursorReq, mask,
+ SECCLASS_DRAWABLE, DRAWABLE__COPY);
+ break;
+ case X_CreateGlyphCursor:
+ rval = IDPERM(client, xCreateGlyphCursorReq, cid,
+ SECCLASS_CURSOR, CURSOR__CREATEGLYPH)
+ && IDPERM(client, xCreateGlyphCursorReq, source,
+ SECCLASS_FONT, FONT__USE)
+ && IDPERM(client, xCreateGlyphCursorReq, mask,
+ SECCLASS_FONT, FONT__USE);
+ break;
+ case X_RecolorCursor:
+ rval = IDPERM(client, xRecolorCursorReq, cursor,
+ SECCLASS_CURSOR, CURSOR__SETATTR);
+ break;
+ case X_FreeCursor:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_CURSOR, CURSOR__FREE);
+ break;
+
+ /* GC class control requirements */
+ case X_CreateGC:
+ rval = IDPERM(client, xCreateGCReq, gc,
+ SECCLASS_GC, GC__CREATE | GC__SETATTR);
+ break;
+ case X_ChangeGC:
+ case X_SetDashes:
+ case X_SetClipRectangles:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_GC, GC__SETATTR);
+ break;
+ case X_CopyGC:
+ rval = IDPERM(client, xCopyGCReq, srcGC,
+ SECCLASS_GC, GC__GETATTR)
+ && IDPERM(client, xCopyGCReq, dstGC,
+ SECCLASS_GC, GC__SETATTR);
+ break;
+ case X_FreeGC:
+ rval = IDPERM(client, xResourceReq, id,
+ SECCLASS_GC, GC__FREE);
+ break;
+
+ /* Server class control requirements */
+ case X_GrabServer:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__GRAB);
+ break;
+ case X_UngrabServer:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__UNGRAB);
+ break;
+ case X_ForceScreenSaver:
+ case X_GetScreenSaver:
+ case X_SetScreenSaver:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__SCREENSAVER);
+ break;
+ case X_ListHosts:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__GETHOSTLIST);
+ break;
+ case X_ChangeHosts:
+ case X_SetAccessControl:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__SETHOSTLIST);
+ break;
+ case X_GetFontPath:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__GETFONTPATH);
+ break;
+ case X_SetFontPath:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__SETFONTPATH);
+ break;
+ case X_QueryBestSize:
+ rval = ServerPerm(client, SECCLASS_XSERVER, XSERVER__GETATTR);
+ break;
+
+ default:
+ rval = TRUE;
+ break;
+ }
+ if (!rval)
+ rec->rval = FALSE;
+}
+
+CALLBACK(XSELinuxExtDispatch)
+{
+ XaceExtAccessRec *rec = (XaceExtAccessRec*)calldata;
+ ClientPtr client = rec->client;
+ ExtensionEntry *ext = rec->ext;
+ security_id_t extsid;
+ access_vector_t perm;
+ REQUEST(xReq);
+
+ /* XXX there should be a separate callback for this */
+ if (!EXTENSIONSID(ext))
+ {
+ extsid = ObjectSIDByLabel(NULL, SECCLASS_XEXTENSION, ext->name);
+ if (!extsid)
+ return;
+ EXTENSIONSID(ext) = extsid;
+ }
+
+ extsid = (security_id_t)EXTENSIONSID(ext);
+ perm = ((stuff->reqType == X_QueryExtension) ||
+ (stuff->reqType == X_ListExtensions)) ?
+ XEXTENSION__QUERY : XEXTENSION__USE;
+
+ if (HAVESTATE(client))
+ {
+ XSELinuxAuditRec auditdata;
+ auditdata.client = client;
+ auditdata.property = NULL;
+ auditdata.extension = ext->name;
+ errno = 0;
+ if (avc_has_perm(SID(client), extsid, SECCLASS_XEXTENSION,
+ perm, &AEREF(client), &auditdata) < 0)
+ {
+ if (errno != EACCES)
+ ErrorF("ExtDispatch: unexpected error %d\n", errno);
+ rec->rval = FALSE;
+ }
+ } else
+ ErrorF("No client state in extension dispatcher!\n");
+} /* XSELinuxExtDispatch */
+
+CALLBACK(XSELinuxProperty)
+{
+ XacePropertyAccessRec *rec = (XacePropertyAccessRec*)calldata;
+ WindowPtr pWin = rec->pWin;
+ ClientPtr client = rec->client;
+ ClientPtr tclient;
+ access_vector_t perm = 0;
+ security_id_t propsid;
+ char *propname = NameForAtom(rec->propertyName);
+
+ tclient = wClient(pWin);
+ if (!tclient || !HAVESTATE(tclient))
+ return;
+
+ propsid = ObjectSIDByLabel(SID(tclient)->ctx, SECCLASS_PROPERTY, propname);
+ if (!propsid)
+ return;
+
+ if (rec->access_mode & SecurityReadAccess)
+ perm |= PROPERTY__READ;
+ if (rec->access_mode & SecurityWriteAccess)
+ perm |= PROPERTY__WRITE;
+ if (rec->access_mode & SecurityDestroyAccess)
+ perm |= PROPERTY__FREE;
+ if (!rec->access_mode)
+ perm = PROPERTY__READ | PROPERTY__WRITE | PROPERTY__FREE;
+
+ if (HAVESTATE(client))
+ {
+ XSELinuxAuditRec auditdata;
+ auditdata.client = client;
+ auditdata.property = propname;
+ auditdata.extension = NULL;
+ errno = 0;
+ if (avc_has_perm(SID(client), propsid, SECCLASS_PROPERTY,
+ perm, &AEREF(client), &auditdata) < 0)
+ {
+ if (errno != EACCES)
+ ErrorF("Property: unexpected error %d\n", errno);
+ rec->rval = SecurityIgnoreOperation;
+ }
+ } else
+ ErrorF("No client state in property callback!\n");
+
+ /* XXX this should be saved in the property structure */
+ sidput(propsid);
+} /* XSELinuxProperty */
+
+CALLBACK(XSELinuxResLookup)
+{
+ XaceResourceAccessRec *rec = (XaceResourceAccessRec*)calldata;
+ ClientPtr client = rec->client;
+ REQUEST(xReq);
+ access_vector_t perm = 0;
+ Bool rval = TRUE;
+
+ /* serverClient requests OK */
+ if (client->index == 0)
+ return;
+
+ switch(rec->rtype) {
+ case RT_FONT: {
+ switch(stuff->reqType) {
+ case X_ImageText8:
+ case X_ImageText16:
+ case X_PolyText8:
+ case X_PolyText16:
+ perm = FONT__USE;
+ break;
+ case X_ListFonts:
+ case X_ListFontsWithInfo:
+ case X_QueryFont:
+ case X_QueryTextExtents:
+ perm = FONT__GETATTR;
+ break;
+ default:
+ break;
+ }
+ if (perm)
+ rval = IDPerm(client, rec->id, SECCLASS_FONT, perm);
+ break;
+ }
+ default:
+ break;
+ }
+ if (!rval)
+ rec->rval = FALSE;
+} /* XSELinuxResLookup */
+
+CALLBACK(XSELinuxMap)
+{
+ XaceMapAccessRec *rec = (XaceMapAccessRec*)calldata;
+ if (!IDPerm(rec->client, rec->pWin->drawable.id,
+ SECCLASS_WINDOW, WINDOW__MAP))
+ rec->rval = FALSE;
+} /* XSELinuxMap */
+
+CALLBACK(XSELinuxBackgrnd)
+{
+ XaceMapAccessRec *rec = (XaceMapAccessRec*)calldata;
+ if (!IDPerm(rec->client, rec->pWin->drawable.id,
+ SECCLASS_WINDOW, WINDOW__TRANSPARENT))
+ rec->rval = FALSE;
+} /* XSELinuxBackgrnd */
+
+CALLBACK(XSELinuxDrawable)
+{
+ XaceDrawableAccessRec *rec = (XaceDrawableAccessRec*)calldata;
+ if (!IDPerm(rec->client, rec->pDraw->id,
+ SECCLASS_DRAWABLE, DRAWABLE__COPY))
+ rec->rval = FALSE;
+} /* XSELinuxDrawable */
+
+CALLBACK(XSELinuxHostlist)
+{
+ XaceHostlistAccessRec *rec = (XaceHostlistAccessRec*)calldata;
+ access_vector_t perm = (rec->access_mode == SecurityReadAccess) ?
+ XSERVER__GETHOSTLIST : XSERVER__SETHOSTLIST;
+
+ if (!ServerPerm(rec->client, SECCLASS_XSERVER, perm))
+ rec->rval = FALSE;
+} /* XSELinuxHostlist */
+
+/* Extension callbacks */
+CALLBACK(XSELinuxClientState)
+{
+ NewClientInfoRec *pci = (NewClientInfoRec *)calldata;
+ ClientPtr client = pci->client;
+
+ switch(client->clientState)
+ {
+ case ClientStateInitial:
+ AssignClientState(serverClient);
+ break;
+
+ case ClientStateRunning:
+ {
+ AssignClientState(client);
+ break;
+ }
+ case ClientStateGone:
+ case ClientStateRetained:
+ {
+ FreeClientState(client);
+ break;
+ }
+ default: break;
+ }
+} /* XSELinuxClientState */
+
+static char *XSELinuxKeywords[] = {
+#define XSELinuxKeywordComment 0
+ "#",
+#define XSELinuxKeywordProperty 1
+ "property",
+#define XSELinuxKeywordExtension 2
+ "extension",
+#define XSELinuxKeywordNonlocalContext 3
+ "nonlocal_context",
+#define XSELinuxKeywordRootWindowContext 4
+ "root_window_context",
+#define XSELinuxKeywordDefault 5
+ "default"
+};
+
+#define NUMKEYWORDS (sizeof(XSELinuxKeywords) / sizeof(char *))
+
+#ifndef __UNIXOS2__
+#define XSELinuxIsWhitespace(c) ( (c == ' ') || (c == '\t') || (c == '\n') )
+#else
+#define XSELinuxIsWhitespace(c) ( (c == ' ') || (c == '\t') || (c == '\n') || (c == '\r') )
+#endif
+
+static char *
+XSELinuxSkipWhitespace(
+ char *p)
+{
+ while (XSELinuxIsWhitespace(*p))
+ p++;
+ return p;
+} /* XSELinuxSkipWhitespace */
+
+static char *
+XSELinuxParseString(
+ char **rest)
+{
+ char *startOfString;
+ char *s = *rest;
+ char endChar = 0;
+
+ s = XSELinuxSkipWhitespace(s);
+
+ if (*s == '"' || *s == '\'')
+ {
+ endChar = *s++;
+ startOfString = s;
+ while (*s && (*s != endChar))
+ s++;
+ }
+ else
+ {
+ startOfString = s;
+ while (*s && !XSELinuxIsWhitespace(*s))
+ s++;
+ }
+ if (*s)
+ {
+ *s = '\0';
+ *rest = s + 1;
+ return startOfString;
+ }
+ else
+ {
+ *rest = s;
+ return (endChar) ? NULL : startOfString;
+ }
+} /* XSELinuxParseString */
+
+static int
+XSELinuxParseKeyword(
+ char **p)
+{
+ int i;
+ char *s = *p;
+ s = XSELinuxSkipWhitespace(s);
+ for (i = 0; i < NUMKEYWORDS; i++)
+ {
+ int len = strlen(XSELinuxKeywords[i]);
+ if (strncmp(s, XSELinuxKeywords[i], len) == 0)
+ {
+ *p = s + len;
+ return (i);
+ }
+ }
+ *p = s;
+ return -1;
+} /* XSELinuxParseKeyword */
+
+static Bool
+XSELinuxTypeIsValid(char *typename)
+{
+ security_context_t base, new;
+ context_t con;
+ Bool ret = FALSE;
+
+ /* get the server's context */
+ if (getcon(&base) < 0)
+ goto out;
+
+ /* make a new context-manipulation object */
+ con = context_new(base);
+ if (!con)
+ goto out_free;
+
+ /* set the role */
+ if (context_role_set(con, "object_r"))
+ goto out_free2;
+
+ /* set the type */
+ if (context_type_set(con, typename))
+ goto out_free2;
+
+ /* get a context string - note: context_str() returns a pointer
+ * to the string inside the context; the returned pointer should
+ * not be freed
+ */
+ new = context_str(con);
+ if (!new)
+ goto out_free2;
+
+ /* finally, check to see if it's valid */
+ if (security_check_context(new) == 0)
+ ret = TRUE;
+
+out_free2:
+ context_free(con);
+out_free:
+ freecon(base);
+out:
+ return ret;
+}
+
+static Bool
+XSELinuxParsePropertyTypeRule(char *p)
+{
+ int keyword;
+ char *propname = NULL, *propcopy = NULL;
+ char *typename = NULL, *typecopy = NULL;
+ char **newTypes;
+ Bool defaultPropertyType = FALSE;
+
+ /* get property name */
+ keyword = XSELinuxParseKeyword(&p);
+ if (keyword == XSELinuxKeywordDefault)
+ {
+ defaultPropertyType = TRUE;
+ }
+ else
+ {
+ propname = XSELinuxParseString(&p);
+ if (!propname || (strlen(propname) == 0))
+ {
+ return FALSE;
+ }
+ }
+
+ /* get the SELinux type corresponding to the property */
+ typename = XSELinuxParseString(&p);
+ if (!typename || (strlen(typename) == 0))
+ return FALSE;
+
+ /* validate the type */
+ if (XSELinuxTypeIsValid(typename) != TRUE)
+ return FALSE;
+
+ /* if it's the default property, save it to append to the end of the
+ * property types list
+ */
+ if (defaultPropertyType == TRUE)
+ {
+ if (XSELinuxPropertyTypeDefault != NULL)
+ {
+ return FALSE;
+ }
+ else
+ {
+ XSELinuxPropertyTypeDefault = (char *)xalloc(strlen(typename)+1);
+ if (!XSELinuxPropertyTypeDefault)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(XSELinuxPropertyTypeDefault, typename);
+ return TRUE;
+ }
+ }
+
+ /* insert the property and type into the propertyTypes array */
+ propcopy = (char *)xalloc(strlen(propname)+1);
+ if (!propcopy)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(propcopy, propname);
+
+ typecopy = (char *)xalloc(strlen(typename)+1);
+ if (!typecopy)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ xfree(propcopy);
+ return FALSE;
+ }
+ strcpy(typecopy, typename);
+
+ newTypes = (char **)xrealloc(propertyTypes, sizeof (char *) * ((propertyTypesCount+1) * 2));
+ if (!newTypes)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ xfree(propcopy);
+ xfree(typecopy);
+ return FALSE;
+ }
+
+ propertyTypesCount++;
+
+ newTypes[propertyTypesCount*2 - 2] = propcopy;
+ newTypes[propertyTypesCount*2 - 1] = typecopy;
+
+ propertyTypes = newTypes;
+
+ return TRUE;
+} /* XSELinuxParsePropertyTypeRule */
+
+static Bool
+XSELinuxParseExtensionTypeRule(char *p)
+{
+ int keyword;
+ char *extname = NULL, *extcopy = NULL;
+ char *typename = NULL, *typecopy = NULL;
+ char **newTypes;
+ Bool defaultExtensionType = FALSE;
+
+ /* get extension name */
+ keyword = XSELinuxParseKeyword(&p);
+ if (keyword == XSELinuxKeywordDefault)
+ {
+ defaultExtensionType = TRUE;
+ }
+ else
+ {
+ extname = XSELinuxParseString(&p);
+ if (!extname || (strlen(extname) == 0))
+ {
+ return FALSE;
+ }
+ }
+
+ /* get the SELinux type corresponding to the extension */
+ typename = XSELinuxParseString(&p);
+ if (!typename || (strlen(typename) == 0))
+ return FALSE;
+
+ /* validate the type */
+ if (XSELinuxTypeIsValid(typename) != TRUE)
+ return FALSE;
+
+ /* if it's the default extension, save it to append to the end of the
+ * extension types list
+ */
+ if (defaultExtensionType == TRUE)
+ {
+ if (XSELinuxExtensionTypeDefault != NULL)
+ {
+ return FALSE;
+ }
+ else
+ {
+ XSELinuxExtensionTypeDefault = (char *)xalloc(strlen(typename)+1);
+ if (!XSELinuxExtensionTypeDefault)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(XSELinuxExtensionTypeDefault, typename);
+ return TRUE;
+ }
+ }
+
+ /* insert the extension and type into the extensionTypes array */
+ extcopy = (char *)xalloc(strlen(extname)+1);
+ if (!extcopy)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(extcopy, extname);
+
+ typecopy = (char *)xalloc(strlen(typename)+1);
+ if (!typecopy)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ xfree(extcopy);
+ return FALSE;
+ }
+ strcpy(typecopy, typename);
+
+ newTypes = (char **)xrealloc(extensionTypes, sizeof(char *) *( (extensionTypesCount+1) * 2));
+ if (!newTypes)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ xfree(extcopy);
+ xfree(typecopy);
+ return FALSE;
+ }
+
+ extensionTypesCount++;
+
+ newTypes[extensionTypesCount*2 - 2] = extcopy;
+ newTypes[extensionTypesCount*2 - 1] = typecopy;
+
+ extensionTypes = newTypes;
+
+ return TRUE;
+} /* XSELinuxParseExtensionTypeRule */
+
+static Bool
+XSELinuxParseNonlocalContext(char *p)
+{
+ char *context;
+
+ context = XSELinuxParseString(&p);
+ if (!context || (strlen(context) == 0))
+ {
+ return FALSE;
+ }
+
+ if (XSELinuxNonlocalContextDefault != NULL)
+ {
+ return FALSE;
+ }
+
+ /* validate the context */
+ if (security_check_context(context))
+ {
+ return FALSE;
+ }
+
+ XSELinuxNonlocalContextDefault = (char *)xalloc(strlen(context)+1);
+ if (!XSELinuxNonlocalContextDefault)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(XSELinuxNonlocalContextDefault, context);
+
+ return TRUE;
+} /* XSELinuxParseNonlocalContext */
+
+static Bool
+XSELinuxParseRootWindowContext(char *p)
+{
+ char *context;
+
+ context = XSELinuxParseString(&p);
+ if (!context || (strlen(context) == 0))
+ {
+ return FALSE;
+ }
+
+ if (XSELinuxRootWindowContext != NULL)
+ {
+ return FALSE;
+ }
+
+ /* validate the context */
+ if (security_check_context(context))
+ {
+ return FALSE;
+ }
+
+ XSELinuxRootWindowContext = (char *)xalloc(strlen(context)+1);
+ if (!XSELinuxRootWindowContext)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ return FALSE;
+ }
+ strcpy(XSELinuxRootWindowContext, context);
+
+ return TRUE;
+} /* XSELinuxParseRootWindowContext */
+
+static Bool
+XSELinuxLoadConfigFile(void)
+{
+ FILE *f;
+ int lineNumber = 0;
+ char **newTypes;
+ Bool ret = FALSE;
+
+ if (!XSELINUXCONFIGFILE)
+ return FALSE;
+
+ /* some initial bookkeeping */
+ propertyTypesCount = extensionTypesCount = 0;
+ propertyTypes = extensionTypes = NULL;
+ XSELinuxPropertyTypeDefault = XSELinuxExtensionTypeDefault = NULL;
+ XSELinuxNonlocalContextDefault = NULL;
+ XSELinuxRootWindowContext = NULL;
+
+#ifndef __UNIXOS2__
+ f = fopen(XSELINUXCONFIGFILE, "r");
+#else
+ f = fopen((char*)__XOS2RedirRoot(XSELINUXCONFIGFILE), "r");
+#endif
+ if (!f)
+ {
+ ErrorF("Error opening XSELinux policy file %s\n", XSELINUXCONFIGFILE);
+ return FALSE;
+ }
+
+ while (!feof(f))
+ {
+ char buf[200];
+ Bool validLine;
+ char *p;
+
+ if (!(p = fgets(buf, sizeof(buf), f)))
+ break;
+ lineNumber++;
+
+ switch (XSELinuxParseKeyword(&p))
+ {
+ case XSELinuxKeywordComment:
+ validLine = TRUE;
+ break;
+
+ case XSELinuxKeywordProperty:
+ validLine = XSELinuxParsePropertyTypeRule(p);
+ break;
+
+ case XSELinuxKeywordExtension:
+ validLine = XSELinuxParseExtensionTypeRule(p);
+ break;
+
+ case XSELinuxKeywordNonlocalContext:
+ validLine = XSELinuxParseNonlocalContext(p);
+ break;
+
+ case XSELinuxKeywordRootWindowContext:
+ validLine = XSELinuxParseRootWindowContext(p);
+ break;
+
+ default:
+ validLine = (*p == '\0');
+ break;
+ }
+
+ if (!validLine)
+ {
+ ErrorF("XSELinux: Line %d of %s is invalid\n",
+ lineNumber, XSELINUXCONFIGFILE);
+ goto out;
+ }
+ }
+
+ /* check to make sure the default types and the nonlocal context
+ * were specified
+ */
+ if (XSELinuxPropertyTypeDefault == NULL)
+ {
+ ErrorF("XSELinux: No default property type specified\n");
+ goto out;
+ }
+ else if (XSELinuxExtensionTypeDefault == NULL)
+ {
+ ErrorF("XSELinux: No default extension type specified\n");
+ goto out;
+ }
+ else if (XSELinuxNonlocalContextDefault == NULL)
+ {
+ ErrorF("XSELinux: No default context for non-local clients specified\n");
+ goto out;
+ }
+ else if (XSELinuxRootWindowContext == NULL)
+ {
+ ErrorF("XSELinux: No context specified for the root window\n");
+ goto out;
+ }
+
+ /* Finally, append the default property and extension types to the
+ * bottoms of the propertyTypes and extensionTypes arrays, respectively.
+ * The 'name' of the property / extension is NULL.
+ */
+ newTypes = (char **)xrealloc(propertyTypes, sizeof(char *) *((propertyTypesCount+1) * 2));
+ if (!newTypes)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ goto out;
+ }
+ propertyTypesCount++;
+ newTypes[propertyTypesCount*2 - 2] = NULL;
+ newTypes[propertyTypesCount*2 - 1] = XSELinuxPropertyTypeDefault;
+ propertyTypes = newTypes;
+
+ newTypes = (char **)xrealloc(extensionTypes, sizeof(char *) *((extensionTypesCount+1) * 2));
+ if (!newTypes)
+ {
+ ErrorF("XSELinux: out of memory\n");
+ goto out;
+ }
+ extensionTypesCount++;
+ newTypes[extensionTypesCount*2 - 2] = NULL;
+ newTypes[extensionTypesCount*2 - 1] = XSELinuxExtensionTypeDefault;
+ extensionTypes = newTypes;
+
+ ret = TRUE;
+
+out:
+ fclose(f);
+ return ret;
+} /* XSELinuxLoadConfigFile */
+
+static void
+XSELinuxFreeConfigData(void)
+{
+ char **ptr;
+
+ /* Free all the memory in the table until we reach the NULL, then
+ * skip one past the NULL and free the default type. Then take care
+ * of some bookkeeping.
+ */
+ for (ptr = propertyTypes; *ptr; ptr++)
+ xfree(*ptr);
+ ptr++;
+ xfree(*ptr);
+
+ XSELinuxPropertyTypeDefault = NULL;
+ propertyTypesCount = 0;
+
+ xfree(propertyTypes);
+ propertyTypes = NULL;
+
+ /* ... and the same for the extension type table */
+ for (ptr = extensionTypes; *ptr; ptr++)
+ xfree(*ptr);
+ ptr++;
+ xfree(*ptr);
+
+ XSELinuxExtensionTypeDefault = NULL;
+ extensionTypesCount = 0;
+
+ xfree(extensionTypes);
+ extensionTypes = NULL;
+
+ /* finally, take care of the context for non-local connections */
+ xfree(XSELinuxNonlocalContextDefault);
+ XSELinuxNonlocalContextDefault = NULL;
+
+ /* ... and for the root window */
+ xfree(XSELinuxRootWindowContext);
+ XSELinuxRootWindowContext = NULL;
+} /* XSELinuxFreeConfigData */
+
+/* Extension dispatch functions */
+static int
+ProcXSELinuxDispatch(ClientPtr client)
+{
+ return BadRequest;
+} /* ProcXSELinuxDispatch */
+
+static void
+XSELinuxResetProc(ExtensionEntry *extEntry)
+{
+ FreeClientState(serverClient);
+
+ XSELinuxFreeConfigData();
+
+ audit_close(audit_fd);
+
+ avc_destroy();
+} /* XSELinuxResetProc */
+
+static void
+XSELinuxAVCAudit(void *auditdata,
+ security_class_t class,
+ char *msgbuf,
+ size_t msgbufsize)
+{
+ XSELinuxAuditRec *audit = (XSELinuxAuditRec*)auditdata;
+ ClientPtr client = audit->client;
+ char requestNum[8];
+ REQUEST(xReq);
+
+ if (stuff)
+ snprintf(requestNum, 8, "%d", stuff->reqType);
+
+ snprintf(msgbuf, msgbufsize, "%s%s%s%s%s%s",
+ stuff ? "request=" : "",
+ stuff ? requestNum : "",
+ audit->property ? " property=" : "",
+ audit->property ? audit->property : "",
+ audit->extension ? " extension=" : "",
+ audit->extension ? audit->extension : "");
+}
+
+static void
+XSELinuxAVCLog(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ VErrorF(fmt, ap);
+ va_end(ap);
+}
+
+/* XSELinuxExtensionSetup
+ *
+ * Set up the XSELinux Extension (pre-init)
+ */
+void
+XSELinuxExtensionSetup(INITARGS)
+{
+ /* Allocate the client private index */
+ clientPrivateIndex = AllocateClientPrivateIndex();
+ if (!AllocateClientPrivate(clientPrivateIndex,
+ sizeof (XSELinuxClientStateRec)))
+ FatalError("XSELinux: Failed to allocate client private.\n");
+
+ /* Allocate the extension private index */
+ extnsnPrivateIndex = AllocateExtensionPrivateIndex();
+ if (!AllocateExtensionPrivate(extnsnPrivateIndex, 0))
+ FatalError("XSELinux: Failed to allocate extension private.\n");
+}
+
+/* XSELinuxExtensionInit
+ *
+ * Initialize the XSELinux Extension
+ */
+void
+XSELinuxExtensionInit(INITARGS)
+{
+ ExtensionEntry *extEntry;
+ struct avc_log_callback alc = {XSELinuxAVCLog, XSELinuxAVCAudit};
+
+ if (!is_selinux_enabled())
+ {
+ ErrorF("SELinux Extension failed to load: SELinux not enabled\n");
+ return;
+ }
+
+ if (avc_init("xserver", NULL, &alc, NULL, NULL) < 0)
+ {
+ FatalError("couldn't initialize SELinux userspace AVC\n");
+ }
+
+ if (!AddCallback(&ClientStateCallback, XSELinuxClientState, NULL))
+ return;
+
+ /* Load the config file. If this fails, shut down the server,
+ * since an unknown security status is worse than no security.
+ *
+ * Note that this must come before we assign a security state
+ * for the serverClient, because the serverClient's root windows
+ * are assigned a context based on data in the config file.
+ */
+ if (XSELinuxLoadConfigFile() != TRUE)
+ {
+ FatalError("XSELinux: Failed to load security policy\n");
+ }
+
+ /* prepare for auditing */
+ audit_fd = audit_open();
+ if (audit_fd < 0)
+ {
+ FatalError("XSELinux: Failed to open the system audit log\n");
+ }
+
+ /* register security callbacks */
+ XaceRegisterCallback(XACE_CORE_DISPATCH, XSELinuxCoreDispatch, NULL);
+ XaceRegisterCallback(XACE_EXT_ACCESS, XSELinuxExtDispatch, NULL);
+ XaceRegisterCallback(XACE_EXT_DISPATCH, XSELinuxExtDispatch, NULL);
+ XaceRegisterCallback(XACE_RESOURCE_ACCESS, XSELinuxResLookup, NULL);
+ XaceRegisterCallback(XACE_MAP_ACCESS, XSELinuxMap, NULL);
+ XaceRegisterCallback(XACE_HOSTLIST_ACCESS, XSELinuxHostlist, NULL);
+ XaceRegisterCallback(XACE_BACKGRND_ACCESS, XSELinuxBackgrnd, NULL);
+ XaceRegisterCallback(XACE_DRAWABLE_ACCESS, XSELinuxDrawable, NULL);
+ XaceRegisterCallback(XACE_PROPERTY_ACCESS, XSELinuxProperty, NULL);
+ /* XaceRegisterCallback(XACE_DECLARE_EXT_SECURE, XSELinuxDeclare, NULL);
+ XaceRegisterCallback(XACE_DEVICE_ACCESS, XSELinuxDevice, NULL); */
+
+ /* register extension with server */
+ extEntry = AddExtension(XSELINUX_EXTENSION_NAME,
+ XSELinuxNumberEvents, XSELinuxNumberErrors,
+ ProcXSELinuxDispatch, ProcXSELinuxDispatch,
+ XSELinuxResetProc, StandardMinorOpcode);
+}
diff --git a/Xext/xselinux.h b/Xext/xselinux.h
new file mode 100644
index 0000000..eff6db5
--- /dev/null
+++ b/Xext/xselinux.h
@@ -0,0 +1,29 @@
+/************************************************************
+
+Author: Eamon Walsh <ewalsh at epoch.ncsc.mil>
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+this permission notice appear in supporting documentation. This permission
+notice shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+********************************************************/
+
+#ifndef _XSELINUX_H
+#define _XSELINUX_H
+
+#define XSELINUX_EXTENSION_NAME "SELinux"
+#define XSELINUX_MAJOR_VERSION 1
+#define XSELINUX_MINOR_VERSION 0
+#define XSELinuxNumberEvents 0
+#define XSELinuxNumberErrors 0
+
+#endif /* _XSELINUX_H */
diff-tree 81281cb298a5825bc7a2e692375a86199293bbbe (from 792e0f71c6a435b2e28f8a4cdcc790f3b982e62c)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date: Tue Dec 12 11:28:24 2006 +0000
Fix bad commit
diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index 9964980..39a5eda 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -694,7 +694,7 @@ winFixupPaths (void)
if (sizeof(xkbbasedir) > 0)
xkbbasedir[sizeof(xkbbasedir)-1] = 0;
XkbBaseDirectory = xkbbasedir;
- XkbBinDirectory = xkbbasedir
+ XkbBinDirectory = basedir;
}
#endif /* XKB */
#endif /* RELOCATE_PROJECTROOT */
diff-tree 792e0f71c6a435b2e28f8a4cdcc790f3b982e62c (from 27d4b84f268ac21601f7f52a7e257f70753396b3)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date: Mon Dec 11 14:54:49 2006 +0000
Fix Xming fails to use xkb bug
bug #5049 (Colin Harrison)
diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
index b64eee9..9964980 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -694,6 +694,7 @@ winFixupPaths (void)
if (sizeof(xkbbasedir) > 0)
xkbbasedir[sizeof(xkbbasedir)-1] = 0;
XkbBaseDirectory = xkbbasedir;
+ XkbBinDirectory = xkbbasedir
}
#endif /* XKB */
#endif /* RELOCATE_PROJECTROOT */
diff-tree 27d4b84f268ac21601f7f52a7e257f70753396b3 (from fb8364bca30fe9268e807b0a9a3ebf875ee1fce2)
Author: Alan Hourihane <alanh at fairlite.demon.co.uk>
Date: Mon Dec 11 14:50:08 2006 +0000
Fix Tooltip from minimized clients
Bug #3678 (Colin Harrison)
diff --git a/hw/xwin/winmultiwindowwindow.c b/hw/xwin/winmultiwindowwindow.c
index dc8e38b..037c881 100644
--- a/hw/xwin/winmultiwindowwindow.c
+++ b/hw/xwin/winmultiwindowwindow.c
@@ -982,11 +982,10 @@ winAdjustXWindow (WindowPtr pWin, HWND h
/*
* If the Windows window is minimized, its WindowRect has
* meaningless values so we don't adjust X window to it.
- * Instead we put the X window to the bottom in Z order to
- * be obscured by other windows.
*/
- vlist[0] = Below;
- return ConfigureWindow (pWin, CWStackMode, vlist, wClient(pWin));
+ vlist[0] = 0;
+ vlist[1] = 0;
+ return ConfigureWindow (pWin, CWX | CWY, vlist, wClient(pWin));
}
pDraw = &pWin->drawable;
diff-tree fb8364bca30fe9268e807b0a9a3ebf875ee1fce2 (from d56249a15ead51ad4d2117d5538ada24af05b693)
Author: Adam Jackson <ajax at benzedrine.nwnk.net>
Date: Sun Dec 10 11:24:05 2006 -0500
Accept EDID > 1.3 but < 2.0 if we find it, assume it's compatible.
diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index 11b5e26..13083dd 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -32,9 +32,6 @@
#include "propertyst.h"
#include "xf86DDC.h"
-
-
-
#define EDID1_ATOM_NAME "XFree86_DDC_EDID1_RAWDATA"
#define EDID2_ATOM_NAME "XFree86_DDC_EDID2_RAWDATA"
#define VDIF_ATOM_NAME "XFree86_DDC_VDIF_RAWDATA"
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index c58bb2f..7b4b2b9 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -304,16 +304,18 @@ get_detailed_timing_section(Uchar *c, st
r->misc = MISC;
}
+#define MAX_EDID_MINOR 3
static Bool
validate_version(int scrnIndex, struct edid_version *r)
{
if (r->version != 1)
return FALSE;
- if (r->revision > 3) {
- xf86DrvMsg(scrnIndex, X_ERROR,"EDID Version 1.%i not yet supported\n",
- r->revision);
- return FALSE;
- }
+
+ if (r->revision > MAX_EDID_MINOR)
+ xf86DrvMsg(scrnIndex, X_WARNING,
+ "Assuming version 1.%d is compatible with 1.%d\n",
+ r->revision, MAX_EDID_MINOR);
+
return TRUE;
}
diff-tree d56249a15ead51ad4d2117d5538ada24af05b693 (from parents)
Merge: f1f8df1889ab656bb57596e2f85408f15f42cd5d ec84f72d077eaf2e7768a1f5398f65a5e1714d08
Author: Jeremy C. Reed <reed at glacier.reedmedia.net>
Date: Fri Dec 8 15:52:37 2006 -0600
Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver
diff-tree f1f8df1889ab656bb57596e2f85408f15f42cd5d (from f17e3c34dfd1f1418440bdebf45764e4dbf550f0)
Author: Jeremy C. Reed <reed at glacier.reedmedia.net>
Date: Fri Dec 8 15:51:44 2006 -0600
For MANDEFS, also replace __mandir__ for $(mandir) which includes
the prefix. Noticed wrong path to man pages on both Ubuntu and on
NetBSD with pkgsrc.
diff --git a/cpprules.in b/cpprules.in
index 667b133..4901ea8 100644
--- a/cpprules.in
+++ b/cpprules.in
@@ -34,6 +34,7 @@ MANDEFS = \
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
-D__drivermansuffix__=$(DRIVER_MAN_SUFFIX) \
-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
+ -D__mandir__=$(mandir) \
-D__projectroot__=$(prefix) \
-D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME)
diff --git a/hw/xfree86/doc/man/Xorg.man.pre b/hw/xfree86/doc/man/Xorg.man.pre
index b7fa990..d91b796 100644
--- a/hw/xfree86/doc/man/Xorg.man.pre
+++ b/hw/xfree86/doc/man/Xorg.man.pre
@@ -580,7 +580,7 @@ Client error message database.
.B __projectroot__/lib/X11/app-defaults/\(**
Client resource specifications.
.TP 30
-.B __projectroot__/man/man?/\(**
+.B __mandir__/man?/\(**
Manual pages.
.TP 30
.BI /etc/X n .hosts
diff-tree ec84f72d077eaf2e7768a1f5398f65a5e1714d08 (from e59aeac1ff13ea53f44dba1ac7800f37f4532ca1)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 8 21:31:47 2006 +0200
XkbCopyKeymap: always initialise map and preserve
If we don't have map or preserve in the source map, make sure the
destination is initialised to NULL, and freed if it's a valid type.
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 321bf2e..c9c5ed0 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -1144,6 +1144,11 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
memcpy(dtype->map, stype->map,
stype->map_count * sizeof(XkbKTMapEntryRec));
}
+ else {
+ if (dtype->map && i < dst->map->num_types)
+ xfree(dtype->map);
+ dtype->map = NULL;
+ }
if (stype->preserve) {
if (stype->map_count != dtype->map_count &&
@@ -1168,17 +1173,22 @@ XkbCopyKeymap(XkbDescPtr src, XkbDescPtr
memcpy(dtype->preserve, stype->preserve,
stype->map_count * sizeof(XkbModsRec));
}
+ else {
+ if (dtype->preserve && i < dst->map->num_types)
+ xfree(dtype->preserve);
+ dtype->preserve = NULL;
+ }
dtype->map_count = stype->map_count;
}
else {
- if (dtype->map_count) {
+ if (dtype->map_count && i < dst->map->num_types) {
if (dtype->map)
xfree(dtype->map);
if (dtype->preserve)
xfree(dtype->preserve);
- dtype->map_count = 0;
}
+ dtype->map_count = 0;
dtype->map = NULL;
dtype->preserve = NULL;
}
diff-tree e59aeac1ff13ea53f44dba1ac7800f37f4532ca1 (from 729fca33a417ae3dfb180caf0ea8946ef9eee1df)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 23:44:06 2006 +0200
xfree86: remove stray debug line
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 5469426..05e62f1 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -789,8 +789,6 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
xEvent ke;
int i = 0, j = 0, nevents = 0;
- ErrorF("releasekeys: called on device %s (%d)\n", pDev->name, pDev->id);
-
if (!pDev || !pDev->key)
return;
diff-tree 729fca33a417ae3dfb180caf0ea8946ef9eee1df (from 4ea6dfb984063117eef5c2f931205b1c3eb3108b)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date: Thu Dec 7 12:09:18 2006 +0100
Revert "xfree86 DDX: Delete DDX screens in ddxGiveUp()."
This reverts commit a6381e69845f58d2b3282992b1f881015190f1bc.
See https://bugs.freedesktop.org/show_bug.cgi?id=9224 .
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 68d69c5..ff878d5 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1119,9 +1119,6 @@ ddxGiveUp()
DGAShutdown();
#endif
- while (xf86NumScreens)
- xf86DeleteScreen(xf86NumScreens - 1, 0);
-
xf86CloseConsole();
xf86CloseLog();
diff-tree 4ea6dfb984063117eef5c2f931205b1c3eb3108b (from 4cba1a1ebfbdd7ab489b1b1ffb6656cbe88eb61e)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 23:24:39 2006 +0200
whitespace police
diff --git a/config/config.c b/config/config.c
index 66a15fc..523327d 100644
--- a/config/config.c
+++ b/config/config.c
@@ -357,7 +357,7 @@ configSetup(void)
if (!dbus_connection_add_filter(configData->connection, configFilter,
configData, NULL)) {
-
+
ErrorF("[dbus] couldn't add signal filter: %s (%s)\n", error.name,
error.message);
dbus_error_free(&error);
diff-tree 4cba1a1ebfbdd7ab489b1b1ffb6656cbe88eb61e (from 0c5dab5c8eaa174f28054b9d20244a709c015210)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 23:21:38 2006 +0200
config: bus reconnect support
Add support for reconnecting to the bus when it restarts.
diff --git a/config/config.c b/config/config.c
index 9ecdbb4..66a15fc 100644
--- a/config/config.c
+++ b/config/config.c
@@ -36,10 +36,10 @@
/* the above comment lies. there is no better way. */
#include "input.h"
#include "inputstr.h"
-#include "config.h"
+#include "hotplug.h"
#include "os.h"
-#define MATCH_RULE "type='method_call',interface='org.x.config.input'"
+#define CONFIG_MATCH_RULE "type='method_call',interface='org.x.config.input'"
#define MALFORMED_MSG "[config] malformed message, dropping"
#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \
@@ -50,6 +50,9 @@
ret = BadValue; \
goto unwind; }
+/* How often to attempt reconnecting when we get booted off the bus. */
+#define RECONNECT_DELAY 10000 /* in ms */
+
struct config_data {
int fd;
DBusConnection *connection;
@@ -59,6 +62,8 @@ struct config_data {
static struct config_data *configData;
+static CARD32 configReconnect(OsTimerPtr timer, CARD32 time, pointer arg);
+
static void
configWakeupHandler(pointer blockData, int err, pointer pReadMask)
{
@@ -73,6 +78,18 @@ configBlockHandler(pointer data, struct
{
}
+static void
+configTeardown(void)
+{
+ if (configData) {
+ RemoveGeneralSocket(configData->fd);
+ RemoveBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
+ configData);
+ xfree(configData);
+ configData = NULL;
+ }
+}
+
static int
configAddDevice(DBusMessage *message, DBusMessageIter *iter, DBusError *error)
{
@@ -226,23 +243,22 @@ configMessage(DBusConnection *connection
ret = configAddDevice(message, &iter, &error);
else if (strcmp(dbus_message_get_member(message), "remove") == 0)
ret = configRemoveDevice(message, &iter, &error);
- }
-
- if (ret != BadDrawable && ret != BadAlloc) {
- reply = dbus_message_new_method_return(message);
- dbus_message_iter_init_append(reply, &iter);
+ if (ret != BadDrawable && ret != BadAlloc) {
+ reply = dbus_message_new_method_return(message);
+ dbus_message_iter_init_append(reply, &iter);
+
+ if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
+ ErrorF("[config] couldn't append to iterator\n");
+ dbus_error_free(&error);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ if (!dbus_connection_send(bus, reply, NULL))
+ ErrorF("[config] failed to send reply\n");
+ dbus_connection_flush(bus);
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
- ErrorF("[config] couldn't append to iterator\n");
- dbus_error_free(&error);
- return DBUS_HANDLER_RESULT_HANDLED;
+ dbus_message_unref(reply);
}
-
- if (!dbus_connection_send(bus, reply, NULL))
- ErrorF("[config] failed to send reply\n");
- dbus_connection_flush(bus);
-
- dbus_message_unref(reply);
}
dbus_error_free(&error);
@@ -255,16 +271,40 @@ configMessage(DBusConnection *connection
return DBUS_HANDLER_RESULT_HANDLED;
}
-void
-configInitialise()
+/**
+ * This is a filter, which only handles the disconnected signal, which
+ * doesn't go to the normal message handling function. This takes
+ * precedence over the message handling function, so have have to be
+ * careful to ignore anything we don't want to deal with here.
+ *
+ * Yes, this is brutally stupid.
+ */
+static DBusHandlerResult
+configFilter(DBusConnection *connection, DBusMessage *message, void *closure)
+{
+ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL,
+ "Disconnected")) {
+ ErrorF("[dbus] disconnected from bus\n");
+ TimerSet(NULL, 0, RECONNECT_DELAY, configReconnect, NULL);
+ configTeardown();
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static Bool
+configSetup(void)
{
DBusError error;
DBusObjectPathVTable vtable = { .message_function = configMessage };
if (!configData)
configData = (struct config_data *) xcalloc(sizeof(struct config_data), 1);
- if (!configData)
- return;
+ if (!configData) {
+ ErrorF("[dbus] failed to allocate data struct.\n");
+ return FALSE;
+ }
dbus_error_init(&error);
configData->connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
@@ -272,15 +312,20 @@ configInitialise()
ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name,
error.message);
dbus_error_free(&error);
- return;
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
}
+ dbus_connection_set_exit_on_disconnect(configData->connection, FALSE);
+
if (!dbus_connection_get_unix_fd(configData->connection, &configData->fd)) {
dbus_connection_unref(configData->connection);
ErrorF("[dbus] couldn't get fd for bus\n");
dbus_error_free(&error);
- configData->fd = -1;
- return;
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
}
snprintf(configData->busname, sizeof(configData->busname),
@@ -291,12 +336,13 @@ configInitialise()
error.name, error.message);
dbus_error_free(&error);
dbus_connection_unref(configData->connection);
- configData->fd = -1;
- return;
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
}
/* blocks until we get a reply. */
- dbus_bus_add_match(configData->connection, MATCH_RULE, &error);
+ dbus_bus_add_match(configData->connection, CONFIG_MATCH_RULE, &error);
if (dbus_error_is_set(&error)) {
ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name,
error.message);
@@ -304,8 +350,25 @@ configInitialise()
dbus_bus_release_name(configData->connection, configData->busname,
&error);
dbus_connection_unref(configData->connection);
- configData->fd = -1;
- return;
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
+ }
+
+ if (!dbus_connection_add_filter(configData->connection, configFilter,
+ configData, NULL)) {
+
+ ErrorF("[dbus] couldn't add signal filter: %s (%s)\n", error.name,
+ error.message);
+ dbus_error_free(&error);
+ dbus_bus_release_name(configData->connection, configData->busname,
+ &error);
+ dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
+ &error);
+ dbus_connection_unref(configData->connection);
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
}
snprintf(configData->busobject, sizeof(configData->busobject),
@@ -314,13 +377,15 @@ configInitialise()
configData->busobject, &vtable,
configData->connection)) {
ErrorF("[dbus] couldn't register object path\n");
- configData->fd = -1;
dbus_bus_release_name(configData->connection, configData->busname,
&error);
- dbus_bus_remove_match(configData->connection, MATCH_RULE, &error);
+ dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
+ &error);
dbus_connection_unref(configData->connection);
dbus_error_free(&error);
- return;
+ xfree(configData);
+ configData = NULL;
+ return FALSE;
}
DebugF("[dbus] registered object path %s\n", configData->busobject);
@@ -330,6 +395,23 @@ configInitialise()
RegisterBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
configData);
+
+ return TRUE;
+}
+
+static CARD32
+configReconnect(OsTimerPtr timer, CARD32 time, pointer arg)
+{
+ if (configSetup())
+ return 0;
+ else
+ return RECONNECT_DELAY;
+}
+
+void
+configInitialise()
+{
+ TimerSet(NULL, 0, 1, configReconnect, NULL);
}
void
@@ -341,16 +423,15 @@ configFini()
dbus_error_init(&error);
dbus_connection_unregister_object_path(configData->connection,
configData->busobject);
- dbus_bus_remove_match(configData->connection, MATCH_RULE, &error);
+ dbus_connection_remove_filter(configData->connection, configFilter,
+ configData);
+ dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
+ &error);
dbus_bus_release_name(configData->connection, configData->busname,
&error);
dbus_connection_unref(configData->connection);
- RemoveGeneralSocket(configData->fd);
- RemoveBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
- configData);
- xfree(configData);
- configData = NULL;
dbus_error_free(&error);
+ configTeardown();
}
}
diff-tree 0c5dab5c8eaa174f28054b9d20244a709c015210 (from 72e7f2ac6cf0db474d0defa7918f2a3ba76c0e46)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 23:21:15 2006 +0200
config: move config.h to hotplug.h
Also, move configInitialise to after OsInit, since the next commit will
make it use a timer.
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 4c5a9b7..0a761eb 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -130,7 +130,6 @@ int ProcInitialConnection();
#include "dispatch.h"
#include "swaprep.h"
#include "swapreq.h"
-#include "config.h"
#ifdef PANORAMIX
#include "panoramiX.h"
#include "panoramiXsrv.h"
diff --git a/dix/main.c b/dix/main.c
index 077fdea..3a77533 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -98,7 +98,7 @@ Equipment Corporation.
#include <X11/fonts/font.h>
#include "opaque.h"
#include "servermd.h"
-#include "config.h"
+#include "hotplug.h"
#include "site.h"
#include "dixfont.h"
#include "extnsionst.h"
@@ -309,9 +309,9 @@ main(int argc, char *argv[], char *envp[
DPMSPowerLevel = 0;
#endif
InitBlockAndWakeupHandlers();
- configInitialise();
/* Perform any operating system dependent initializations you'd like */
- OsInit();
+ OsInit();
+ configInitialise();
if(serverGeneration == 1)
{
CreateWellKnownSockets();
diff --git a/include/Makefile.am b/include/Makefile.am
index 9f07fa6..4289b81 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -7,7 +7,7 @@ sdk_HEADERS = \
closure.h \
colormap.h \
colormapst.h \
- config.h \
+ hotplug.h \
cursor.h \
cursorstr.h \
dix.h \
diff --git a/include/config.h b/include/config.h
deleted file mode 100644
index 0c304b1..0000000
--- a/include/config.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright © 2006 Daniel Stone
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the copyright holders and/or authors
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission. The copyright holders
- * and/or authors make no representations about the suitability of this
- * software for any purpose. It is provided "as is" without express or
- * implied warranty.
- *
- * THE COPYRIGHT HOLDERS AND/OR AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND/OR AUTHORS BE LIABLE
- * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
- * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-void configInitialise(void);
-void configFini(void);
-void configDispatch(void);
-
-#endif /* CONFIG_H */
diff --git a/include/hotplug.h b/include/hotplug.h
new file mode 100644
index 0000000..0c304b1
--- /dev/null
+++ b/include/hotplug.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright © 2006 Daniel Stone
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the copyright holders and/or authors
+ * not be used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. The copyright holders
+ * and/or authors make no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS AND/OR AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND/OR AUTHORS BE LIABLE
+ * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+void configInitialise(void);
+void configFini(void);
+void configDispatch(void);
+
+#endif /* CONFIG_H */
diff-tree 72e7f2ac6cf0db474d0defa7918f2a3ba76c0e46 (from c458a70d650bd62b8f4706f022d1f3f347636db1)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 23:18:52 2006 +0200
GetPointerEvents: always send valuator events for MotionNotify
Always chase a DeviceMotionNotify event with a DeviceValuator, which is
not required in the spec, but will silently break the lib if you don't
include.
diff --git a/dix/getevents.c b/dix/getevents.c
index 9c4ed0e..0150d66 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -484,6 +484,8 @@ GetPointerEvents(xEvent *events, DeviceI
int num_events = 0, final_valuator = 0;
CARD32 ms = 0;
deviceKeyButtonPointer *kbp = NULL;
+ /* Thanks to a broken lib, we _always_ have to chase DeviceMotionNotifies
+ * with DeviceValuators. */
Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
DeviceIntPtr cp = inputInfo.pointer;
int x = 0, y = 0;
@@ -500,15 +502,16 @@ GetPointerEvents(xEvent *events, DeviceI
else
num_events = 1;
+ if (type == MotionNotify && num_valuators <= 0) {
+ return 0;
+ }
+
/* Do we need to send a DeviceValuator event? */
- if ((num_valuators + first_valuator) > 2 && sendValuators) {
+ if (sendValuators) {
if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
num_valuators = MAX_VALUATOR_EVENTS * 6;
num_events += ((num_valuators - 1) / 6) + 1;
}
- else if (type == MotionNotify && num_valuators <= 0) {
- return 0;
- }
final_valuator = num_valuators + first_valuator;
@@ -614,7 +617,7 @@ GetPointerEvents(xEvent *events, DeviceI
kbp->root_y = y;
events++;
- if (final_valuator > 2 && sendValuators) {
+ if (sendValuators) {
kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators);
events = getValuatorEvents(events, pDev, first_valuator,
diff-tree c458a70d650bd62b8f4706f022d1f3f347636db1 (from edabf45425f9ed79547f918cc0dfff4c268de386)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Wed Dec 6 20:30:44 2006 +0200
GetPointerEvents: fix typo
Fix typo that resulted in inverted axes when using an absolute positioning
device that didn't report y, and thus relied on the previous value.
diff --git a/dix/getevents.c b/dix/getevents.c
index 4154262..9c4ed0e 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -540,7 +540,7 @@ GetPointerEvents(xEvent *events, DeviceI
}
else {
if (pDev->coreEvents)
- x = cp->valuator->lasty;
+ y = cp->valuator->lasty;
else
y = pDev->valuator->lasty;
}
diff-tree edabf45425f9ed79547f918cc0dfff4c268de386 (from 8724af248cd6c93182fecd060fed09a556361080)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Sat Dec 2 16:37:19 2006 +0200
configure.ac: add CONFIG_LIB to Xvfb
diff --git a/configure.ac b/configure.ac
index 851194c..002be62 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1059,7 +1059,7 @@ AC_MSG_RESULT([$XVFB])
AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes])
if test "x$XVFB" = xyes; then
- XVFB_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB $LIBS"
+ XVFB_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $XTRAP_LIB $RECORD_LIB $GLX_LIBS $RENDER_LIB $RANDR_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $XPSTUBS_LIB $CWRAP_LIB $OS_LIB $LIBS"
AC_SUBST([XVFB_LIBS])
fi
diff-tree 8724af248cd6c93182fecd060fed09a556361080 (from 2f0a800ffdc881cdb3adf84f1ed97bbb63cba34c)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Sat Dec 2 16:20:34 2006 +0200
kdrive/mga: fix compiler warning
Change a case that only made one test for an if, preventing the compiler
warning about all other PICT_* types being unsupported.
diff --git a/hw/kdrive/mga/g400_composite.c b/hw/kdrive/mga/g400_composite.c
index 671e517..da2e8b8 100644
--- a/hw/kdrive/mga/g400_composite.c
+++ b/hw/kdrive/mga/g400_composite.c
@@ -286,10 +286,8 @@ mgaCheckComposite(int op, PicturePtr pSr
if (pMaskPicture->componentAlpha)
MGA_FALLBACK(("Component alpha unsupported"));
- switch (pDstPicture->format) {
- case PICT_a8:
+ if (pDstPicture->format == PICT_a8)
MGA_FALLBACK(("render to A8 unsupported"));
- }
return TRUE;
}
diff-tree 2f0a800ffdc881cdb3adf84f1ed97bbb63cba34c (from 99378b58dbc63160382ad9c41f9cb0dd2a24e9d1)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Mon Nov 27 22:22:53 2006 +0200
config: move to block/wakeup handler
diff --git a/config/config.c b/config/config.c
index 05757e2..9ecdbb4 100644
--- a/config/config.c
+++ b/config/config.c
@@ -50,18 +50,27 @@
ret = BadValue; \
goto unwind; }
-static DBusConnection *configConnection = NULL;
-static int configfd = -1;
-static char busobject[32] = { 0 };
-static char busname[64] = { 0 };
+struct config_data {
+ int fd;
+ DBusConnection *connection;
+ char busobject[32];
+ char busname[64];
+};
-void
-configDispatch()
+static struct config_data *configData;
+
+static void
+configWakeupHandler(pointer blockData, int err, pointer pReadMask)
{
- if (!configConnection)
- return;
+ struct config_data *data = blockData;
- dbus_connection_read_write_dispatch(configConnection, 0);
+ if (data->connection && FD_ISSET(data->fd, (fd_set *) pReadMask))
+ dbus_connection_read_write_dispatch(data->connection, 0);
+}
+
+static void
+configBlockHandler(pointer data, struct timeval **tv, pointer pReadMask)
+{
}
static int
@@ -249,68 +258,78 @@ configMessage(DBusConnection *connection
void
configInitialise()
{
- DBusConnection *bus = NULL;
DBusError error;
DBusObjectPathVTable vtable = { .message_function = configMessage };
- configConnection = NULL;
+ if (!configData)
+ configData = (struct config_data *) xcalloc(sizeof(struct config_data), 1);
+ if (!configData)
+ return;
dbus_error_init(&error);
- bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
- if (!bus || dbus_error_is_set(&error)) {
+ configData->connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
+ if (!configData->connection || dbus_error_is_set(&error)) {
ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name,
error.message);
dbus_error_free(&error);
return;
}
- if (!dbus_connection_get_unix_fd(bus, &configfd)) {
- dbus_connection_unref(bus);
+ if (!dbus_connection_get_unix_fd(configData->connection, &configData->fd)) {
+ dbus_connection_unref(configData->connection);
ErrorF("[dbus] couldn't get fd for bus\n");
dbus_error_free(&error);
- configfd = -1;
+ configData->fd = -1;
return;
}
- snprintf(busname, sizeof(busname), "org.x.config.display%d", atoi(display));
- if (!dbus_bus_request_name(bus, busname, 0, &error) ||
- dbus_error_is_set(&error)) {
+ snprintf(configData->busname, sizeof(configData->busname),
+ "org.x.config.display%d", atoi(display));
+ if (!dbus_bus_request_name(configData->connection, configData->busname,
+ 0, &error) || dbus_error_is_set(&error)) {
ErrorF("[dbus] couldn't take over org.x.config: %s (%s)\n",
error.name, error.message);
dbus_error_free(&error);
- dbus_connection_unref(bus);
- configfd = -1;
+ dbus_connection_unref(configData->connection);
+ configData->fd = -1;
return;
}
/* blocks until we get a reply. */
- dbus_bus_add_match(bus, MATCH_RULE, &error);
+ dbus_bus_add_match(configData->connection, MATCH_RULE, &error);
if (dbus_error_is_set(&error)) {
ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name,
error.message);
dbus_error_free(&error);
- dbus_bus_release_name(bus, busname, &error);
- dbus_connection_unref(bus);
- configfd = -1;
+ dbus_bus_release_name(configData->connection, configData->busname,
+ &error);
+ dbus_connection_unref(configData->connection);
+ configData->fd = -1;
return;
}
- snprintf(busobject, sizeof(busobject), "/org/x/config/%d", atoi(display));
- if (!dbus_connection_register_object_path(bus, busobject, &vtable, bus)) {
+ snprintf(configData->busobject, sizeof(configData->busobject),
+ "/org/x/config/%d", atoi(display));
+ if (!dbus_connection_register_object_path(configData->connection,
+ configData->busobject, &vtable,
+ configData->connection)) {
ErrorF("[dbus] couldn't register object path\n");
- configfd = -1;
- dbus_bus_release_name(bus, busname, &error);
- dbus_bus_remove_match(bus, MATCH_RULE, &error);
- dbus_connection_unref(bus);
+ configData->fd = -1;
+ dbus_bus_release_name(configData->connection, configData->busname,
+ &error);
+ dbus_bus_remove_match(configData->connection, MATCH_RULE, &error);
+ dbus_connection_unref(configData->connection);
dbus_error_free(&error);
return;
}
- DebugF("[dbus] registered object path %s\n", busobject);
+ DebugF("[dbus] registered object path %s\n", configData->busobject);
dbus_error_free(&error);
- configConnection = bus;
- AddGeneralSocket(configfd);
+ AddGeneralSocket(configData->fd);
+
+ RegisterBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
+ configData);
}
void
@@ -318,15 +337,19 @@ configFini()
{
DBusError error;
- if (configConnection) {
+ if (configData) {
dbus_error_init(&error);
- dbus_connection_unregister_object_path(configConnection, busobject);
- dbus_bus_remove_match(configConnection, MATCH_RULE, &error);
- dbus_bus_release_name(configConnection, busname, &error);
- dbus_connection_unref(configConnection);
- RemoveGeneralSocket(configfd);
- configConnection = NULL;
- configfd = -1;
+ dbus_connection_unregister_object_path(configData->connection,
+ configData->busobject);
+ dbus_bus_remove_match(configData->connection, MATCH_RULE, &error);
+ dbus_bus_release_name(configData->connection, configData->busname,
+ &error);
+ dbus_connection_unref(configData->connection);
+ RemoveGeneralSocket(configData->fd);
+ RemoveBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
+ configData);
+ xfree(configData);
+ configData = NULL;
dbus_error_free(&error);
}
}
@@ -334,11 +357,6 @@ configFini()
#else /* !HAVE_DBUS */
void
-configDispatch()
-{
-}
-
-void
configInitialise()
{
}
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 0a93c3b..4c5a9b7 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -426,9 +426,6 @@ Dispatch(void)
nready = WaitForSomething(clientReady);
- /* this is an enormous hack and NEEDS TO GO AWAY. */
- configDispatch();
-
#ifdef SMART_SCHEDULE
if (nready && !SmartScheduleDisable)
{
diff-tree 99378b58dbc63160382ad9c41f9cb0dd2a24e9d1 (from 8884a73a3f4efa8276c5e38b9573201574c4f1f6)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Mon Nov 27 22:22:33 2006 +0200
kdrive/tslib: remove vendor-specific hacks
Parts of the KDrive merge accidentally contained a bunch of
vendor-specific hacks; sorry.
diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c
index 44b4b54..41b74fa 100644
--- a/hw/kdrive/linux/tslib.c
+++ b/hw/kdrive/linux/tslib.c
@@ -75,10 +75,7 @@ TsRead (int fd, void *closure)
while (ts_read(private->tsDev, &event, 1) == 1) {
if (event.pressure) {
- if (event.pressure > pi->dixdev->absolute->button_threshold)
- flags = KD_BUTTON_8;
- else
- flags = KD_BUTTON_1;
+ flags = KD_BUTTON_1;
/*
* Here we test for the touch screen driver actually being on the
@@ -113,9 +110,8 @@ TsRead (int fd, void *closure)
static Status
TslibEnable (KdPointerInfo *pi)
{
- struct TslibPrivate *private = pi->driverPrivate;
+ struct TslibPrivate *private = pi->driverPrivate;
- private->holdThumbEvents = 1;
private->raw_event_hook = NULL;
private->raw_event_closure = NULL;
private->tsDev = ts_open(pi->path, 0);
@@ -126,9 +122,6 @@ TslibEnable (KdPointerInfo *pi)
close(private->fd);
return BadAlloc;
}
- if (pi->dixdev && pi->dixdev->absolute &&
- pi->dixdev->absolute->button_threshold == 0)
- pi->dixdev->absolute->button_threshold = 115;
KdRegisterFd(private->fd, TsRead, pi);
@@ -141,12 +134,12 @@ TslibDisable (KdPointerInfo *pi)
{
struct TslibPrivate *private = pi->driverPrivate;
- if (private->fd) {
- KdUnregisterFd(pi, private->fd);
- close(private->fd);
- }
+ if (private->fd)
+ KdUnregisterFd(pi, private->fd, TRUE);
+
if (private->tsDev)
ts_close(private->tsDev);
+
private->fd = 0;
private->tsDev = NULL;
}
@@ -156,7 +149,6 @@ static Status
TslibInit (KdPointerInfo *pi)
{
int fd = 0, i = 0;
- char devpath[PATH_MAX], devname[TS_NAME_SIZE];
DIR *inputdir = NULL;
struct dirent *inputent = NULL;
struct tsdev *tsDev = NULL;
diff-tree 8884a73a3f4efa8276c5e38b9573201574c4f1f6 (from f2903c12bb4bb0b7c94b96c55af8fa55507f9d7d)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Mon Nov 27 22:39:56 2006 +0200
xfree86/input: re-add support for disabling drag events
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index be3368d..16e330d 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -90,16 +90,6 @@
#include "mi.h"
-/******************************************************************************
- * debugging macro
- *****************************************************************************/
-#ifdef DEBUG
-static int debug_level = 0;
-#define DBG(lvl, f) {if ((lvl) <= debug_level) f;}
-#else
-#define DBG(lvl, f)
-#endif
-
xEvent *xf86Events = NULL;
static Bool
@@ -140,33 +130,6 @@ xf86ProcessCommonOptions(LocalDevicePtr
}
}
-void
-xf86AlwaysCoreControl(DeviceIntPtr pDev, IntegerCtrl *control)
-{
-}
-
-/***********************************************************************
- *
- * xf86XinputFinalizeInit --
- *
- * Create and initialize an integer feedback to control the always
- * core feature.
- *
- ***********************************************************************
- */
-void
-xf86XinputFinalizeInit(DeviceIntPtr dev)
-{
- LocalDevicePtr local = (LocalDevicePtr)dev->public.devicePrivate;
-
- if (InitIntegerFeedbackClassDeviceStruct(dev, xf86AlwaysCoreControl) == FALSE) {
- ErrorF("Unable to init integer feedback for always core feature\n");
- } else {
- local->always_core_feedback = dev->intfeed;
- dev->intfeed->ctrl.integer_displayed = (local->flags & XI86_ALWAYS_CORE) ? 1 : 0;
- }
-}
-
/***********************************************************************
*
* xf86ActivateDevice --
@@ -193,8 +156,6 @@ xf86ActivateDevice(LocalDevicePtr local)
dev->public.devicePrivate = (pointer) local;
local->dev = dev;
- xf86XinputFinalizeInit(dev);
-
dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
RegisterOtherDevice(dev);
@@ -435,9 +396,9 @@ xf86PostMotionEvent(DeviceIntPtr device,
va_list var;
int i = 0, nevents = 0;
Bool drag = xf86SendDragEvents(device);
- LocalDevicePtr local = (LocalDevicePtr) device->public.devicePrivate;
int *valuators = NULL;
int flags = 0;
+ xEvent *xE = NULL;
if (is_absolute)
flags = POINTER_ABSOLUTE;
@@ -460,8 +421,14 @@ xf86PostMotionEvent(DeviceIntPtr device,
flags, first_valuator, num_valuators,
valuators);
- for (i = 0; i < nevents; i++)
- mieqEnqueue(device, xf86Events + i);
+ for (i = 0; i < nevents; i++) {
+ xE = xf86Events + i;
+ /* Don't post core motion events for devices not registered to send
+ * drag events. */
+ if (xE->u.u.type != MotionNotify || drag) {
+ mieqEnqueue(device, xf86Events + i);
+ }
+ }
xfree(valuators);
}
diff-tree f2903c12bb4bb0b7c94b96c55af8fa55507f9d7d (from d17ec01e8395a8f14b75a10c8bf082b3f5a4fb36)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Tue Nov 7 11:13:32 2006 +0200
SyntheticMotion: don't dereference sprite.screen when not using Xinerama
(cherry picked from aa052e43c6c293e14f78837e00c6b7581f9713bb commit)
diff --git a/dix/events.c b/dix/events.c
index 7cfe0ad..0a39dcd 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -328,7 +328,8 @@ static void ConfineToShape(RegionPtr sha
static void PostNewCursor(void);
#define SyntheticMotion(x, y) \
- PostSyntheticMotion(x, y, sprite.screen, \
+ PostSyntheticMotion(x, y, noPanoramiXExtension ? 0 : \
+ sprite.screen->myNum, \
syncEvents.playingEvents ? \
syncEvents.time.milliseconds : \
currentTime.milliseconds);
diff --git a/hw/kdrive/linux/keyboard.c b/hw/kdrive/linux/keyboard.c
index b7571f6..ad9907a 100644
--- a/hw/kdrive/linux/keyboard.c
+++ b/hw/kdrive/linux/keyboard.c
@@ -745,14 +745,11 @@ LinuxKeyboardEnable (KdKeyboardInfo *ki)
cfsetispeed(&nTty, 9600);
cfsetospeed(&nTty, 9600);
tcsetattr(fd, TCSANOW, &nTty);
- /* Our kernel cleverly ignores O_NONBLOCK. Sigh. */
-#if 0
/*
* Flush any pending keystrokes
*/
while ((n = read (fd, buf, sizeof (buf))) > 0)
;
-#endif
KdRegisterFd (fd, LinuxKeyboardRead, ki);
return Success;
}
diff-tree d17ec01e8395a8f14b75a10c8bf082b3f5a4fb36 (from abe5e079af715713097ab0daad29a3e9f523c398)
Author: Daniel Stone <daniel at fooishbar.org>
Date: Fri Dec 1 00:41:41 2006 +0200
remove CID support (bug #5553)
Remove CID from all our fontpaths.
(cherry picked from 69820a10e33e4582c192360996e866007114639d commit)
diff --git a/configure.ac b/configure.ac
index 1aa5455..851194c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -391,7 +391,7 @@ AC_ARG_WITH(mesa-source, AS_HELP_STR
AC_ARG_WITH(fontdir, AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]),
[ FONTDIR="$withval" ],
[ FONTDIR="${libdir}/X11/fonts" ])
-DEFAULT_FONT_PATH="${FONTDIR}/misc/,${FONTDIR}/TTF/,${FONTDIR}/OTF,${FONTDIR}/Type1/,${FONTDIR}/CID/,${FONTDIR}/100dpi/,${FONTDIR}/75dpi/"
+DEFAULT_FONT_PATH="${FONTDIR}/misc/,${FONTDIR}/TTF/,${FONTDIR}/OTF,${FONTDIR}/Type1/,${FONTDIR}/100dpi/,${FONTDIR}/75dpi/"
AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
[ FONTPATH="$withval" ],
[ FONTPATH="${DEFAULT_FONT_PATH}" ])
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index b373242..0c1306f 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -93,7 +93,6 @@ CPP_FILES_FLAGS = \
-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
- -DCIDFONTPATH="\"$(BASE_FONT_PATH)/CID\"" \
-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"
diff --git a/hw/xfree86/dixmods/type1mod.c b/hw/xfree86/dixmods/type1mod.c
index 48c1d04..3da53ea 100644
--- a/hw/xfree86/dixmods/type1mod.c
+++ b/hw/xfree86/dixmods/type1mod.c
@@ -57,9 +57,6 @@ static XF86ModuleVersionInfo VersRec =
_X_EXPORT XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL };
extern void Type1RegisterFontFileFunctions(void);
-#ifdef BUILDCID
-extern void CIDRegisterFontFileFunctions(void);
-#endif
FontModule type1Module = {
Type1RegisterFontFileFunctions,
@@ -67,23 +64,11 @@ FontModule type1Module = {
NULL
};
-#ifdef BUILDCID
-FontModule CIDModule = {
- CIDRegisterFontFileFunctions,
- "CID",
- NULL
-};
-#endif
-
static pointer
type1Setup(pointer module, pointer opts, int *errmaj, int *errmin)
{
type1Module.module = module;
LoadFont(&type1Module);
-#ifdef BUILDCID
- CIDModule.module = module;
- LoadFont(&CIDModule);
-#endif
/* Need a non-NULL return */
return (pointer)1;
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index abf3146..8d52b2b 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -311,7 +311,6 @@ font path elements:
.I __projectroot__/lib/X11/fonts/misc/
.I __projectroot__/lib/X11/fonts/TTF/
.I __projectroot__/lib/X11/fonts/Type1/
-.I __projectroot__/lib/X11/fonts/CID/
.I __projectroot__/lib/X11/fonts/75dpi/
.I __projectroot__/lib/X11/fonts/100dpi/
.fi
@@ -326,7 +325,6 @@ The recommended font path contains the f
.I __projectroot__/lib/X11/fonts/75dpi/:unscaled
.I __projectroot__/lib/X11/fonts/100dpi/:unscaled
.I __projectroot__/lib/X11/fonts/Type1/
-.I __projectroot__/lib/X11/fonts/CID/
.I __projectroot__/lib/X11/fonts/Speedo/
.I __projectroot__/lib/X11/fonts/75dpi/
.I __projectroot__/lib/X11/fonts/100dpi/
diff --git a/hw/xfree86/xorgconf.cpp b/hw/xfree86/xorgconf.cpp
index 71abe13..1995045 100644
--- a/hw/xfree86/xorgconf.cpp
+++ b/hw/xfree86/xorgconf.cpp
@@ -56,7 +56,6 @@ XCOMM command (or a combination of both
FontPath MISCFONTPATH
FontPath T1FONTPATH
FontPath TRUETYPEFONTPATH
- FontPath CIDFONTPATH
FontPath DPI75FONTPATH
FontPath DPI100FONTPATH
diff-tree abe5e079af715713097ab0daad29a3e9f523c398 (from 724f9cb578086e8483a2d0636dd6eb05d664d31c)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date: Wed Dec 6 07:58:03 2006 -0800
Update pci.ids to 2006-12-06 from pciids.sf.net
diff --git a/hw/xfree86/scanpci/pci.ids b/hw/xfree86/scanpci/pci.ids
index c6f5653..d48e25c 100644
--- a/hw/xfree86/scanpci/pci.ids
+++ b/hw/xfree86/scanpci/pci.ids
@@ -11,7 +11,7 @@
# This file can be distributed under either the GNU General Public License
# (version 2 or higher) or the 3-clause BSD License.
#
-# Daily snapshot on Tue 2006-10-03 01:05:01
+# Daily snapshot on Wed 2006-12-06 02:05:02
#
# Vendors, devices and subsystems. Please keep sorted.
@@ -3012,20 +3012,22 @@
2200 QLA2200 64-bit Fibre Channel Adapter
1077 0002 QLA2200
2300 QLA2300 64-bit Fibre Channel Adapter
- 2312 QLA2312 Fibre Channel Adapter
+ 2312 ISP2312-based 2Gb Fibre Channel to PCI-X HBA
103c 0131 2Gb Fibre Channel - Single port [A7538A]
103c 12ba 2Gb Fibre Channel - Dual port [A6826A]
- 2322 QLA2322 Fibre Channel Adapter
- 2422 QLA2422 Fibre Channel Adapter
+ 2322 ISP2322-based 2Gb Fibre Channel to PCI-X HBA
+ 2422 ISP2422-based 4Gb Fibre Channel to PCI-X HBA
103c 12d7 4Gb Fibre Channel [AB379A]
103c 12dd 4Gb Fibre Channel [AB429A]
- 2432 QLA2432 Fibre Channel Adapter
- 3010 QLA3010 Network Adapter
- 3022 QLA3022 Network Adapter
- 4010 QLA4010 iSCSI TOE Adapter
- 4022 QLA4022 iSCSI TOE Adapter
- 6312 QLA6312 Fibre Channel Adapter
- 6322 QLA6322 Fibre Channel Adapter
+ 2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA
+ 3022 ISP4022-based Ethernet NIC
+ 3032 ISP4032-based Ethernet NIC
+ 4010 ISP4010-based iSCSI TOE HBA
+ 4022 ISP4022-based iSCSI TOE HBA
+ 4032 ISP4032-based iSCSI TOE IPv6 HBA
+ 5432 SP232-based 4Gb Fibre Channel to PCI Express HBA
+ 6312 SP202-based 2Gb Fibre Channel to PCI-X HBA
+ 6322 SP212-based 2Gb Fibre Channel to PCI-X HBA
1078 Cyrix Corporation
0000 5510 [Grappa]
0001 PCI Master
@@ -10565,7 +10567,9 @@
16be 1040 V.9X DSP Data Fax Modem
1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter
103c 08b0 tc1100 tablet
+ 8086 2522 Samsung P30 integrated WLAN
8086 2527 MIM2000/Centrino
+ 8086 2581 Toshiba Satellite M10
1048 PRO/10GbE LR Server Adapter
8086 a01f PRO/10GbE LR Server Adapter
8086 a11f PRO/10GbE LR Server Adapter
@@ -10583,6 +10587,10 @@
1051 82801EB/ER (ICH5/ICH5R) integrated LAN Controller
1052 PRO/100 VM Network Connection
1053 PRO/100 VM Network Connection
+ 1054 PRO/100 VE Network Connection
+ 1055 PRO/100 VM Network Connection
+ 1056 PRO/100 VE Network Connection
+ 1057 PRO/100 VE Network Connection
1059 82551QM Ethernet Controller
105b 82546GB Gigabit Ethernet Controller (Copper)
105e 82571EB Gigabit Ethernet Controller
@@ -10673,19 +10681,30 @@
108c 82573E Gigabit Ethernet Controller (Copper)
108e 82573E KCS (Active Management)
108f Active Management Technology - SOL
+ 1091 PRO/100 VM Network Connection
1092 PRO/100 VE Network Connection
+ 1093 PRO/100 VM Network Connection
+ 1094 PRO/100 VE Network Connection
+ 1095 PRO/100 VE Network Connection
1096 80003ES2LAN Gigabit Ethernet Controller (Copper)
1097 631xESB/632xESB DPT LAN Controller (Fiber)
1098 80003ES2LAN Gigabit Ethernet Controller (Serdes)
1099 82546GB Gigabit Ethernet Controller (Copper)
8086 1099 PRO/1000 GT Quad Port Server Adapter
109a 82573L Gigabit Ethernet Controller
+ 1179 ff10 PRO/1000 PL
17aa 2001 ThinkPad T60
17aa 207e Thinkpad X60s
8086 109a PRO/1000 PL Network Connection
109b 82546GB PRO/1000 GF Quad Port Server Adapter
+ 109e 82597EX 10GbE Ethernet Controller
+ 8086 a01f PRO/10GbE CX4 Server Adapter
+ 8086 a11f PRO/10GbE CX4 Server Adapter
10a0 82571EB PRO/1000 AT Quad Port Bypass Adapter
10a1 82571EB PRO/1000 AF Quad Port Bypass Adapter
+ 10a4 82571EB Gigabit Ethernet Controller
+ 8086 10a4 PRO/1000 PT Quad Port Server Adapter
+ 8086 11a4 PRO/1000 PT Quad Port Server Adapter
10b0 82573L PRO/1000 PL Network Connection
10b2 82573V PRO/1000 PM Network Connection
10b3 82573E PRO/1000 PM Network Connection
@@ -10699,6 +10718,11 @@
8086 1093 PRO/1000 PT Desktop Adapter
10ba 80003ES2LAN Gigabit Ethernet Controller (Copper)
10bb 80003ES2LAN Gigabit Ethernet Controller (Serdes)
+ 10bc 82571EB Gigabit Ethernet Controller (Copper)
+ 8086 10bc PRO/1000 PT Quad Port LP Server Adapter
+ 8086 11bc PRO/1000 PT Quad Port LP Server Adapter
+ 10c4 82562GT 10/100 Network Connection
+ 10c5 82562G 10/100 Network Connection
1107 PRO/1000 MF Server Adapter (LX)
1130 82815 815 Chipset Host Bridge and Memory Controller Hub
1025 1016 Travelmate 612 TX
@@ -10946,6 +10970,9 @@
1a31 82845 845 (Brookdale) Chipset AGP Bridge
1a38 5000 Series Chipset DMA Engine
1a48 PRO/10GbE SR Server Adapter
+ 1b48 82597EX 10GbE Ethernet Controller
+ 8086 a01f PRO/10GbE LR Server Adapter
+ 8086 a11f PRO/10GbE LR Server Adapter
2410 82801AA ISA Bridge (LPC)
2411 82801AA IDE
2412 82801AA USB
@@ -10998,6 +11025,7 @@
147b 0507 TH7II-RAID
8086 4532 D815EEA2 mainboard
2445 82801BA/BAM AC'97 Audio
+ 0e11 000b Compaq Deskpro EN Audio
0e11 0088 Evo D500
1014 01c6 Netvista A40/A40p
1025 1016 Travelmate 612 TX
@@ -11010,6 +11038,7 @@
104d 80df Vaio PCG-FX403
2448 82801 Mobile PCI Bridge
103c 099c NX6110/NC6120
+ 144d c00c P30 notebook
1734 1055 Amilo M1420
2449 82801BA/BAM/CA/CAM Ethernet Controller
0e11 0012 EtherExpress PRO/100 VM
@@ -11129,6 +11158,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
1462 5800 845PE Max (MS-6580)
1509 2990 Averatec 5110H laptop
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
@@ -11160,6 +11190,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
1462 5800 845PE Max (MS-6580)
1509 2990 Averatec 5110H
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
@@ -11177,6 +11208,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
1458 a002 GA-8PE667 Ultra
1462 5800 845PE Max (MS-6580)
1734 1005 D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T
@@ -11190,6 +11222,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
24c7 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3
1014 0267 NetVista A30p
1014 052d Thinkpad R50e model 1634
@@ -11201,6 +11234,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
1462 5800 845PE Max (MS-6580)
1509 2990 Averatec 5110H
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
@@ -11215,6 +11249,7 @@
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
1071 8160 MIM2000
+ 144d c00c P30 notebook
1734 1055 Amilo M1420
8086 4541 Latitude D400
24cb 82801DB (ICH4) IDE Controller
@@ -11225,6 +11260,7 @@
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
4c53 1090 Cx9 / Vx9 mainboard
24cc 82801DBM (ICH4-M) LPC Interface Bridge
+ 144d c00c P30 notebook
1734 1055 Amilo M1420
24cd 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller
1014 0267 NetVista A30p
@@ -11240,6 +11276,7 @@
103c 08b0 tc1100 tablet
1071 8160 MIM2000
1179 ff00 Satellite 2430
+ 144d c00c P30 notebook
1462 3981 845PE Max (MS-6580)
1509 1968 Averatec 5110H
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
@@ -11278,6 +11315,7 @@
1014 02ed xSeries server mainboard
1028 0156 Precision 360
1028 0169 Precision 470
+ 103c 12bc d330 uT
1043 80a6 P4P800 Mainboard
1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE)
1462 7280 865PE Neo2 (MS-6728)
@@ -11304,6 +11342,7 @@
8086 4c43 Desktop Board D865GLC
8086 524c D865PERL mainboard
24d5 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller
+ 100a 147b Abit IS7-E motherboard
1028 0169 Precision 470
103c 006a NX9500
103c 12bc d330 uT
@@ -11427,6 +11466,7 @@
1734 1004 D1451 Mainboard (SCENIC N300, i845GV)
2570 82865G/PE/P DRAM Controller/Host-Hub Interface
103c 006a NX9500
+ 103c 12bc d330 uT
1043 80f2 P5P800-MX Mainboard
1458 2570 GA-8IPE1000 Pro2 motherboard (865PE)
2571 82865G/PE/P PCI to AGP Controller
@@ -11533,7 +11573,7 @@
25e5 5000 Series Chipset PCI Express x4 Port 5
25e6 5000 Series Chipset PCI Express x4 Port 6
25e7 5000 Series Chipset PCI Express x4 Port 7
- 25f0 5000 Series Chipset Error Reporting Registers
+ 25f0 5000 Series Chipset FSB Registers
25f1 5000 Series Chipset Reserved Registers
25f3 5000 Series Chipset Reserved Registers
25f5 5000 Series Chipset FBD Registers
@@ -11554,7 +11594,7 @@
2609 E8500/E8501 PCI Express x8 Port B
260a E8500/E8501 PCI Express x8 Port A
260c E8500/E8501 IMI Registers
- 2610 E8500/E8501 Front Side Bus, Boot, and Interrupt Registers
+ 2610 E8500/E8501 FSB Registers
2611 E8500/E8501 Address Mapping Registers
2612 E8500/E8501 RAS Registers
2613 E8500/E8501 Reserved Registers
@@ -11713,6 +11753,7 @@
107b 5048 E4500
8086 544e DeskTop Board D945GTP
27b9 82801GBM (ICH7-M) LPC Interface Bridge
+ 10f7 8338 Panasonic CF-Y5 laptop
17aa 2009 ThinkPad T60/R60 series
27bd 82801GHM (ICH7-M DH) LPC Interface Bridge
27c0 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller IDE
@@ -11749,9 +11790,12 @@
27d6 82801G (ICH7 Family) PCI Express Port 4
27d8 82801G (ICH7 Family) High Definition Audio Controller
107b 5048 E4500
+ 10f7 8338 Panasonic CF-Y5 laptop
+ 1179 ff31 Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP
152d 0753 Softmodem
17aa 2010 ThinkPad T60/R60 series
27da 82801G (ICH7 Family) SMBus Controller
+ 10f7 8338 Panasonic CF-Y5 laptop
17aa 200f ThinkPad T60/R60 series
8086 544e DeskTop Board D945GTP
27dc 82801G (ICH7 Family) LAN Controller
@@ -11760,6 +11804,7 @@
27de 82801G (ICH7 Family) AC'97 Audio Controller
27df 82801G (ICH7 Family) IDE Controller
107b 5048 E4500
+ 10f7 8338 Panasonic CF-Y5 laptop
17aa 200c Thinkpad R60e model 0657
8086 544e DeskTop Board D945GTP
27e0 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5
@@ -11770,21 +11815,28 @@
2814 82801HO (ICH8DO) LPC Interface Controller
2815 Mobile LPC Interface Controller
2820 82801H (ICH8 Family) 4 port SATA IDE Controller
- 2821 82801HB (ICH8) SATA AHCI Controller
+ 1462 7235 P965 Neo MS-7235 mainboard
+ 2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller
2822 82801HR/HO/HH (ICH8R/DO/DH) SATA RAID Controller
- 2824 82801HR/HO/HH (ICH8R/DO/DH) SATA AHCI Controller
+ 2824 82801HB (ICH8) 4 port SATA AHCI Controller
2825 82801H (ICH8 Family) 2 port SATA IDE Controller
+ 1462 7235 P965 Neo MS-7235 mainboard
2828 Mobile SATA IDE Controller
2829 Mobile SATA AHCI Controller
282a Mobile SATA RAID Controller
2830 82801H (ICH8 Family) USB UHCI #1
+ 1462 7235 P965 Neo MS-7235 mainboard
2831 82801H (ICH8 Family) USB UHCI #2
+ 1462 7235 P965 Neo MS-7235 mainboard
2832 82801H (ICH8 Family) USB UHCI #3
2834 82801H (ICH8 Family) USB UHCI #4
+ 1462 7235 P965 Neo MS-7235 mainboard
2835 82801H (ICH8 Family) USB UHCI #5
2836 82801H (ICH8 Family) USB2 EHCI #1
+ 1462 7235 P965 Neo MS-7235 mainboard
283a 82801H (ICH8 Family) USB2 EHCI #2
283e 82801H (ICH8 Family) SMBus Controller
+ 1462 7235 P965 Neo MS-7235 mainboard
283f 82801H (ICH8 Family) PCI Express Port 1
2841 82801H (ICH8 Family) PCI Express Port 2
2843 82801H (ICH8 Family) PCI Express Port 3
@@ -11831,12 +11883,15 @@
2a07 Mobile KT Controller
3092 Integrated RAID
3200 GD31244 PCI-X SATA HBA
+ 1775 c200 C2K onboard SATA host bus adapter
3340 82855PM Processor to I/O Controller
1025 005a TravelMate 290
103c 088c NC8000 laptop
103c 0890 NC6000 laptop
103c 08b0 tc1100 tablet
+ 144d c00c P30 notebook
3341 82855PM Processor to AGP Controller
+ 144d c00c P30 notebook
3500 6311ESB/6321ESB PCI Express Upstream Port
3501 6310ESB PCI Express Upstream Port
3504 6311ESB/6321ESB I/OxAPIC Interrupt Controller
diff --git a/hw/xfree86/scanpci/xf86PciStdIds.h b/hw/xfree86/scanpci/xf86PciStdIds.h
index d86d686..0cf8d4e 100644
--- a/hw/xfree86/scanpci/xf86PciStdIds.h
+++ b/hw/xfree86/scanpci/xf86PciStdIds.h
@@ -5712,7 +5712,7 @@ static const char pci_device_1077_2200[]
static const char pci_subsys_1077_2200_1077_0002[] = "QLA2200";
#endif
static const char pci_device_1077_2300[] = "QLA2300 64-bit Fibre Channel Adapter";
-static const char pci_device_1077_2312[] = "QLA2312 Fibre Channel Adapter";
+static const char pci_device_1077_2312[] = "ISP2312-based 2Gb Fibre Channel to PCI-X HBA";
#endif
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_1077_2312_103c_0131[] = "2Gb Fibre Channel - Single port [A7538A]";
@@ -5723,8 +5723,8 @@ static const char pci_subsys_1077_2312_1
static const char pci_subsys_1077_2312_103c_12ba[] = "2Gb Fibre Channel - Dual port [A6826A]";
#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
-static const char pci_device_1077_2322[] = "QLA2322 Fibre Channel Adapter";
-static const char pci_device_1077_2422[] = "QLA2422 Fibre Channel Adapter";
+static const char pci_device_1077_2322[] = "ISP2322-based 2Gb Fibre Channel to PCI-X HBA";
+static const char pci_device_1077_2422[] = "ISP2422-based 4Gb Fibre Channel to PCI-X HBA";
#endif
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_1077_2422_103c_12d7[] = "4Gb Fibre Channel [AB379A]";
@@ -5735,13 +5735,15 @@ static const char pci_subsys_1077_2422_1
static const char pci_subsys_1077_2422_103c_12dd[] = "4Gb Fibre Channel [AB429A]";
#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
-static const char pci_device_1077_2432[] = "QLA2432 Fibre Channel Adapter";
-static const char pci_device_1077_3010[] = "QLA3010 Network Adapter";
-static const char pci_device_1077_3022[] = "QLA3022 Network Adapter";
-static const char pci_device_1077_4010[] = "QLA4010 iSCSI TOE Adapter";
-static const char pci_device_1077_4022[] = "QLA4022 iSCSI TOE Adapter";
-static const char pci_device_1077_6312[] = "QLA6312 Fibre Channel Adapter";
-static const char pci_device_1077_6322[] = "QLA6322 Fibre Channel Adapter";
+static const char pci_device_1077_2432[] = "ISP2432-based 4Gb Fibre Channel to PCI Express HBA";
+static const char pci_device_1077_3022[] = "ISP4022-based Ethernet NIC";
+static const char pci_device_1077_3032[] = "ISP4032-based Ethernet NIC";
+static const char pci_device_1077_4010[] = "ISP4010-based iSCSI TOE HBA";
+static const char pci_device_1077_4022[] = "ISP4022-based iSCSI TOE HBA";
+static const char pci_device_1077_4032[] = "ISP4032-based iSCSI TOE IPv6 HBA";
+static const char pci_device_1077_5432[] = "SP232-based 4Gb Fibre Channel to PCI Express HBA";
+static const char pci_device_1077_6312[] = "SP202-based 2Gb Fibre Channel to PCI-X HBA";
+static const char pci_device_1077_6322[] = "SP212-based 2Gb Fibre Channel to PCI-X HBA";
#endif
static const char pci_vendor_1078[] = "Cyrix Corporation";
static const char pci_device_1078_0000[] = "5510 [Grappa]";
@@ -20449,10 +20451,8 @@ static const char pci_device_19e7_1003[]
static const char pci_device_19e7_1004[] = "STIX - 4 Port T1/E1 Card";
static const char pci_device_19e7_1005[] = "STIX - 4 Port FXS Card";
#endif
-#ifdef VENDOR_INCLUDE_NONVIDEO
static const char pci_vendor_1a03[] = "ASPEED Technology, Inc.";
static const char pci_device_1a03_2000[] = "AST2000";
-#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
static const char pci_vendor_1a08[] = "Sierra semiconductor";
static const char pci_device_1a08_0000[] = "SC15064";
@@ -21670,8 +21670,14 @@ static const char pci_device_8086_1043[]
static const char pci_subsys_8086_1043_103c_08b0[] = "tc1100 tablet";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_1043_8086_2522[] = "Samsung P30 integrated WLAN";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_1043_8086_2527[] = "MIM2000/Centrino";
#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_1043_8086_2581[] = "Toshiba Satellite M10";
+#endif
static const char pci_device_8086_1048[] = "PRO/10GbE LR Server Adapter";
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_1048_8086_a01f[] = "PRO/10GbE LR Server Adapter";
@@ -21703,6 +21709,10 @@ static const char pci_subsys_8086_1050_8
static const char pci_device_8086_1051[] = "82801EB/ER (ICH5/ICH5R) integrated LAN Controller";
static const char pci_device_8086_1052[] = "PRO/100 VM Network Connection";
static const char pci_device_8086_1053[] = "PRO/100 VM Network Connection";
+static const char pci_device_8086_1054[] = "PRO/100 VE Network Connection";
+static const char pci_device_8086_1055[] = "PRO/100 VM Network Connection";
+static const char pci_device_8086_1056[] = "PRO/100 VE Network Connection";
+static const char pci_device_8086_1057[] = "PRO/100 VE Network Connection";
static const char pci_device_8086_1059[] = "82551QM Ethernet Controller";
static const char pci_device_8086_105b[] = "82546GB Gigabit Ethernet Controller (Copper)";
static const char pci_device_8086_105e[] = "82571EB Gigabit Ethernet Controller";
@@ -21897,7 +21907,11 @@ static const char pci_device_8086_108b[]
static const char pci_device_8086_108c[] = "82573E Gigabit Ethernet Controller (Copper)";
static const char pci_device_8086_108e[] = "82573E KCS (Active Management)";
static const char pci_device_8086_108f[] = "Active Management Technology - SOL";
+static const char pci_device_8086_1091[] = "PRO/100 VM Network Connection";
static const char pci_device_8086_1092[] = "PRO/100 VE Network Connection";
+static const char pci_device_8086_1093[] = "PRO/100 VM Network Connection";
+static const char pci_device_8086_1094[] = "PRO/100 VE Network Connection";
+static const char pci_device_8086_1095[] = "PRO/100 VE Network Connection";
static const char pci_device_8086_1096[] = "80003ES2LAN Gigabit Ethernet Controller (Copper)";
static const char pci_device_8086_1097[] = "631xESB/632xESB DPT LAN Controller (Fiber)";
static const char pci_device_8086_1098[] = "80003ES2LAN Gigabit Ethernet Controller (Serdes)";
@@ -21907,6 +21921,9 @@ static const char pci_subsys_8086_1099_8
#endif
static const char pci_device_8086_109a[] = "82573L Gigabit Ethernet Controller";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_109a_1179_ff10[] = "PRO/1000 PL";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_109a_17aa_2001[] = "ThinkPad T60";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -21916,8 +21933,22 @@ static const char pci_subsys_8086_109a_1
static const char pci_subsys_8086_109a_8086_109a[] = "PRO/1000 PL Network Connection";
#endif
static const char pci_device_8086_109b[] = "82546GB PRO/1000 GF Quad Port Server Adapter";
+static const char pci_device_8086_109e[] = "82597EX 10GbE Ethernet Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_109e_8086_a01f[] = "PRO/10GbE CX4 Server Adapter";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_109e_8086_a11f[] = "PRO/10GbE CX4 Server Adapter";
+#endif
static const char pci_device_8086_10a0[] = "82571EB PRO/1000 AT Quad Port Bypass Adapter";
static const char pci_device_8086_10a1[] = "82571EB PRO/1000 AF Quad Port Bypass Adapter";
+static const char pci_device_8086_10a4[] = "82571EB Gigabit Ethernet Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_10a4_8086_10a4[] = "PRO/1000 PT Quad Port Server Adapter";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_10a4_8086_11a4[] = "PRO/1000 PT Quad Port Server Adapter";
+#endif
static const char pci_device_8086_10b0[] = "82573L PRO/1000 PL Network Connection";
static const char pci_device_8086_10b2[] = "82573V PRO/1000 PM Network Connection";
static const char pci_device_8086_10b3[] = "82573E PRO/1000 PM Network Connection";
@@ -21941,6 +21972,15 @@ static const char pci_subsys_8086_10b9_8
#endif
static const char pci_device_8086_10ba[] = "80003ES2LAN Gigabit Ethernet Controller (Copper)";
static const char pci_device_8086_10bb[] = "80003ES2LAN Gigabit Ethernet Controller (Serdes)";
+static const char pci_device_8086_10bc[] = "82571EB Gigabit Ethernet Controller (Copper)";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_10bc_8086_10bc[] = "PRO/1000 PT Quad Port LP Server Adapter";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_10bc_8086_11bc[] = "PRO/1000 PT Quad Port LP Server Adapter";
+#endif
+static const char pci_device_8086_10c4[] = "82562GT 10/100 Network Connection";
+static const char pci_device_8086_10c5[] = "82562G 10/100 Network Connection";
static const char pci_device_8086_1107[] = "PRO/1000 MF Server Adapter (LX)";
static const char pci_device_8086_1130[] = "82815 815 Chipset Host Bridge and Memory Controller Hub";
#ifdef INIT_SUBSYS_INFO
@@ -22587,6 +22627,13 @@ static const char pci_subsys_8086_1a30_1
static const char pci_device_8086_1a31[] = "82845 845 (Brookdale) Chipset AGP Bridge";
static const char pci_device_8086_1a38[] = "5000 Series Chipset DMA Engine";
static const char pci_device_8086_1a48[] = "PRO/10GbE SR Server Adapter";
+static const char pci_device_8086_1b48[] = "82597EX 10GbE Ethernet Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_1b48_8086_a01f[] = "PRO/10GbE LR Server Adapter";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_1b48_8086_a11f[] = "PRO/10GbE LR Server Adapter";
+#endif
static const char pci_device_8086_2410[] = "82801AA ISA Bridge (LPC)";
static const char pci_device_8086_2411[] = "82801AA IDE";
static const char pci_device_8086_2412[] = "82801AA USB";
@@ -22706,6 +22753,9 @@ static const char pci_subsys_8086_2444_8
#endif
static const char pci_device_8086_2445[] = "82801BA/BAM AC'97 Audio";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2445_0e11_000b[] = "Compaq Deskpro EN Audio";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_2445_0e11_0088[] = "Evo D500";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -22738,6 +22788,9 @@ static const char pci_device_8086_2448[]
static const char pci_subsys_8086_2448_103c_099c[] = "NX6110/NC6120";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2448_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_2448_1734_1055[] = "Amilo M1420";
#endif
static const char pci_device_8086_2449[] = "82801BA/BAM/CA/CAM Ethernet Controller";
@@ -23045,6 +23098,9 @@ static const char pci_subsys_8086_24c2_1
static const char pci_subsys_8086_24c2_1071_8160[] = "MIM2000";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24c2_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c2_1462_5800[] = "845PE Max (MS-6580)";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23134,6 +23190,9 @@ static const char pci_subsys_8086_24c4_1
static const char pci_subsys_8086_24c4_1071_8160[] = "MIM2000";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24c4_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c4_1462_5800[] = "845PE Max (MS-6580)";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23183,6 +23242,9 @@ static const char pci_subsys_8086_24c5_1
static const char pci_subsys_8086_24c5_1071_8160[] = "MIM2000";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24c5_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c5_1458_a002[] = "GA-8PE667 Ultra";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23219,6 +23281,9 @@ static const char pci_subsys_8086_24c6_1
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c6_1071_8160[] = "MIM2000";
#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24c6_144d_c00c[] = "P30 notebook";
+#endif
static const char pci_device_8086_24c7[] = "82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3";
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c7_1014_0267[] = "NetVista A30p";
@@ -23251,6 +23316,9 @@ static const char pci_subsys_8086_24c7_1
static const char pci_subsys_8086_24c7_1071_8160[] = "MIM2000";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24c7_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24c7_1462_5800[] = "845PE Max (MS-6580)";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23291,6 +23359,9 @@ static const char pci_subsys_8086_24ca_1
static const char pci_subsys_8086_24ca_1071_8160[] = "MIM2000";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24ca_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24ca_1734_1055[] = "Amilo M1420";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23317,6 +23388,9 @@ static const char pci_subsys_8086_24cb_4
#endif
static const char pci_device_8086_24cc[] = "82801DBM (ICH4-M) LPC Interface Bridge";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24cc_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24cc_1734_1055[] = "Amilo M1420";
#endif
static const char pci_device_8086_24cd[] = "82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller";
@@ -23360,6 +23434,9 @@ static const char pci_subsys_8086_24cd_1
static const char pci_subsys_8086_24cd_1179_ff00[] = "Satellite 2430";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24cd_144d_c00c[] = "P30 notebook";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24cd_1462_3981[] = "845PE Max (MS-6580)";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23466,6 +23543,9 @@ static const char pci_subsys_8086_24d3_1
static const char pci_subsys_8086_24d3_1028_0169[] = "Precision 470";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24d3_103c_12bc[] = "d330 uT";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24d3_1043_80a6[] = "P4P800 Mainboard";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23540,6 +23620,9 @@ static const char pci_subsys_8086_24d4_8
#endif
static const char pci_device_8086_24d5[] = "82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_24d5_100a_147b[] = "Abit IS7-E motherboard";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_24d5_1028_0169[] = "Precision 470";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -23835,6 +23918,9 @@ static const char pci_device_8086_2570[]
static const char pci_subsys_8086_2570_103c_006a[] = "NX9500";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2570_103c_12bc[] = "d330 uT";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_2570_1043_80f2[] = "P5P800-MX Mainboard";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -24068,7 +24154,7 @@ static const char pci_device_8086_25e4[]
static const char pci_device_8086_25e5[] = "5000 Series Chipset PCI Express x4 Port 5";
static const char pci_device_8086_25e6[] = "5000 Series Chipset PCI Express x4 Port 6";
static const char pci_device_8086_25e7[] = "5000 Series Chipset PCI Express x4 Port 7";
-static const char pci_device_8086_25f0[] = "5000 Series Chipset Error Reporting Registers";
+static const char pci_device_8086_25f0[] = "5000 Series Chipset FSB Registers";
static const char pci_device_8086_25f1[] = "5000 Series Chipset Reserved Registers";
static const char pci_device_8086_25f3[] = "5000 Series Chipset Reserved Registers";
static const char pci_device_8086_25f5[] = "5000 Series Chipset FBD Registers";
@@ -24089,7 +24175,7 @@ static const char pci_device_8086_2608[]
static const char pci_device_8086_2609[] = "E8500/E8501 PCI Express x8 Port B";
static const char pci_device_8086_260a[] = "E8500/E8501 PCI Express x8 Port A";
static const char pci_device_8086_260c[] = "E8500/E8501 IMI Registers";
-static const char pci_device_8086_2610[] = "E8500/E8501 Front Side Bus, Boot, and Interrupt Registers";
+static const char pci_device_8086_2610[] = "E8500/E8501 FSB Registers";
static const char pci_device_8086_2611[] = "E8500/E8501 Address Mapping Registers";
static const char pci_device_8086_2612[] = "E8500/E8501 RAS Registers";
static const char pci_device_8086_2613[] = "E8500/E8501 Reserved Registers";
@@ -24400,6 +24486,9 @@ static const char pci_subsys_8086_27b8_8
#endif
static const char pci_device_8086_27b9[] = "82801GBM (ICH7-M) LPC Interface Bridge";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27b9_10f7_8338[] = "Panasonic CF-Y5 laptop";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_27b9_17aa_2009[] = "ThinkPad T60/R60 series";
#endif
static const char pci_device_8086_27bd[] = "82801GHM (ICH7-M DH) LPC Interface Bridge";
@@ -24474,6 +24563,12 @@ static const char pci_device_8086_27d8[]
static const char pci_subsys_8086_27d8_107b_5048[] = "E4500";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27d8_10f7_8338[] = "Panasonic CF-Y5 laptop";
+#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27d8_1179_ff31[] = "Toshiba America Information Systems:AC97 Data Fax SoftModem with SmartCP";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_27d8_152d_0753[] = "Softmodem";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -24481,6 +24576,9 @@ static const char pci_subsys_8086_27d8_1
#endif
static const char pci_device_8086_27da[] = "82801G (ICH7 Family) SMBus Controller";
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27da_10f7_8338[] = "Panasonic CF-Y5 laptop";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_27da_17aa_200f[] = "ThinkPad T60/R60 series";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -24497,6 +24595,9 @@ static const char pci_device_8086_27df[]
static const char pci_subsys_8086_27df_107b_5048[] = "E4500";
#endif
#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_27df_10f7_8338[] = "Panasonic CF-Y5 laptop";
+#endif
+#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_27df_17aa_200c[] = "Thinkpad R60e model 0657";
#endif
#ifdef INIT_SUBSYS_INFO
@@ -24510,21 +24611,42 @@ static const char pci_device_8086_2812[]
static const char pci_device_8086_2814[] = "82801HO (ICH8DO) LPC Interface Controller";
static const char pci_device_8086_2815[] = "Mobile LPC Interface Controller";
static const char pci_device_8086_2820[] = "82801H (ICH8 Family) 4 port SATA IDE Controller";
-static const char pci_device_8086_2821[] = "82801HB (ICH8) SATA AHCI Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2820_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
+static const char pci_device_8086_2821[] = "82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller";
static const char pci_device_8086_2822[] = "82801HR/HO/HH (ICH8R/DO/DH) SATA RAID Controller";
-static const char pci_device_8086_2824[] = "82801HR/HO/HH (ICH8R/DO/DH) SATA AHCI Controller";
+static const char pci_device_8086_2824[] = "82801HB (ICH8) 4 port SATA AHCI Controller";
static const char pci_device_8086_2825[] = "82801H (ICH8 Family) 2 port SATA IDE Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2825_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_2828[] = "Mobile SATA IDE Controller";
static const char pci_device_8086_2829[] = "Mobile SATA AHCI Controller";
static const char pci_device_8086_282a[] = "Mobile SATA RAID Controller";
static const char pci_device_8086_2830[] = "82801H (ICH8 Family) USB UHCI #1";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2830_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_2831[] = "82801H (ICH8 Family) USB UHCI #2";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2831_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_2832[] = "82801H (ICH8 Family) USB UHCI #3";
static const char pci_device_8086_2834[] = "82801H (ICH8 Family) USB UHCI #4";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2834_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_2835[] = "82801H (ICH8 Family) USB UHCI #5";
static const char pci_device_8086_2836[] = "82801H (ICH8 Family) USB2 EHCI #1";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_2836_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_283a[] = "82801H (ICH8 Family) USB2 EHCI #2";
static const char pci_device_8086_283e[] = "82801H (ICH8 Family) SMBus Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_283e_1462_7235[] = "P965 Neo MS-7235 mainboard";
+#endif
static const char pci_device_8086_283f[] = "82801H (ICH8 Family) PCI Express Port 1";
static const char pci_device_8086_2841[] = "82801H (ICH8 Family) PCI Express Port 2";
static const char pci_device_8086_2843[] = "82801H (ICH8 Family) PCI Express Port 3";
@@ -24571,6 +24693,9 @@ static const char pci_device_8086_2a06[]
static const char pci_device_8086_2a07[] = "Mobile KT Controller";
static const char pci_device_8086_3092[] = "Integrated RAID";
static const char pci_device_8086_3200[] = "GD31244 PCI-X SATA HBA";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_3200_1775_c200[] = "C2K onboard SATA host bus adapter";
+#endif
static const char pci_device_8086_3340[] = "82855PM Processor to I/O Controller";
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_3340_1025_005a[] = "TravelMate 290";
@@ -24584,7 +24709,13 @@ static const char pci_subsys_8086_3340_1
#ifdef INIT_SUBSYS_INFO
static const char pci_subsys_8086_3340_103c_08b0[] = "tc1100 tablet";
#endif
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_3340_144d_c00c[] = "P30 notebook";
+#endif
static const char pci_device_8086_3341[] = "82855PM Processor to AGP Controller";
+#ifdef INIT_SUBSYS_INFO
+static const char pci_subsys_8086_3341_144d_c00c[] = "P30 notebook";
+#endif
static const char pci_device_8086_3500[] = "6311ESB/6321ESB PCI Express Upstream Port";
static const char pci_device_8086_3501[] = "6310ESB PCI Express Upstream Port";
static const char pci_device_8086_3504[] = "6311ESB/6321ESB I/OxAPIC Interrupt Controller";
@@ -40853,10 +40984,18 @@ static const pciSubsystemInfo pci_ss_inf
{0x103c, 0x08b0, pci_subsys_8086_1043_103c_08b0, 0};
#undef pci_ss_info_103c_08b0
#define pci_ss_info_103c_08b0 pci_ss_info_8086_1043_103c_08b0
+static const pciSubsystemInfo pci_ss_info_8086_1043_8086_2522 =
+ {0x8086, 0x2522, pci_subsys_8086_1043_8086_2522, 0};
+#undef pci_ss_info_8086_2522
+#define pci_ss_info_8086_2522 pci_ss_info_8086_1043_8086_2522
static const pciSubsystemInfo pci_ss_info_8086_1043_8086_2527 =
{0x8086, 0x2527, pci_subsys_8086_1043_8086_2527, 0};
#undef pci_ss_info_8086_2527
#define pci_ss_info_8086_2527 pci_ss_info_8086_1043_8086_2527
+static const pciSubsystemInfo pci_ss_info_8086_1043_8086_2581 =
+ {0x8086, 0x2581, pci_subsys_8086_1043_8086_2581, 0};
+#undef pci_ss_info_8086_2581
+#define pci_ss_info_8086_2581 pci_ss_info_8086_1043_8086_2581
static const pciSubsystemInfo pci_ss_info_8086_1048_8086_a01f =
{0x8086, 0xa01f, pci_subsys_8086_1048_8086_a01f, 0};
#undef pci_ss_info_8086_a01f
@@ -41097,6 +41236,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x1099, pci_subsys_8086_1099_8086_1099, 0};
#undef pci_ss_info_8086_1099
#define pci_ss_info_8086_1099 pci_ss_info_8086_1099_8086_1099
+static const pciSubsystemInfo pci_ss_info_8086_109a_1179_ff10 =
+ {0x1179, 0xff10, pci_subsys_8086_109a_1179_ff10, 0};
+#undef pci_ss_info_1179_ff10
+#define pci_ss_info_1179_ff10 pci_ss_info_8086_109a_1179_ff10
static const pciSubsystemInfo pci_ss_info_8086_109a_17aa_2001 =
{0x17aa, 0x2001, pci_subsys_8086_109a_17aa_2001, 0};
#undef pci_ss_info_17aa_2001
@@ -41109,6 +41252,22 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x109a, pci_subsys_8086_109a_8086_109a, 0};
#undef pci_ss_info_8086_109a
#define pci_ss_info_8086_109a pci_ss_info_8086_109a_8086_109a
+static const pciSubsystemInfo pci_ss_info_8086_109e_8086_a01f =
+ {0x8086, 0xa01f, pci_subsys_8086_109e_8086_a01f, 0};
+#undef pci_ss_info_8086_a01f
+#define pci_ss_info_8086_a01f pci_ss_info_8086_109e_8086_a01f
+static const pciSubsystemInfo pci_ss_info_8086_109e_8086_a11f =
+ {0x8086, 0xa11f, pci_subsys_8086_109e_8086_a11f, 0};
+#undef pci_ss_info_8086_a11f
+#define pci_ss_info_8086_a11f pci_ss_info_8086_109e_8086_a11f
+static const pciSubsystemInfo pci_ss_info_8086_10a4_8086_10a4 =
+ {0x8086, 0x10a4, pci_subsys_8086_10a4_8086_10a4, 0};
+#undef pci_ss_info_8086_10a4
+#define pci_ss_info_8086_10a4 pci_ss_info_8086_10a4_8086_10a4
+static const pciSubsystemInfo pci_ss_info_8086_10a4_8086_11a4 =
+ {0x8086, 0x11a4, pci_subsys_8086_10a4_8086_11a4, 0};
+#undef pci_ss_info_8086_11a4
+#define pci_ss_info_8086_11a4 pci_ss_info_8086_10a4_8086_11a4
static const pciSubsystemInfo pci_ss_info_8086_10b5_103c_3109 =
{0x103c, 0x3109, pci_subsys_8086_10b5_103c_3109, 0};
#undef pci_ss_info_103c_3109
@@ -41129,6 +41288,14 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x1093, pci_subsys_8086_10b9_8086_1093, 0};
#undef pci_ss_info_8086_1093
#define pci_ss_info_8086_1093 pci_ss_info_8086_10b9_8086_1093
+static const pciSubsystemInfo pci_ss_info_8086_10bc_8086_10bc =
+ {0x8086, 0x10bc, pci_subsys_8086_10bc_8086_10bc, 0};
+#undef pci_ss_info_8086_10bc
+#define pci_ss_info_8086_10bc pci_ss_info_8086_10bc_8086_10bc
+static const pciSubsystemInfo pci_ss_info_8086_10bc_8086_11bc =
+ {0x8086, 0x11bc, pci_subsys_8086_10bc_8086_11bc, 0};
+#undef pci_ss_info_8086_11bc
+#define pci_ss_info_8086_11bc pci_ss_info_8086_10bc_8086_11bc
static const pciSubsystemInfo pci_ss_info_8086_1130_1025_1016 =
{0x1025, 0x1016, pci_subsys_8086_1130_1025_1016, 0};
#undef pci_ss_info_1025_1016
@@ -41929,6 +42096,14 @@ static const pciSubsystemInfo pci_ss_inf
{0x1028, 0x010e, pci_subsys_8086_1a30_1028_010e, 0};
#undef pci_ss_info_1028_010e
#define pci_ss_info_1028_010e pci_ss_info_8086_1a30_1028_010e
+static const pciSubsystemInfo pci_ss_info_8086_1b48_8086_a01f =
+ {0x8086, 0xa01f, pci_subsys_8086_1b48_8086_a01f, 0};
+#undef pci_ss_info_8086_a01f
+#define pci_ss_info_8086_a01f pci_ss_info_8086_1b48_8086_a01f
+static const pciSubsystemInfo pci_ss_info_8086_1b48_8086_a11f =
+ {0x8086, 0xa11f, pci_subsys_8086_1b48_8086_a11f, 0};
+#undef pci_ss_info_8086_a11f
+#define pci_ss_info_8086_a11f pci_ss_info_8086_1b48_8086_a11f
static const pciSubsystemInfo pci_ss_info_8086_2415_1028_0095 =
{0x1028, 0x0095, pci_subsys_8086_2415_1028_0095, 0};
#undef pci_ss_info_1028_0095
@@ -42061,6 +42236,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x4532, pci_subsys_8086_2444_8086_4532, 0};
#undef pci_ss_info_8086_4532
#define pci_ss_info_8086_4532 pci_ss_info_8086_2444_8086_4532
+static const pciSubsystemInfo pci_ss_info_8086_2445_0e11_000b =
+ {0x0e11, 0x000b, pci_subsys_8086_2445_0e11_000b, 0};
+#undef pci_ss_info_0e11_000b
+#define pci_ss_info_0e11_000b pci_ss_info_8086_2445_0e11_000b
static const pciSubsystemInfo pci_ss_info_8086_2445_0e11_0088 =
{0x0e11, 0x0088, pci_subsys_8086_2445_0e11_0088, 0};
#undef pci_ss_info_0e11_0088
@@ -42101,6 +42280,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x103c, 0x099c, pci_subsys_8086_2448_103c_099c, 0};
#undef pci_ss_info_103c_099c
#define pci_ss_info_103c_099c pci_ss_info_8086_2448_103c_099c
+static const pciSubsystemInfo pci_ss_info_8086_2448_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_2448_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_2448_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_2448_1734_1055 =
{0x1734, 0x1055, pci_subsys_8086_2448_1734_1055, 0};
#undef pci_ss_info_1734_1055
@@ -42477,6 +42660,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24c2_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24c2_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24c2_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24c2_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c2_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24c2_1462_5800 =
{0x1462, 0x5800, pci_subsys_8086_24c2_1462_5800, 0};
#undef pci_ss_info_1462_5800
@@ -42593,6 +42780,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24c4_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24c4_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24c4_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24c4_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c4_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24c4_1462_5800 =
{0x1462, 0x5800, pci_subsys_8086_24c4_1462_5800, 0};
#undef pci_ss_info_1462_5800
@@ -42657,6 +42848,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24c5_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24c5_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24c5_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24c5_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c5_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24c5_1458_a002 =
{0x1458, 0xa002, pci_subsys_8086_24c5_1458_a002, 0};
#undef pci_ss_info_1458_a002
@@ -42705,6 +42900,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24c6_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24c6_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24c6_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24c6_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c6_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24c7_1014_0267 =
{0x1014, 0x0267, pci_subsys_8086_24c7_1014_0267, 0};
#undef pci_ss_info_1014_0267
@@ -42745,6 +42944,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24c7_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24c7_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24c7_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24c7_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24c7_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24c7_1462_5800 =
{0x1462, 0x5800, pci_subsys_8086_24c7_1462_5800, 0};
#undef pci_ss_info_1462_5800
@@ -42797,6 +43000,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1071, 0x8160, pci_subsys_8086_24ca_1071_8160, 0};
#undef pci_ss_info_1071_8160
#define pci_ss_info_1071_8160 pci_ss_info_8086_24ca_1071_8160
+static const pciSubsystemInfo pci_ss_info_8086_24ca_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24ca_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24ca_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24ca_1734_1055 =
{0x1734, 0x1055, pci_subsys_8086_24ca_1734_1055, 0};
#undef pci_ss_info_1734_1055
@@ -42829,6 +43036,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x4c53, 0x1090, pci_subsys_8086_24cb_4c53_1090, 0};
#undef pci_ss_info_4c53_1090
#define pci_ss_info_4c53_1090 pci_ss_info_8086_24cb_4c53_1090
+static const pciSubsystemInfo pci_ss_info_8086_24cc_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24cc_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24cc_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24cc_1734_1055 =
{0x1734, 0x1055, pci_subsys_8086_24cc_1734_1055, 0};
#undef pci_ss_info_1734_1055
@@ -42885,6 +43096,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1179, 0xff00, pci_subsys_8086_24cd_1179_ff00, 0};
#undef pci_ss_info_1179_ff00
#define pci_ss_info_1179_ff00 pci_ss_info_8086_24cd_1179_ff00
+static const pciSubsystemInfo pci_ss_info_8086_24cd_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_24cd_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_24cd_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_24cd_1462_3981 =
{0x1462, 0x3981, pci_subsys_8086_24cd_1462_3981, 0};
#undef pci_ss_info_1462_3981
@@ -43021,6 +43236,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x1028, 0x0169, pci_subsys_8086_24d3_1028_0169, 0};
#undef pci_ss_info_1028_0169
#define pci_ss_info_1028_0169 pci_ss_info_8086_24d3_1028_0169
+static const pciSubsystemInfo pci_ss_info_8086_24d3_103c_12bc =
+ {0x103c, 0x12bc, pci_subsys_8086_24d3_103c_12bc, 0};
+#undef pci_ss_info_103c_12bc
+#define pci_ss_info_103c_12bc pci_ss_info_8086_24d3_103c_12bc
static const pciSubsystemInfo pci_ss_info_8086_24d3_1043_80a6 =
{0x1043, 0x80a6, pci_subsys_8086_24d3_1043_80a6, 0};
#undef pci_ss_info_1043_80a6
@@ -43117,6 +43336,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x524c, pci_subsys_8086_24d4_8086_524c, 0};
#undef pci_ss_info_8086_524c
#define pci_ss_info_8086_524c pci_ss_info_8086_24d4_8086_524c
+static const pciSubsystemInfo pci_ss_info_8086_24d5_100a_147b =
+ {0x100a, 0x147b, pci_subsys_8086_24d5_100a_147b, 0};
+#undef pci_ss_info_100a_147b
+#define pci_ss_info_100a_147b pci_ss_info_8086_24d5_100a_147b
static const pciSubsystemInfo pci_ss_info_8086_24d5_1028_0169 =
{0x1028, 0x0169, pci_subsys_8086_24d5_1028_0169, 0};
#undef pci_ss_info_1028_0169
@@ -43461,6 +43684,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x103c, 0x006a, pci_subsys_8086_2570_103c_006a, 0};
#undef pci_ss_info_103c_006a
#define pci_ss_info_103c_006a pci_ss_info_8086_2570_103c_006a
+static const pciSubsystemInfo pci_ss_info_8086_2570_103c_12bc =
+ {0x103c, 0x12bc, pci_subsys_8086_2570_103c_12bc, 0};
+#undef pci_ss_info_103c_12bc
+#define pci_ss_info_103c_12bc pci_ss_info_8086_2570_103c_12bc
static const pciSubsystemInfo pci_ss_info_8086_2570_1043_80f2 =
{0x1043, 0x80f2, pci_subsys_8086_2570_1043_80f2, 0};
#undef pci_ss_info_1043_80f2
@@ -44021,6 +44248,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x544e, pci_subsys_8086_27b8_8086_544e, 0};
#undef pci_ss_info_8086_544e
#define pci_ss_info_8086_544e pci_ss_info_8086_27b8_8086_544e
+static const pciSubsystemInfo pci_ss_info_8086_27b9_10f7_8338 =
+ {0x10f7, 0x8338, pci_subsys_8086_27b9_10f7_8338, 0};
+#undef pci_ss_info_10f7_8338
+#define pci_ss_info_10f7_8338 pci_ss_info_8086_27b9_10f7_8338
static const pciSubsystemInfo pci_ss_info_8086_27b9_17aa_2009 =
{0x17aa, 0x2009, pci_subsys_8086_27b9_17aa_2009, 0};
#undef pci_ss_info_17aa_2009
@@ -44097,6 +44328,14 @@ static const pciSubsystemInfo pci_ss_inf
{0x107b, 0x5048, pci_subsys_8086_27d8_107b_5048, 0};
#undef pci_ss_info_107b_5048
#define pci_ss_info_107b_5048 pci_ss_info_8086_27d8_107b_5048
+static const pciSubsystemInfo pci_ss_info_8086_27d8_10f7_8338 =
+ {0x10f7, 0x8338, pci_subsys_8086_27d8_10f7_8338, 0};
+#undef pci_ss_info_10f7_8338
+#define pci_ss_info_10f7_8338 pci_ss_info_8086_27d8_10f7_8338
+static const pciSubsystemInfo pci_ss_info_8086_27d8_1179_ff31 =
+ {0x1179, 0xff31, pci_subsys_8086_27d8_1179_ff31, 0};
+#undef pci_ss_info_1179_ff31
+#define pci_ss_info_1179_ff31 pci_ss_info_8086_27d8_1179_ff31
static const pciSubsystemInfo pci_ss_info_8086_27d8_152d_0753 =
{0x152d, 0x0753, pci_subsys_8086_27d8_152d_0753, 0};
#undef pci_ss_info_152d_0753
@@ -44105,6 +44344,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x17aa, 0x2010, pci_subsys_8086_27d8_17aa_2010, 0};
#undef pci_ss_info_17aa_2010
#define pci_ss_info_17aa_2010 pci_ss_info_8086_27d8_17aa_2010
+static const pciSubsystemInfo pci_ss_info_8086_27da_10f7_8338 =
+ {0x10f7, 0x8338, pci_subsys_8086_27da_10f7_8338, 0};
+#undef pci_ss_info_10f7_8338
+#define pci_ss_info_10f7_8338 pci_ss_info_8086_27da_10f7_8338
static const pciSubsystemInfo pci_ss_info_8086_27da_17aa_200f =
{0x17aa, 0x200f, pci_subsys_8086_27da_17aa_200f, 0};
#undef pci_ss_info_17aa_200f
@@ -44121,6 +44364,10 @@ static const pciSubsystemInfo pci_ss_inf
{0x107b, 0x5048, pci_subsys_8086_27df_107b_5048, 0};
#undef pci_ss_info_107b_5048
#define pci_ss_info_107b_5048 pci_ss_info_8086_27df_107b_5048
+static const pciSubsystemInfo pci_ss_info_8086_27df_10f7_8338 =
+ {0x10f7, 0x8338, pci_subsys_8086_27df_10f7_8338, 0};
+#undef pci_ss_info_10f7_8338
+#define pci_ss_info_10f7_8338 pci_ss_info_8086_27df_10f7_8338
static const pciSubsystemInfo pci_ss_info_8086_27df_17aa_200c =
{0x17aa, 0x200c, pci_subsys_8086_27df_17aa_200c, 0};
#undef pci_ss_info_17aa_200c
@@ -44129,6 +44376,38 @@ static const pciSubsystemInfo pci_ss_inf
{0x8086, 0x544e, pci_subsys_8086_27df_8086_544e, 0};
#undef pci_ss_info_8086_544e
#define pci_ss_info_8086_544e pci_ss_info_8086_27df_8086_544e
+static const pciSubsystemInfo pci_ss_info_8086_2820_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2820_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2820_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_2825_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2825_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2825_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_2830_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2830_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2830_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_2831_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2831_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2831_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_2834_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2834_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2834_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_2836_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_2836_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_2836_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_283e_1462_7235 =
+ {0x1462, 0x7235, pci_subsys_8086_283e_1462_7235, 0};
+#undef pci_ss_info_1462_7235
+#define pci_ss_info_1462_7235 pci_ss_info_8086_283e_1462_7235
+static const pciSubsystemInfo pci_ss_info_8086_3200_1775_c200 =
+ {0x1775, 0xc200, pci_subsys_8086_3200_1775_c200, 0};
+#undef pci_ss_info_1775_c200
+#define pci_ss_info_1775_c200 pci_ss_info_8086_3200_1775_c200
static const pciSubsystemInfo pci_ss_info_8086_3340_1025_005a =
{0x1025, 0x005a, pci_subsys_8086_3340_1025_005a, 0};
#undef pci_ss_info_1025_005a
@@ -44145,6 +44424,14 @@ static const pciSubsystemInfo pci_ss_inf
{0x103c, 0x08b0, pci_subsys_8086_3340_103c_08b0, 0};
#undef pci_ss_info_103c_08b0
#define pci_ss_info_103c_08b0 pci_ss_info_8086_3340_103c_08b0
+static const pciSubsystemInfo pci_ss_info_8086_3340_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_3340_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_3340_144d_c00c
+static const pciSubsystemInfo pci_ss_info_8086_3341_144d_c00c =
+ {0x144d, 0xc00c, pci_subsys_8086_3341_144d_c00c, 0};
+#undef pci_ss_info_144d_c00c
+#define pci_ss_info_144d_c00c pci_ss_info_8086_3341_144d_c00c
static const pciSubsystemInfo pci_ss_info_8086_3575_0e11_0030 =
{0x0e11, 0x0030, pci_subsys_8086_3575_0e11_0030, 0};
#undef pci_ss_info_0e11_0030
@@ -48590,10 +48877,12 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
#define pci_ss_list_1077_2432 NULL
-#define pci_ss_list_1077_3010 NULL
#define pci_ss_list_1077_3022 NULL
+#define pci_ss_list_1077_3032 NULL
#define pci_ss_list_1077_4010 NULL
#define pci_ss_list_1077_4022 NULL
+#define pci_ss_list_1077_4032 NULL
+#define pci_ss_list_1077_5432 NULL
#define pci_ss_list_1077_6312 NULL
#define pci_ss_list_1077_6322 NULL
#endif
@@ -55730,7 +56019,9 @@ static const pciSubsystemInfo *pci_ss_li
};
static const pciSubsystemInfo *pci_ss_list_8086_1043[] = {
&pci_ss_info_8086_1043_103c_08b0,
+ &pci_ss_info_8086_1043_8086_2522,
&pci_ss_info_8086_1043_8086_2527,
+ &pci_ss_info_8086_1043_8086_2581,
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_1048[] = {
@@ -55754,6 +56045,10 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_1051 NULL
#define pci_ss_list_8086_1052 NULL
#define pci_ss_list_8086_1053 NULL
+#define pci_ss_list_8086_1054 NULL
+#define pci_ss_list_8086_1055 NULL
+#define pci_ss_list_8086_1056 NULL
+#define pci_ss_list_8086_1057 NULL
#define pci_ss_list_8086_1059 NULL
#define pci_ss_list_8086_105b NULL
static const pciSubsystemInfo *pci_ss_list_8086_105e[] = {
@@ -55874,7 +56169,11 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_108c NULL
#define pci_ss_list_8086_108e NULL
#define pci_ss_list_8086_108f NULL
+#define pci_ss_list_8086_1091 NULL
#define pci_ss_list_8086_1092 NULL
+#define pci_ss_list_8086_1093 NULL
+#define pci_ss_list_8086_1094 NULL
+#define pci_ss_list_8086_1095 NULL
#define pci_ss_list_8086_1096 NULL
#define pci_ss_list_8086_1097 NULL
#define pci_ss_list_8086_1098 NULL
@@ -55883,14 +56182,25 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_109a[] = {
+ &pci_ss_info_8086_109a_1179_ff10,
&pci_ss_info_8086_109a_17aa_2001,
&pci_ss_info_8086_109a_17aa_207e,
&pci_ss_info_8086_109a_8086_109a,
NULL
};
#define pci_ss_list_8086_109b NULL
+static const pciSubsystemInfo *pci_ss_list_8086_109e[] = {
+ &pci_ss_info_8086_109e_8086_a01f,
+ &pci_ss_info_8086_109e_8086_a11f,
+ NULL
+};
#define pci_ss_list_8086_10a0 NULL
#define pci_ss_list_8086_10a1 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_10a4[] = {
+ &pci_ss_info_8086_10a4_8086_10a4,
+ &pci_ss_info_8086_10a4_8086_11a4,
+ NULL
+};
#define pci_ss_list_8086_10b0 NULL
#define pci_ss_list_8086_10b2 NULL
#define pci_ss_list_8086_10b3 NULL
@@ -55908,6 +56218,13 @@ static const pciSubsystemInfo *pci_ss_li
};
#define pci_ss_list_8086_10ba NULL
#define pci_ss_list_8086_10bb NULL
+static const pciSubsystemInfo *pci_ss_list_8086_10bc[] = {
+ &pci_ss_info_8086_10bc_8086_10bc,
+ &pci_ss_info_8086_10bc_8086_11bc,
+ NULL
+};
+#define pci_ss_list_8086_10c4 NULL
+#define pci_ss_list_8086_10c5 NULL
#define pci_ss_list_8086_1107 NULL
static const pciSubsystemInfo *pci_ss_list_8086_1130[] = {
&pci_ss_info_8086_1130_1025_1016,
@@ -56176,6 +56493,11 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_1a31 NULL
#define pci_ss_list_8086_1a38 NULL
#define pci_ss_list_8086_1a48 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_1b48[] = {
+ &pci_ss_info_8086_1b48_8086_a01f,
+ &pci_ss_info_8086_1b48_8086_a11f,
+ NULL
+};
#define pci_ss_list_8086_2410 NULL
#define pci_ss_list_8086_2411 NULL
#define pci_ss_list_8086_2412 NULL
@@ -56238,6 +56560,7 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_2445[] = {
+ &pci_ss_info_8086_2445_0e11_000b,
&pci_ss_info_8086_2445_0e11_0088,
&pci_ss_info_8086_2445_1014_01c6,
&pci_ss_info_8086_2445_1025_1016,
@@ -56254,6 +56577,7 @@ static const pciSubsystemInfo *pci_ss_li
};
static const pciSubsystemInfo *pci_ss_list_8086_2448[] = {
&pci_ss_info_8086_2448_103c_099c,
+ &pci_ss_info_8086_2448_144d_c00c,
&pci_ss_info_8086_2448_1734_1055,
NULL
};
@@ -56401,6 +56725,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24c2_103c_0890,
&pci_ss_info_8086_24c2_103c_08b0,
&pci_ss_info_8086_24c2_1071_8160,
+ &pci_ss_info_8086_24c2_144d_c00c,
&pci_ss_info_8086_24c2_1462_5800,
&pci_ss_info_8086_24c2_1509_2990,
&pci_ss_info_8086_24c2_1734_1004,
@@ -56436,6 +56761,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24c4_103c_0890,
&pci_ss_info_8086_24c4_103c_08b0,
&pci_ss_info_8086_24c4_1071_8160,
+ &pci_ss_info_8086_24c4_144d_c00c,
&pci_ss_info_8086_24c4_1462_5800,
&pci_ss_info_8086_24c4_1509_2990,
&pci_ss_info_8086_24c4_1734_1004,
@@ -56455,6 +56781,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24c5_103c_0890,
&pci_ss_info_8086_24c5_103c_08b0,
&pci_ss_info_8086_24c5_1071_8160,
+ &pci_ss_info_8086_24c5_144d_c00c,
&pci_ss_info_8086_24c5_1458_a002,
&pci_ss_info_8086_24c5_1462_5800,
&pci_ss_info_8086_24c5_1734_1005,
@@ -56470,6 +56797,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24c6_103c_0890,
&pci_ss_info_8086_24c6_103c_08b0,
&pci_ss_info_8086_24c6_1071_8160,
+ &pci_ss_info_8086_24c6_144d_c00c,
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_24c7[] = {
@@ -56483,6 +56811,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24c7_103c_0890,
&pci_ss_info_8086_24c7_103c_08b0,
&pci_ss_info_8086_24c7_1071_8160,
+ &pci_ss_info_8086_24c7_144d_c00c,
&pci_ss_info_8086_24c7_1462_5800,
&pci_ss_info_8086_24c7_1509_2990,
&pci_ss_info_8086_24c7_1734_1004,
@@ -56499,6 +56828,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24ca_103c_0890,
&pci_ss_info_8086_24ca_103c_08b0,
&pci_ss_info_8086_24ca_1071_8160,
+ &pci_ss_info_8086_24ca_144d_c00c,
&pci_ss_info_8086_24ca_1734_1055,
&pci_ss_info_8086_24ca_8086_4541,
NULL
@@ -56513,6 +56843,7 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_24cc[] = {
+ &pci_ss_info_8086_24cc_144d_c00c,
&pci_ss_info_8086_24cc_1734_1055,
NULL
};
@@ -56530,6 +56861,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24cd_103c_08b0,
&pci_ss_info_8086_24cd_1071_8160,
&pci_ss_info_8086_24cd_1179_ff00,
+ &pci_ss_info_8086_24cd_144d_c00c,
&pci_ss_info_8086_24cd_1462_3981,
&pci_ss_info_8086_24cd_1509_1968,
&pci_ss_info_8086_24cd_1734_1004,
@@ -56574,6 +56906,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_24d3_1014_02ed,
&pci_ss_info_8086_24d3_1028_0156,
&pci_ss_info_8086_24d3_1028_0169,
+ &pci_ss_info_8086_24d3_103c_12bc,
&pci_ss_info_8086_24d3_1043_80a6,
&pci_ss_info_8086_24d3_1458_24d2,
&pci_ss_info_8086_24d3_1462_7280,
@@ -56604,6 +56937,7 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_24d5[] = {
+ &pci_ss_info_8086_24d5_100a_147b,
&pci_ss_info_8086_24d5_1028_0169,
&pci_ss_info_8086_24d5_103c_006a,
&pci_ss_info_8086_24d5_103c_12bc,
@@ -56757,6 +57091,7 @@ static const pciSubsystemInfo *pci_ss_li
};
static const pciSubsystemInfo *pci_ss_list_8086_2570[] = {
&pci_ss_info_8086_2570_103c_006a,
+ &pci_ss_info_8086_2570_103c_12bc,
&pci_ss_info_8086_2570_1043_80f2,
&pci_ss_info_8086_2570_1458_2570,
NULL
@@ -57122,6 +57457,7 @@ static const pciSubsystemInfo *pci_ss_li
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_27b9[] = {
+ &pci_ss_info_8086_27b9_10f7_8338,
&pci_ss_info_8086_27b9_17aa_2009,
NULL
};
@@ -57174,11 +57510,14 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_27d6 NULL
static const pciSubsystemInfo *pci_ss_list_8086_27d8[] = {
&pci_ss_info_8086_27d8_107b_5048,
+ &pci_ss_info_8086_27d8_10f7_8338,
+ &pci_ss_info_8086_27d8_1179_ff31,
&pci_ss_info_8086_27d8_152d_0753,
&pci_ss_info_8086_27d8_17aa_2010,
NULL
};
static const pciSubsystemInfo *pci_ss_list_8086_27da[] = {
+ &pci_ss_info_8086_27da_10f7_8338,
&pci_ss_info_8086_27da_17aa_200f,
&pci_ss_info_8086_27da_8086_544e,
NULL
@@ -57191,6 +57530,7 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_27de NULL
static const pciSubsystemInfo *pci_ss_list_8086_27df[] = {
&pci_ss_info_8086_27df_107b_5048,
+ &pci_ss_info_8086_27df_10f7_8338,
&pci_ss_info_8086_27df_17aa_200c,
&pci_ss_info_8086_27df_8086_544e,
NULL
@@ -57202,22 +57542,43 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_2812 NULL
#define pci_ss_list_8086_2814 NULL
#define pci_ss_list_8086_2815 NULL
-#define pci_ss_list_8086_2820 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2820[] = {
+ &pci_ss_info_8086_2820_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_2821 NULL
#define pci_ss_list_8086_2822 NULL
#define pci_ss_list_8086_2824 NULL
-#define pci_ss_list_8086_2825 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2825[] = {
+ &pci_ss_info_8086_2825_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_2828 NULL
#define pci_ss_list_8086_2829 NULL
#define pci_ss_list_8086_282a NULL
-#define pci_ss_list_8086_2830 NULL
-#define pci_ss_list_8086_2831 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2830[] = {
+ &pci_ss_info_8086_2830_1462_7235,
+ NULL
+};
+static const pciSubsystemInfo *pci_ss_list_8086_2831[] = {
+ &pci_ss_info_8086_2831_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_2832 NULL
-#define pci_ss_list_8086_2834 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2834[] = {
+ &pci_ss_info_8086_2834_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_2835 NULL
-#define pci_ss_list_8086_2836 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_2836[] = {
+ &pci_ss_info_8086_2836_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_283a NULL
-#define pci_ss_list_8086_283e NULL
+static const pciSubsystemInfo *pci_ss_list_8086_283e[] = {
+ &pci_ss_info_8086_283e_1462_7235,
+ NULL
+};
#define pci_ss_list_8086_283f NULL
#define pci_ss_list_8086_2841 NULL
#define pci_ss_list_8086_2843 NULL
@@ -57263,15 +57624,22 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_8086_2a06 NULL
#define pci_ss_list_8086_2a07 NULL
#define pci_ss_list_8086_3092 NULL
-#define pci_ss_list_8086_3200 NULL
+static const pciSubsystemInfo *pci_ss_list_8086_3200[] = {
+ &pci_ss_info_8086_3200_1775_c200,
+ NULL
+};
static const pciSubsystemInfo *pci_ss_list_8086_3340[] = {
&pci_ss_info_8086_3340_1025_005a,
&pci_ss_info_8086_3340_103c_088c,
&pci_ss_info_8086_3340_103c_0890,
&pci_ss_info_8086_3340_103c_08b0,
+ &pci_ss_info_8086_3340_144d_c00c,
+ NULL
+};
+static const pciSubsystemInfo *pci_ss_list_8086_3341[] = {
+ &pci_ss_info_8086_3341_144d_c00c,
NULL
};
-#define pci_ss_list_8086_3341 NULL
#define pci_ss_list_8086_3500 NULL
#define pci_ss_list_8086_3501 NULL
#define pci_ss_list_8086_3504 NULL
@@ -58120,6 +58488,7 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_0b49 NULL
#define pci_ss_list_0ccd NULL
static const pciSubsystemInfo *pci_ss_list_0e11[] = {
+ &pci_ss_info_0e11_000b,
&pci_ss_info_0e11_0012,
&pci_ss_info_0e11_001e,
&pci_ss_info_0e11_0022,
@@ -58382,7 +58751,12 @@ static const pciSubsystemInfo *pci_ss_li
#define pci_ss_list_1006 NULL
#define pci_ss_list_1007 NULL
#define pci_ss_list_1008 NULL
-#define pci_ss_list_100a NULL
+#ifdef VENDOR_INCLUDE_NONVIDEO
+static const pciSubsystemInfo *pci_ss_list_100a[] = {
+ &pci_ss_info_100a_147b,
+ NULL
+};
+#endif
#define pci_ss_list_100b NULL
#define pci_ss_list_100c NULL
#define pci_ss_list_100d NULL
@@ -60499,6 +60873,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_1179_ff00,
&pci_ss_info_1179_ff01,
&pci_ss_info_1179_ff10,
+ &pci_ss_info_1179_ff31,
NULL
};
#endif
@@ -62200,6 +62575,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_1462_7030,
&pci_ss_info_1462_7100,
&pci_ss_info_1462_7207,
+ &pci_ss_info_1462_7235,
&pci_ss_info_1462_7280,
&pci_ss_info_1462_728c,
&pci_ss_info_1462_7580,
@@ -63348,6 +63724,7 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_1775_10d0,
&pci_ss_info_1775_10d1,
&pci_ss_info_1775_6003,
+ &pci_ss_info_1775_c200,
&pci_ss_info_1775_ce90,
NULL
};
@@ -64030,6 +64407,8 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_1094,
&pci_ss_info_8086_1099,
&pci_ss_info_8086_109a,
+ &pci_ss_info_8086_10a4,
+ &pci_ss_info_8086_10bc,
&pci_ss_info_8086_10f0,
&pci_ss_info_8086_1107,
&pci_ss_info_8086_1109,
@@ -64046,6 +64425,8 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_117a,
&pci_ss_info_8086_118a,
&pci_ss_info_8086_1199,
+ &pci_ss_info_8086_11a4,
+ &pci_ss_info_8086_11bc,
&pci_ss_info_8086_125e,
&pci_ss_info_8086_125f,
&pci_ss_info_8086_1276,
@@ -64098,7 +64479,9 @@ static const pciSubsystemInfo *pci_ss_li
&pci_ss_info_8086_2413,
&pci_ss_info_8086_24db,
&pci_ss_info_8086_2513,
+ &pci_ss_info_8086_2522,
&pci_ss_info_8086_2527,
+ &pci_ss_info_8086_2581,
&pci_ss_info_8086_265c,
&pci_ss_info_8086_3000,
&pci_ss_info_8086_3001,
@@ -79384,19 +79767,19 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
-static const pciDeviceInfo pci_dev_info_1077_3010 = {
- 0x3010, pci_device_1077_3010,
+static const pciDeviceInfo pci_dev_info_1077_3022 = {
+ 0x3022, pci_device_1077_3022,
#ifdef INIT_SUBSYS_INFO
- pci_ss_list_1077_3010,
+ pci_ss_list_1077_3022,
#else
NULL,
#endif
0
};
-static const pciDeviceInfo pci_dev_info_1077_3022 = {
- 0x3022, pci_device_1077_3022,
+static const pciDeviceInfo pci_dev_info_1077_3032 = {
+ 0x3032, pci_device_1077_3032,
#ifdef INIT_SUBSYS_INFO
- pci_ss_list_1077_3022,
+ pci_ss_list_1077_3032,
#else
NULL,
#endif
@@ -79420,6 +79803,24 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_1077_4032 = {
+ 0x4032, pci_device_1077_4032,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_1077_4032,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_1077_5432 = {
+ 0x5432, pci_device_1077_5432,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_1077_5432,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_1077_6312 = {
0x6312, pci_device_1077_6312,
#ifdef INIT_SUBSYS_INFO
@@ -109037,7 +109438,6 @@ static const pciDeviceInfo pci_dev_info_
0
};
#endif
-#ifdef VENDOR_INCLUDE_NONVIDEO
static const pciDeviceInfo pci_dev_info_1a03_2000 = {
0x2000, pci_device_1a03_2000,
#ifdef INIT_SUBSYS_INFO
@@ -109047,7 +109447,6 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
-#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
static const pciDeviceInfo pci_dev_info_1a08_0000 = {
0x0000, pci_device_1a08_0000,
@@ -111843,6 +112242,42 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_1054 = {
+ 0x1054, pci_device_8086_1054,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1054,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_1055 = {
+ 0x1055, pci_device_8086_1055,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1055,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_1056 = {
+ 0x1056, pci_device_8086_1056,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1056,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_1057 = {
+ 0x1057, pci_device_8086_1057,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1057,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_1059 = {
0x1059, pci_device_8086_1059,
#ifdef INIT_SUBSYS_INFO
@@ -112185,6 +112620,15 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_1091 = {
+ 0x1091, pci_device_8086_1091,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1091,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_1092 = {
0x1092, pci_device_8086_1092,
#ifdef INIT_SUBSYS_INFO
@@ -112194,6 +112638,33 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_1093 = {
+ 0x1093, pci_device_8086_1093,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1093,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_1094 = {
+ 0x1094, pci_device_8086_1094,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1094,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_1095 = {
+ 0x1095, pci_device_8086_1095,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1095,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_1096 = {
0x1096, pci_device_8086_1096,
#ifdef INIT_SUBSYS_INFO
@@ -112248,6 +112719,15 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_109e = {
+ 0x109e, pci_device_8086_109e,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_109e,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_10a0 = {
0x10a0, pci_device_8086_10a0,
#ifdef INIT_SUBSYS_INFO
@@ -112266,6 +112746,15 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_10a4 = {
+ 0x10a4, pci_device_8086_10a4,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_10a4,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_10b0 = {
0x10b0, pci_device_8086_10b0,
#ifdef INIT_SUBSYS_INFO
@@ -112338,6 +112827,33 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_10bc = {
+ 0x10bc, pci_device_8086_10bc,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_10bc,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_10c4 = {
+ 0x10c4, pci_device_8086_10c4,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_10c4,
+#else
+ NULL,
+#endif
+ 0
+};
+static const pciDeviceInfo pci_dev_info_8086_10c5 = {
+ 0x10c5, pci_device_8086_10c5,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_10c5,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_1107 = {
0x1107, pci_device_8086_1107,
#ifdef INIT_SUBSYS_INFO
@@ -112752,6 +113268,15 @@ static const pciDeviceInfo pci_dev_info_
#endif
0
};
+static const pciDeviceInfo pci_dev_info_8086_1b48 = {
+ 0x1b48, pci_device_8086_1b48,
+#ifdef INIT_SUBSYS_INFO
+ pci_ss_list_8086_1b48,
+#else
+ NULL,
+#endif
+ 0
+};
static const pciDeviceInfo pci_dev_info_8086_2410 = {
0x2410, pci_device_8086_2410,
#ifdef INIT_SUBSYS_INFO
@@ -120919,10 +121444,12 @@ static const pciDeviceInfo *pci_dev_list
&pci_dev_info_1077_2322,
&pci_dev_info_1077_2422,
&pci_dev_info_1077_2432,
- &pci_dev_info_1077_3010,
&pci_dev_info_1077_3022,
+ &pci_dev_info_1077_3032,
&pci_dev_info_1077_4010,
&pci_dev_info_1077_4022,
+ &pci_dev_info_1077_4032,
+ &pci_dev_info_1077_5432,
&pci_dev_info_1077_6312,
&pci_dev_info_1077_6322,
NULL
@@ -127194,12 +127721,10 @@ static const pciDeviceInfo *pci_dev_list
NULL
};
#endif
-#ifdef VENDOR_INCLUDE_NONVIDEO
static const pciDeviceInfo *pci_dev_list_1a03[] = {
&pci_dev_info_1a03_2000,
NULL
};
-#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
static const pciDeviceInfo *pci_dev_list_1a08[] = {
&pci_dev_info_1a08_0000,
@@ -127727,6 +128252,10 @@ static const pciDeviceInfo *pci_dev_list
&pci_dev_info_8086_1051,
&pci_dev_info_8086_1052,
&pci_dev_info_8086_1053,
+ &pci_dev_info_8086_1054,
+ &pci_dev_info_8086_1055,
+ &pci_dev_info_8086_1056,
+ &pci_dev_info_8086_1057,
&pci_dev_info_8086_1059,
&pci_dev_info_8086_105b,
&pci_dev_info_8086_105e,
@@ -127765,15 +128294,21 @@ static const pciDeviceInfo *pci_dev_list
&pci_dev_info_8086_108c,
&pci_dev_info_8086_108e,
&pci_dev_info_8086_108f,
+ &pci_dev_info_8086_1091,
&pci_dev_info_8086_1092,
+ &pci_dev_info_8086_1093,
+ &pci_dev_info_8086_1094,
+ &pci_dev_info_8086_1095,
&pci_dev_info_8086_1096,
&pci_dev_info_8086_1097,
&pci_dev_info_8086_1098,
&pci_dev_info_8086_1099,
&pci_dev_info_8086_109a,
&pci_dev_info_8086_109b,
+ &pci_dev_info_8086_109e,
&pci_dev_info_8086_10a0,
&pci_dev_info_8086_10a1,
+ &pci_dev_info_8086_10a4,
&pci_dev_info_8086_10b0,
&pci_dev_info_8086_10b2,
&pci_dev_info_8086_10b3,
@@ -127782,6 +128317,9 @@ static const pciDeviceInfo *pci_dev_list
&pci_dev_info_8086_10b9,
&pci_dev_info_8086_10ba,
&pci_dev_info_8086_10bb,
+ &pci_dev_info_8086_10bc,
+ &pci_dev_info_8086_10c4,
+ &pci_dev_info_8086_10c5,
&pci_dev_info_8086_1107,
&pci_dev_info_8086_1130,
&pci_dev_info_8086_1131,
@@ -127828,6 +128366,7 @@ static const pciDeviceInfo *pci_dev_list
&pci_dev_info_8086_1a31,
&pci_dev_info_8086_1a38,
&pci_dev_info_8086_1a48,
+ &pci_dev_info_8086_1b48,
&pci_dev_info_8086_2410,
&pci_dev_info_8086_2411,
&pci_dev_info_8086_2412,
@@ -133715,9 +134254,7 @@ static const pciVendorInfo pciVendorInfo
#ifdef VENDOR_INCLUDE_NONVIDEO
{0x19e7, pci_vendor_19e7, pci_dev_list_19e7},
#endif
-#ifdef VENDOR_INCLUDE_NONVIDEO
{0x1a03, pci_vendor_1a03, pci_dev_list_1a03},
-#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
{0x1a08, pci_vendor_1a08, pci_dev_list_1a08},
#endif
@@ -139176,9 +139713,7 @@ static const pciVendorSubsysInfo pciVend
#ifdef VENDOR_INCLUDE_NONVIDEO
{0x19e7, pci_vendor_19e7, pci_ss_list_19e7},
#endif
-#ifdef VENDOR_INCLUDE_NONVIDEO
{0x1a03, pci_vendor_1a03, pci_ss_list_1a03},
-#endif
#ifdef VENDOR_INCLUDE_NONVIDEO
{0x1a08, pci_vendor_1a08, pci_ss_list_1a08},
#endif
diff-tree 724f9cb578086e8483a2d0636dd6eb05d664d31c (from 3690de9b1b0902d395bc7d071fc05ebc8f75be2b)
Author: Aaron Plattner <aplattner at nvidia.com>
Date: Tue Dec 5 13:44:05 2006 -0800
Bug #9219: Use pWin->viewable instead of pWin->realized to catch InputOnly windows too.
diff --git a/composite/compext.c b/composite/compext.c
index ec5e1fa..13936fa 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -270,7 +270,7 @@ ProcCompositeNameWindowPixmap (ClientPtr
return BadWindow;
}
- if (!pWin->realized)
+ if (!pWin->viewable)
return BadMatch;
LEGAL_NEW_RESOURCE (stuff->pixmap, client);
diff-tree 3690de9b1b0902d395bc7d071fc05ebc8f75be2b (from f9f7d7f3be53c808abb5eaceb7a1abc55744a210)
Author: Aaron Plattner <aplattner at nvidia.com>
Date: Tue Dec 5 12:42:12 2006 -0800
Bug #9219: Return BadMatch when trying to name the backing pixmap of an unrealized window.
Before this change, ProcCompositeNameWindowPixmap would name the screen pixmap
if !pWin->realized.
diff --git a/composite/compext.c b/composite/compext.c
index a7ad4e2..ec5e1fa 100644
--- a/composite/compext.c
+++ b/composite/compext.c
@@ -269,7 +269,10 @@ ProcCompositeNameWindowPixmap (ClientPtr
client->errorValue = stuff->window;
return BadWindow;
}
-
+
+ if (!pWin->realized)
+ return BadMatch;
+
LEGAL_NEW_RESOURCE (stuff->pixmap, client);
cw = GetCompWindow (pWin);
diff-tree f9f7d7f3be53c808abb5eaceb7a1abc55744a210 (from ac90ce58ba1da3ed605adf75f4d54c34b578c402)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date: Mon Dec 4 13:36:30 2006 -0800
Check for __sparc as well as __sparc__ for compatibility with Sun cc
(gcc defines __sparc__, Sun cc defines __sparc)
diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h
index a330fad..ea995ed 100644
--- a/hw/xfree86/common/compiler.h
+++ b/hw/xfree86/common/compiler.h
@@ -118,7 +118,7 @@ extern int ffs(unsigned long);
# if defined(NO_INLINE) || defined(DO_PROTOTYPES)
# if !defined(__arm__)
-# if !defined(__sparc__) && !defined(__arm32__) \
+# if !defined(__sparc__) && !defined(__sparc) && !defined(__arm32__) \
&& !(defined(__alpha__) && defined(linux)) \
&& !(defined(__ia64__) && defined(linux)) \
@@ -1697,7 +1697,7 @@ static __inline__ void ppc_flush_icache(
: : "r"(addr) : "memory");
}
-# elif defined(__sparc__) || defined(sparc)
+# elif defined(__sparc__) || defined(sparc) || defined(__sparc)
/*
* Like powerpc, we provide byteswapping and no byteswapping functions
* here with byteswapping as default, drivers that don't need byteswapping
diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index aa73e7d..169a957 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -64,7 +64,7 @@ extern ScrnInfoPtr xf86CurrentScreen;
extern Bool pciSlotClaimed;
extern Bool isaSlotClaimed;
extern Bool fbSlotClaimed;
-#ifdef __sparc__
+#if defined(__sparc__) || defined(__sparc)
extern Bool sbusSlotClaimed;
#endif
extern confDRIRec xf86ConfigDRI;
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index e208378..7617bf7 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -113,7 +113,7 @@ void
xf86BusProbe(void)
{
xf86PciProbe();
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
xf86SbusProbe();
#endif
}
@@ -2373,7 +2373,7 @@ xf86PostProbe(void)
if (fbSlotClaimed) {
if (pciSlotClaimed || isaSlotClaimed
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|| sbusSlotClaimed
#endif
) {
@@ -3006,7 +3006,7 @@ xf86FindPrimaryDevice()
}
-#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__)
+#if !defined(__sparc) && !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__)
#include "vgaHW.h"
#include "compiler.h"
#endif
@@ -3018,7 +3018,7 @@ static void
CheckGenericGA()
{
/* This needs to be changed for multiple domains */
-#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__)
+#if !defined(__sparc__) && !defined(__sparc) && !defined(__powerpc__) && !defined(__mips__) && !defined(__ia64__) && !defined(__arm__) && !defined(__s390__)
IOADDRESS GenericIOBase = VGAHW_GET_IOBASE();
CARD8 CurrentValue, TestValue;
diff --git a/hw/xfree86/common/xf86Bus.h b/hw/xfree86/common/xf86Bus.h
index b7d1608..b638e90 100644
--- a/hw/xfree86/common/xf86Bus.h
+++ b/hw/xfree86/common/xf86Bus.h
@@ -40,7 +40,7 @@
#define _XF86_BUS_H
#include "xf86pciBus.h"
-#ifdef __sparc__
+#if defined(__sparc__) || defined(__sparc)
#include "xf86sbusBus.h"
#endif
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index f1f173d..f71486c 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -48,7 +48,7 @@
#include "Configint.h"
#include "vbe.h"
#include "xf86DDC.h"
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
#include "xf86Bus.h"
#include "xf86Sbus.h"
#endif
@@ -57,7 +57,7 @@
typedef struct _DevToConfig {
GDevRec GDev;
pciVideoPtr pVideo;
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
sbusDevicePtr sVideo;
#endif
int iDriver;
@@ -134,7 +134,7 @@ xf86AddBusDeviceToConfigure(const char *
if (!DevToConfig[i].pVideo)
return NULL;
break;
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
case BUS_SBUS:
for (i = 0; i < nDevToConfig; i++)
if (DevToConfig[i].sVideo &&
@@ -213,7 +213,7 @@ xf86AddBusDeviceToConfigure(const char *
NewDevice.GDev.identifier = "ISA Adapter";
NewDevice.GDev.busID = "ISA";
break;
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
case BUS_SBUS: {
char *promPath = NULL;
NewDevice.sVideo = (sbusDevicePtr) busData;
diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c
index 3051ded..1cb7dae 100644
--- a/hw/xfree86/loader/xf86sym.c
+++ b/hw/xfree86/loader/xf86sym.c
@@ -499,7 +499,7 @@ _X_HIDDEN void *xfree86LookupTab[] = {
SYMFUNC(xf86AddModuleInfo)
SYMFUNC(xf86DeleteModuleInfo)
-#if defined(__sparc__) && !defined(__OpenBSD__)
+#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
/* xf86sbusBus.c */
SYMFUNC(xf86MatchSbusInstances)
SYMFUNC(xf86GetSbusInfoForEntity)
diff --git a/hw/xfree86/utils/xorgcfg/loadmod.c b/hw/xfree86/utils/xorgcfg/loadmod.c
index 598d0c0..6f83f35 100644
--- a/hw/xfree86/utils/xorgcfg/loadmod.c
+++ b/hw/xfree86/utils/xorgcfg/loadmod.c
@@ -181,7 +181,7 @@ LOOKUP xfree86LookupTab[] = {
SYMFUNC(xf86memchr)
SYMFUNC(xf86memcmp)
SYMFUNC(xf86memcpy)
-#if (defined(__powerpc__) && (defined(Lynx) || defined(linux))) || defined(__sparc__) || defined(__ia64__) || defined (__amd64__)
+#if (defined(__powerpc__) && (defined(Lynx) || defined(linux))) || defined(__sparc__) || defined(__sparc) || defined(__ia64__) || defined (__amd64__)
/*
* Some PPC, SPARC, and IA64 compilers generate calls to memcpy to handle
* structure copies. This causes a problem both here and in shared
diff-tree ac90ce58ba1da3ed605adf75f4d54c34b578c402 (from f44f14fe564d834568a0afefba944223a73ea0f5)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Dec 1 21:12:21 2006 -0500
Naming change: Security*Operation -> Xace*Operation
diff --git a/Xext/security.c b/Xext/security.c
index ac76279..572f811 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -1251,7 +1251,7 @@ typedef struct _PropertyAccessRec {
} PropertyAccessRec, *PropertyAccessPtr;
static PropertyAccessPtr PropertyAccessList = NULL;
-static char SecurityDefaultAction = SecurityErrorOperation;
+static char SecurityDefaultAction = XaceErrorOperation;
static char *SecurityPolicyFile = DEFAULTPOLICYFILE;
static ATOM SecurityMaxPropertyName = 0;
@@ -1410,9 +1410,9 @@ SecurityParsePropertyAccessRule(
{
switch (c)
{
- case 'i': action = SecurityIgnoreOperation; break;
- case 'a': action = SecurityAllowOperation; break;
- case 'e': action = SecurityErrorOperation; break;
+ case 'i': action = XaceIgnoreOperation; break;
+ case 'a': action = XaceAllowOperation; break;
+ case 'e': action = XaceErrorOperation; break;
case 'r': readAction = action; break;
case 'w': writeAction = action; break;
@@ -1797,7 +1797,7 @@ CALLBACK(SecurityCheckPropertyAccess)
* If pacl doesn't apply, something above should have
* executed a continue, which will skip the follwing code.
*/
- action = SecurityAllowOperation;
+ action = XaceAllowOperation;
if (access_mode & SecurityReadAccess)
action = max(action, pacl->readAction);
if (access_mode & SecurityWriteAccess)
@@ -1808,11 +1808,11 @@ CALLBACK(SecurityCheckPropertyAccess)
} /* end for each pacl */
} /* end if propertyName <= SecurityMaxPropertyName */
- if (SecurityAllowOperation != action)
+ if (XaceAllowOperation != action)
{ /* audit the access violation */
int cid = CLIENT_ID(pWin->drawable.id);
int reqtype = ((xReq *)client->requestBuffer)->reqType;
- char *actionstr = (SecurityIgnoreOperation == action) ?
+ char *actionstr = (XaceIgnoreOperation == action) ?
"ignored" : "error";
SecurityAudit("client %d attempted request %d with window 0x%x property %s (atom 0x%x) of client %d, %s\n",
client->index, reqtype, pWin->drawable.id,
diff --git a/Xext/xace.c b/Xext/xace.c
index 7f7944a..6fc5c12 100644
--- a/Xext/xace.c
+++ b/Xext/xace.c
@@ -99,7 +99,7 @@ int XaceHook(int hook, ...)
va_arg(ap, WindowPtr),
va_arg(ap, Atom),
va_arg(ap, Mask),
- SecurityAllowOperation /* default allow */
+ XaceAllowOperation /* default allow */
};
calldata = &rec;
prv = &rec.rval;
diff --git a/Xext/xace.h b/Xext/xace.h
index 6f99895..7231b04 100644
--- a/Xext/xace.h
+++ b/Xext/xace.h
@@ -21,9 +21,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE
#define _XACE_H
/* Hook return codes */
-#define SecurityErrorOperation 0
-#define SecurityAllowOperation 1
-#define SecurityIgnoreOperation 2
+#define XaceErrorOperation 0
+#define XaceAllowOperation 1
+#define XaceIgnoreOperation 2
#ifdef XACE
@@ -107,10 +107,10 @@ extern void XaceCensorImage(
/* Define calls away when XACE is not being built. */
#ifdef __GNUC__
-#define XaceHook(args...) SecurityAllowOperation
+#define XaceHook(args...) XaceAllowOperation
#define XaceCensorImage(args...) { ; }
#else
-#define XaceHook(...) SecurityAllowOperation
+#define XaceHook(...) XaceAllowOperation
#define XaceCensorImage(...) { ; }
#endif
diff --git a/dix/property.c b/dix/property.c
index 0946b65..00d4856 100644
--- a/dix/property.c
+++ b/dix/property.c
@@ -119,12 +119,12 @@ ProcRotateProperties(ClientPtr client)
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
SecurityReadAccess|SecurityWriteAccess);
- if (!ValidAtom(atoms[i]) || (SecurityErrorOperation == action)) {
+ if (!ValidAtom(atoms[i]) || (XaceErrorOperation == action)) {
DEALLOCATE_LOCAL(props);
client->errorValue = atoms[i];
return BadAtom;
}
- if (SecurityIgnoreOperation == action) {
+ if (XaceIgnoreOperation == action) {
DEALLOCATE_LOCAL(props);
return Success;
}
@@ -226,10 +226,10 @@ ProcChangeProperty(ClientPtr client)
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
SecurityWriteAccess))
{
- case SecurityErrorOperation:
+ case XaceErrorOperation:
client->errorValue = stuff->property;
return BadAtom;
- case SecurityIgnoreOperation:
+ case XaceIgnoreOperation:
return Success;
}
@@ -495,10 +495,10 @@ ProcGetProperty(ClientPtr client)
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
access_mode))
{
- case SecurityErrorOperation:
+ case XaceErrorOperation:
client->errorValue = stuff->property;
return BadAtom;;
- case SecurityIgnoreOperation:
+ case XaceIgnoreOperation:
return NullPropertyReply(client, pProp->type, pProp->format, &reply);
}
@@ -649,10 +649,10 @@ ProcDeleteProperty(register ClientPtr cl
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
SecurityDestroyAccess))
{
- case SecurityErrorOperation:
+ case XaceErrorOperation:
client->errorValue = stuff->property;
return BadAtom;;
- case SecurityIgnoreOperation:
+ case XaceIgnoreOperation:
return Success;
}
diff-tree f44f14fe564d834568a0afefba944223a73ea0f5 (from a5d6499d666fea4a9988118ddd3a5e4c9cfcc32c)
Author: Eamon Walsh <ewalsh at tycho.nsa.gov>
Date: Fri Dec 1 20:48:15 2006 -0500
Define calls away when not building XACE, allowing ifdef's to be removed.
diff --git a/Xext/xace.h b/Xext/xace.h
index 6cb4b4f..6f99895 100644
--- a/Xext/xace.h
+++ b/Xext/xace.h
@@ -20,6 +20,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE
#ifndef _XACE_H
#define _XACE_H
+/* Hook return codes */
+#define SecurityErrorOperation 0
+#define SecurityAllowOperation 1
+#define SecurityIgnoreOperation 2
+
+#ifdef XACE
+
#define XACE_EXTENSION_NAME "XAccessControlExtension"
#define XACE_MAJOR_VERSION 1
#define XACE_MINOR_VERSION 0
@@ -75,11 +82,6 @@ extern int XaceHook(
/* From the original Security extension...
*/
-/* Hook return codes */
-#define SecurityAllowOperation 0
-#define SecurityIgnoreOperation 1
-#define SecurityErrorOperation 2
-
/* Proc vectors for untrusted clients, swapped and unswapped versions.
* These are the same as the normal proc vectors except that extensions
* that haven't declared themselves secure will have ProcBadRequest plugged
@@ -100,4 +102,18 @@ extern void XaceCensorImage(
char * pBuf
);
+#else /* XACE */
+
+/* Define calls away when XACE is not being built. */
+
+#ifdef __GNUC__
+#define XaceHook(args...) SecurityAllowOperation
+#define XaceCensorImage(args...) { ; }
+#else
+#define XaceHook(...) SecurityAllowOperation
+#define XaceCensorImage(...) { ; }
+#endif
+
+#endif /* XACE */
+
#endif /* _XACE_H */
diff --git a/dix/devices.c b/dix/devices.c
index aa04862..e6a5049 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -69,9 +69,7 @@ SOFTWARE.
#ifdef XKB
#include <X11/extensions/XKBsrv.h>
#endif
-#ifdef XACE
#include "xace.h"
-#endif
#include "dispatch.h"
#include "swaprep.h"
@@ -1178,10 +1176,8 @@ DoSetModifierMapping(ClientPtr client, K
}
}
-#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
return BadAccess;
-#endif
/* None of the modifiers (old or new) may be down while we change
* the map. */
@@ -1302,14 +1298,12 @@ ProcChangeKeyboardMapping(ClientPtr clie
return BadValue;
}
-#ifdef XACE
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
return BadAccess;
}
}
-#endif
keysyms.minKeyCode = stuff->firstKeyCode;
keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
@@ -1655,7 +1649,6 @@ ProcChangeKeyboardControl (ClientPtr cli
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
return BadLength;
-#ifdef XACE
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
@@ -1663,7 +1656,6 @@ ProcChangeKeyboardControl (ClientPtr cli
return BadAccess;
}
}
-#endif
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
@@ -1920,15 +1912,13 @@ ProcQueryKeymap(ClientPtr client)
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
rep.length = 2;
-#ifdef XACE
- if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
- {
- bzero((char *)&rep.map[0], 32);
- }
+
+ if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
+ for (i = 0; i<32; i++)
+ rep.map[i] = down[i];
else
-#endif
- for (i = 0; i<32; i++)
- rep.map[i] = down[i];
+ bzero((char *)&rep.map[0], 32);
+
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
return Success;
}
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 26cb544..0a93c3b 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -135,9 +135,7 @@ int ProcInitialConnection();
#include "panoramiX.h"
#include "panoramiXsrv.h"
#endif
-#ifdef XACE
#include "xace.h"
-#endif
#ifdef XAPPGROUP
#include "appgroup.h"
#endif
@@ -504,16 +502,11 @@ Dispatch(void)
#endif
if (result > (maxBigRequestSize << 2))
result = BadLength;
- else
-#ifdef XACE
- {
+ else {
XaceHook(XACE_AUDIT_BEGIN, client);
result = (* client->requestVector[MAJOROP])(client);
XaceHook(XACE_AUDIT_END, client, result);
}
-#else
- result = (* client->requestVector[MAJOROP])(client);
-#endif /* XACE */
#ifdef XSERVER_DTRACE
XSERVER_REQUEST_DONE(GetRequestName(MAJOROP), MAJOROP,
client->sequence, client->index, result);
@@ -1166,14 +1159,11 @@ ProcConvertSelection(register ClientPtr
i = 0;
while ((i < NumCurrentSelections) &&
CurrentSelections[i].selection != stuff->selection) i++;
- if ((i < NumCurrentSelections) &&
- (CurrentSelections[i].window != None)
-#ifdef XACE
- && XaceHook(XACE_RESOURCE_ACCESS, client,
- CurrentSelections[i].window, RT_WINDOW,
- SecurityReadAccess, CurrentSelections[i].pWin)
-#endif
- )
+ if ((i < NumCurrentSelections) &&
+ (CurrentSelections[i].window != None) &&
+ XaceHook(XACE_RESOURCE_ACCESS, client,
+ CurrentSelections[i].window, RT_WINDOW,
+ SecurityReadAccess, CurrentSelections[i].pWin))
{
event.u.u.type = SelectionRequest;
event.u.selectionRequest.time = stuff->time;
@@ -2163,9 +2153,7 @@ DoGetImage(register ClientPtr client, in
Mask plane = 0;
char *pBuf;
xGetImageReply xgi;
-#ifdef XACE
RegionPtr pVisibleRegion = NULL;
-#endif
if ((format != XYPixmap) && (format != ZPixmap))
{
@@ -2269,17 +2257,16 @@ DoGetImage(register ClientPtr client, in
WriteReplyToClient(client, sizeof (xGetImageReply), &xgi);
}
-#ifdef XACE
if (pDraw->type == DRAWABLE_WINDOW &&
!XaceHook(XACE_DRAWABLE_ACCESS, client, pDraw))
{
pVisibleRegion = NotClippedByChildren((WindowPtr)pDraw);
if (pVisibleRegion)
{
- REGION_TRANSLATE(pDraw->pScreen, pVisibleRegion, -pDraw->x, -pDraw->y);
+ REGION_TRANSLATE(pDraw->pScreen, pVisibleRegion,
+ -pDraw->x, -pDraw->y);
}
}
-#endif
if (linesPerBuf == 0)
{
@@ -2299,12 +2286,10 @@ DoGetImage(register ClientPtr client, in
format,
planemask,
(pointer) pBuf);
-#ifdef XACE
if (pVisibleRegion)
XaceCensorImage(client, pVisibleRegion, widthBytesLine,
pDraw, x, y + linesDone, width,
nlines, format, pBuf);
-#endif
/* Note that this is NOT a call to WriteSwappedDataToClient,
as we do NOT byte swap */
@@ -2340,13 +2325,11 @@ DoGetImage(register ClientPtr client, in
format,
plane,
(pointer)pBuf);
-#ifdef XACE
if (pVisibleRegion)
XaceCensorImage(client, pVisibleRegion,
widthBytesLine,
pDraw, x, y + linesDone, width,
nlines, format, pBuf);
-#endif
/* Note: NOT a call to WriteSwappedDataToClient,
as we do NOT byte swap */
@@ -2368,10 +2351,8 @@ DoGetImage(register ClientPtr client, in
}
}
}
-#ifdef XACE
if (pVisibleRegion)
REGION_DESTROY(pDraw->pScreen, pVisibleRegion);
-#endif
if (!im_return)
DEALLOCATE_LOCAL(pBuf);
return (client->noClientException);
@@ -3342,13 +3323,11 @@ ProcListHosts(register ClientPtr client)
/* REQUEST(xListHostsReq); */
REQUEST_SIZE_MATCH(xListHostsReq);
-#ifdef XACE
+
/* untrusted clients can't list hosts */
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, SecurityReadAccess))
- {
return BadAccess;
- }
-#endif
+
result = GetHosts(&pdata, &nHosts, &len, &reply.enabled);
if (result != Success)
return(result);
diff --git a/dix/dixutils.c b/dix/dixutils.c
index a395d44..af7e1c8 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -95,9 +95,7 @@ Author: Adobe Systems Incorporated
#include "scrnintstr.h"
#define XK_LATIN1
#include <X11/keysymdef.h>
-#ifdef XACE
#include "xace.h"
-#endif
/*
* CompareTimeStamps returns -1, 0, or +1 depending on if the first
diff --git a/dix/events.c b/dix/events.c
index c8da7d6..7cfe0ad 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -137,9 +137,7 @@ of the copyright holder.
extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
#endif
-#ifdef XACE
#include "xace.h"
-#endif
#ifdef XSERVER_DTRACE
#include <sys/types.h>
@@ -2462,10 +2460,8 @@ CheckPassiveGrabsOnWindow(
(grab->confineTo->realized &&
BorderSizeNotEmpty(grab->confineTo))))
{
-#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, wClient(pWin), device, FALSE))
return FALSE;
-#endif
#ifdef XKB
if (!noXkbExtension) {
XE_KBPTR.state &= 0x1f00;
@@ -2826,9 +2822,7 @@ drawable.id:0;
if (deactivateGrab)
(*keybd->DeactivateGrab)(keybd);
-#ifdef XACE
XaceHook(XACE_KEY_AVAIL, xE, keybd, count);
-#endif
}
#ifdef XKB
@@ -3252,17 +3246,13 @@ EnterLeaveEvent(
if ((type == EnterNotify) && (mask & KeymapStateMask))
{
xKeymapEvent ke;
-
-#ifdef XACE
ClientPtr client = grab ? rClient(grab)
: clients[CLIENT_ID(pWin->drawable.id)];
- if (!XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE))
- {
- bzero((char *)&ke.map[0], 31);
- }
+ if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE))
+ memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
else
-#endif
- memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
+ bzero((char *)&ke.map[0], 31);
+
ke.type = KeymapNotify;
if (grab)
(void)TryClientEvents(rClient(grab), (xEvent *)&ke, 1, mask,
@@ -3348,15 +3338,12 @@ FocusEvent(DeviceIntPtr dev, int type, i
((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask))
{
xKeymapEvent ke;
-#ifdef XACE
ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)];
- if (!XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE))
- {
- bzero((char *)&ke.map[0], 31);
- }
+ if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE))
+ memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
else
-#endif
- memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
+ bzero((char *)&ke.map[0], 31);
+
ke.type = KeymapNotify;
(void)DeliverEventsToWindow(pWin, (xEvent *)&ke, 1,
KeymapStateMask, NullGrab, 0);
@@ -3619,10 +3606,10 @@ ProcSetInputFocus(client)
REQUEST(xSetInputFocusReq);
REQUEST_SIZE_MATCH(xSetInputFocusReq);
-#ifdef XACE
+
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
return Success;
-#endif
+
return SetInputFocus(client, inputInfo.keyboard, stuff->focus,
stuff->revertTo, stuff->time, FALSE);
}
@@ -3884,18 +3871,17 @@ ProcGrabKeyboard(ClientPtr client)
int result;
REQUEST_SIZE_MATCH(xGrabKeyboardReq);
-#ifdef XACE
- if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
- {
+
+ if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
+ result = GrabDevice(client, inputInfo.keyboard, stuff->keyboardMode,
+ stuff->pointerMode, stuff->grabWindow,
+ stuff->ownerEvents, stuff->time,
+ KeyPressMask | KeyReleaseMask, &rep.status);
+ else {
result = Success;
rep.status = AlreadyGrabbed;
}
- else
-#endif
- result = GrabDevice(client, inputInfo.keyboard, stuff->keyboardMode,
- stuff->pointerMode, stuff->grabWindow,
- stuff->ownerEvents, stuff->time,
- KeyPressMask | KeyReleaseMask, &rep.status);
+
if (result != Success)
return result;
rep.type = X_Reply;
diff --git a/dix/extension.c b/dix/extension.c
index fe779b2..29cae86 100644
--- a/dix/extension.c
+++ b/dix/extension.c
@@ -59,9 +59,7 @@ SOFTWARE.
#include "gcstruct.h"
#include "scrnintstr.h"
#include "dispatch.h"
-#ifdef XACE
#include "xace.h"
-#endif
#define EXTENSION_BASE 128
#define EXTENSION_EVENT_BASE 64
@@ -256,11 +254,9 @@ GetExtensionEntry(int major)
_X_EXPORT void
DeclareExtensionSecurity(char *extname, Bool secure)
{
-#ifdef XACE
int i = FindExtension(extname, strlen(extname));
if (i >= 0)
XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure);
-#endif
}
_X_EXPORT unsigned short
@@ -336,12 +332,7 @@ ProcQueryExtension(ClientPtr client)
else
{
i = FindExtension((char *)&stuff[1], stuff->nbytes);
- if (i < 0
-#ifdef XACE
- /* call callbacks to find out whether to show extension */
- || !XaceHook(XACE_EXT_ACCESS, client, extensions[i])
-#endif
- )
+ if (i < 0 || !XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
reply.present = xFalse;
else
{
@@ -376,11 +367,10 @@ ProcListExtensions(ClientPtr client)
for (i=0; i<NumExtensions; i++)
{
-#ifdef XACE
/* call callbacks to find out whether to show extension */
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
continue;
-#endif
+
total_length += strlen(extensions[i]->name) + 1;
reply.nExtensions += 1 + extensions[i]->num_aliases;
for (j = extensions[i]->num_aliases; --j >= 0;)
@@ -393,10 +383,9 @@ ProcListExtensions(ClientPtr client)
for (i=0; i<NumExtensions; i++)
{
int len;
-#ifdef XACE
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
continue;
-#endif
+
*bufptr++ = len = strlen(extensions[i]->name);
memmove(bufptr, extensions[i]->name, len);
bufptr += len;
diff --git a/dix/getevents.c b/dix/getevents.c
index be598bc..4154262 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -48,10 +48,6 @@
extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
#endif
-#ifdef XACE
-#include "xace.h"
-#endif
-
#ifdef PANORAMIX
#include "panoramiX.h"
#include "panoramiXsrv.h"
diff --git a/dix/property.c b/dix/property.c
index da98383..0946b65 100644
--- a/dix/property.c
+++ b/dix/property.c
@@ -58,9 +58,7 @@ SOFTWARE.
#include "dixstruct.h"
#include "dispatch.h"
#include "swaprep.h"
-#ifdef XACE
#include "xace.h"
-#endif
/*****************************************************************
* Property Stuff
@@ -118,27 +116,19 @@ ProcRotateProperties(ClientPtr client)
return(BadAlloc);
for (i = 0; i < stuff->nAtoms; i++)
{
-#ifdef XACE
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
SecurityReadAccess|SecurityWriteAccess);
-#endif
- if (!ValidAtom(atoms[i])
-#ifdef XACE
- || (SecurityErrorOperation == action)
-#endif
- )
- {
+
+ if (!ValidAtom(atoms[i]) || (SecurityErrorOperation == action)) {
DEALLOCATE_LOCAL(props);
client->errorValue = atoms[i];
return BadAtom;
}
-#ifdef XACE
- if (SecurityIgnoreOperation == action)
- {
+ if (SecurityIgnoreOperation == action) {
DEALLOCATE_LOCAL(props);
return Success;
}
-#endif
+
for (j = i + 1; j < stuff->nAtoms; j++)
if (atoms[j] == atoms[i])
{
@@ -233,17 +223,15 @@ ProcChangeProperty(ClientPtr client)
return(BadAtom);
}
-#ifdef XACE
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
- SecurityWriteAccess))
+ SecurityWriteAccess))
{
- case SecurityErrorOperation:
- client->errorValue = stuff->property;
- return BadAtom;
- case SecurityIgnoreOperation:
- return Success;
+ case SecurityErrorOperation:
+ client->errorValue = stuff->property;
+ return BadAtom;
+ case SecurityIgnoreOperation:
+ return Success;
}
-#endif
err = ChangeWindowProperty(pWin, stuff->property, stuff->type, (int)format,
(int)mode, len, (pointer)&stuff[1], TRUE);
@@ -460,6 +448,7 @@ ProcGetProperty(ClientPtr client)
unsigned long n, len, ind;
WindowPtr pWin;
xGetPropertyReply reply;
+ Mask access_mode = SecurityReadAccess;
REQUEST(xGetPropertyReq);
REQUEST_SIZE_MATCH(xGetPropertyReq);
@@ -501,24 +490,18 @@ ProcGetProperty(ClientPtr client)
if (!pProp)
return NullPropertyReply(client, None, 0, &reply);
-#ifdef XACE
+ if (stuff->delete)
+ access_mode |= SecurityDestroyAccess;
+ switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
+ access_mode))
{
- Mask access_mode = SecurityReadAccess;
-
- if (stuff->delete)
- access_mode |= SecurityDestroyAccess;
- switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
- access_mode))
- {
- case SecurityErrorOperation:
- client->errorValue = stuff->property;
- return BadAtom;;
- case SecurityIgnoreOperation:
- return NullPropertyReply(client, pProp->type, pProp->format,
- &reply);
- }
+ case SecurityErrorOperation:
+ client->errorValue = stuff->property;
+ return BadAtom;;
+ case SecurityIgnoreOperation:
+ return NullPropertyReply(client, pProp->type, pProp->format, &reply);
}
-#endif
+
/* If the request type and actual type don't match. Return the
property information, but not the data. */
@@ -663,17 +646,15 @@ ProcDeleteProperty(register ClientPtr cl
return (BadAtom);
}
-#ifdef XACE
- switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
- SecurityDestroyAccess))
- {
- case SecurityErrorOperation:
- client->errorValue = stuff->property;
- return BadAtom;;
- case SecurityIgnoreOperation:
- return Success;
+ switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
+ SecurityDestroyAccess))
+ {
+ case SecurityErrorOperation:
+ client->errorValue = stuff->property;
+ return BadAtom;;
+ case SecurityIgnoreOperation:
+ return Success;
}
-#endif
result = DeleteProperty(pWin, stuff->property);
if (client->noClientException != Success)
diff --git a/dix/resource.c b/dix/resource.c
index efb759e..c204460 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -148,9 +148,7 @@ Equipment Corporation.
#include "panoramiX.h"
#include "panoramiXsrv.h"
#endif
-#ifdef XACE
#include "xace.h"
-#endif
#include <assert.h>
#ifdef XSERVER_DTRACE
@@ -904,11 +902,10 @@ SecurityLookupIDByType(ClientPtr client,
break;
}
}
-#ifdef XACE
if (retval && client &&
!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval))
retval = NULL;
-#endif
+
return retval;
}
@@ -932,11 +929,10 @@ SecurityLookupIDByClass(ClientPtr client
break;
}
}
-#ifdef XACE
if (retval && client &&
!XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval))
retval = NULL;
-#endif
+
return retval;
}
diff --git a/dix/window.c b/dix/window.c
index f0079e0..fa6906f 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -126,9 +126,7 @@ Equipment Corporation.
#ifdef XAPPGROUP
#include "appgroup.h"
#endif
-#ifdef XACE
#include "xace.h"
-#endif
/******
* Window stuff for server
@@ -531,9 +529,7 @@ InitRootWindow(WindowPtr pWin)
/* We SHOULD check for an error value here XXX */
(*pScreen->ChangeWindowAttributes)(pWin, backFlag);
-#ifdef XACE
XaceHook(XACE_WINDOW_INIT, serverClient, pWin);
-#endif
MapWindow(pWin, serverClient);
}
@@ -738,18 +734,16 @@ CreateWindow(Window wid, register Window
}
pWin->borderWidth = bw;
-#ifdef XACE
+
/* can't let untrusted clients have background None windows;
* they make it too easy to steal window contents
*/
- if (!XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
- {
+ if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
+ pWin->backgroundState = None;
+ else {
pWin->backgroundState = BackgroundPixel;
pWin->background.pixel = 0;
}
- else
-#endif
- pWin->backgroundState = None;
pWin->borderIsPixel = pParent->borderIsPixel;
pWin->border = pParent->border;
@@ -769,9 +763,7 @@ CreateWindow(Window wid, register Window
REGION_NULL(pScreen, &pWin->winSize);
REGION_NULL(pScreen, &pWin->borderSize);
-#ifdef XACE
XaceHook(XACE_WINDOW_INIT, client, pWin);
-#endif
pHead = RealChildHead(pParent);
if (pHead)
@@ -1036,24 +1028,18 @@ ChangeWindowAttributes(register WindowPt
borderRelative = TRUE;
if (pixID == None)
{
-#ifdef XACE
/* can't let untrusted clients have background None windows */
- if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin))
- {
-#endif
- if (pWin->backgroundState == BackgroundPixmap)
- (*pScreen->DestroyPixmap)(pWin->background.pixmap);
- if (!pWin->parent)
- MakeRootTile(pWin);
- else
- pWin->backgroundState = None;
-#ifdef XACE
- }
- else
- { /* didn't change the background to None, so don't tell ddx */
+ if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin)) {
+ if (pWin->backgroundState == BackgroundPixmap)
+ (*pScreen->DestroyPixmap)(pWin->background.pixmap);
+ if (!pWin->parent)
+ MakeRootTile(pWin);
+ else
+ pWin->backgroundState = None;
+ } else {
+ /* didn't change the backgrnd to None, so don't tell ddx */
index2 = 0;
}
-#endif
}
else if (pixID == ParentRelative)
{
@@ -2739,11 +2725,9 @@ MapWindow(register WindowPtr pWin, Clien
if (pWin->mapped)
return(Success);
-#ifdef XACE
/* general check for permission to map window */
if (!XaceHook(XACE_MAP_ACCESS, client, pWin))
return Success;
-#endif
pScreen = pWin->drawable.pScreen;
if ( (pParent = pWin->parent) )
diff --git a/os/access.c b/os/access.c
index cdb1758..d61edef 100644
--- a/os/access.c
+++ b/os/access.c
@@ -202,9 +202,7 @@ SOFTWARE.
#include "dixstruct.h"
#include "osdep.h"
-#ifdef XACE
#include "xace.h"
-#endif
#ifndef PATH_MAX
#ifdef MAXPATHLEN
@@ -1528,11 +1526,11 @@ AuthorizedClient(ClientPtr client)
{
if (!client || defeatAccessControl)
return TRUE;
-#ifdef XACE
+
/* untrusted clients can't change host access */
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, SecurityWriteAccess))
return FALSE;
-#endif
+
return LocalClient(client);
}
diff --git a/os/connection.c b/os/connection.c
index 100f1e5..ffe911e 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -148,9 +148,7 @@ extern __const__ int _nfiles;
#ifdef XAPPGROUP
#include "appgroup.h"
#endif
-#ifdef XACE
#include "xace.h"
-#endif
#ifdef XCSECURITY
#include "securitysrv.h"
#endif
@@ -750,9 +748,9 @@ ClientAuthorized(ClientPtr client,
/* indicate to Xdmcp protocol that we've opened new client */
XdmcpOpenDisplay(priv->fd);
#endif /* XDMCP */
-#ifdef XACE
+
XaceHook(XACE_AUTH_AVAIL, client, auth_id);
-#endif
+
/* At this point, if the client is authorized to change the access control
* list, we should getpeername() information, and add the client to
* the selfhosts list. It's not really the host machine, but the
diff-tree a5d6499d666fea4a9988118ddd3a5e4c9cfcc32c (from 89b2aa9be81613cb1a06bd535bf50ecf2a00208d)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date: Fri Dec 1 16:42:37 2006 -0800
Fix syntax error in configure check for SYSV_IPC that broke with Sun cc
diff --git a/configure.ac b/configure.ac
index db2234f..1aa5455 100644
--- a/configure.ac
+++ b/configure.ac
@@ -174,7 +174,7 @@ AC_CACHE_CHECK([for SYSV IPC],
[AC_TRY_LINK([
#include <sys/shm.h>
],[
-int main () {
+{
int id;
id = shmget(IPC_PRIVATE, 512, SHM_W | SHM_R);
if (id < 0) return -1;
diff-tree 89b2aa9be81613cb1a06bd535bf50ecf2a00208d (from 23ba72323af785516db6cbcf6c1b2fa907a8232f)
Author: Keith Packard <keithp at guitar.keithp.com>
Date: Mon Nov 27 21:40:24 2006 -0800
Destroying RandR crtc or output overwrites memory.
RRCrtcDestroyResource and RROutputDestroyResource had matching
bugs that would overwrite memory past the end of the storage
of the crtc or output arrays. Oops.
(cherry picked from 4202b23ed86405a4cebfdcf239df1b023c1d10ca commit)
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 212352c..e8a7b79 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -344,7 +344,7 @@ RRCrtcDestroyResource (pointer value, XI
if (pScrPriv->crtcs[i] == crtc)
{
memmove (pScrPriv->crtcs + i, pScrPriv->crtcs + i + 1,
- (pScrPriv->numCrtcs - (i - 1)) * sizeof (RRCrtcPtr));
+ (pScrPriv->numCrtcs - (i + 1)) * sizeof (RRCrtcPtr));
--pScrPriv->numCrtcs;
break;
}
diff --git a/randr/rroutput.c b/randr/rroutput.c
index f38f582..430f8bd 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -327,7 +327,7 @@ RROutputDestroyResource (pointer value,
if (pScrPriv->outputs[i] == output)
{
memmove (pScrPriv->outputs + i, pScrPriv->outputs + i + 1,
- (pScrPriv->numOutputs - (i - 1)) * sizeof (RROutputPtr));
+ (pScrPriv->numOutputs - (i + 1)) * sizeof (RROutputPtr));
--pScrPriv->numOutputs;
break;
}
diff-tree 23ba72323af785516db6cbcf6c1b2fa907a8232f (from ccd804c6c01cdfffe938fa5336be9b5668a6f0c0)
Author: Keith Packard <keithp at ukulele.keithp.com>
Date: Thu Nov 30 23:16:42 2006 -0800
RandR ListOutputProperties has nAtoms element, not nProperties
Earlier RandR 1.2 encoding revisions used 8-bit nProperties field.
Final RandR 1.2 spec uses 16-bit nAtoms field instead.
(cherry picked from 66b6358a393972946f16394918db2401c51dc5ed commit)
diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index a47f306..13e8483 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -325,9 +325,9 @@ ProcRRListOutputProperties (ClientPtr cl
return(BadAlloc);
rep.type = X_Reply;
- rep.nProperties = numProps;
rep.length = (numProps * sizeof(Atom)) >> 2;
rep.sequenceNumber = client->sequence;
+ rep.nAtoms = numProps;
if (client->swapped)
{
int n;
diff-tree ccd804c6c01cdfffe938fa5336be9b5668a6f0c0 (from parents)
Merge: 9423ac134a2a9800787c4978d384827cc4e61fc8 82912ad7709e8cf4a5f8a9fa6b47f789842a3fe9
Author: Drew Parsons <drew at pug.localdomain>
Date: Fri Dec 1 15:21:57 2006 +1100
Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver
diff-tree 9423ac134a2a9800787c4978d384827cc4e61fc8 (from 8956f63a941bf0a5f157d47b33e6221601a75040)
Author: Drew Parsons <drew at pug.localdomain>
Date: Fri Dec 1 15:21:05 2006 +1100
GNU/FreeBSD support in GLX: include byteswap.h for FreeBSD systems
defining __GLIBC__, as done already for Linux and Hurd (cf. bug #5613).
Also includes some more __GNU__ checks on top of those made in
commit ade4bf09076d13dbf3549c0a2d987a0afe76d5c1.
Thanks Petr Salinger (Debian bug #400869).
diff --git a/GL/glx/indirect_dispatch_swap.c b/GL/glx/indirect_dispatch_swap.c
index 1d45676..136f0d0 100644
--- a/GL/glx/indirect_dispatch_swap.c
+++ b/GL/glx/indirect_dispatch_swap.c
@@ -28,7 +28,7 @@
#include <X11/Xmd.h>
#include <GL/gl.h>
#include <GL/glxproto.h>
-#if defined(__linux__) || defined(__GNU__)
+#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
diff --git a/GL/glx/indirect_program.c b/GL/glx/indirect_program.c
index d0fd3d1..8d5f0e6 100644
--- a/GL/glx/indirect_program.c
+++ b/GL/glx/indirect_program.c
@@ -46,7 +46,7 @@
#include "dispatch.h"
#include "glapioffsets.h"
-#ifdef __linux__
+#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
diff --git a/GL/glx/indirect_reqsize.c b/GL/glx/indirect_reqsize.c
index 1c332da..d3e2bc5 100644
--- a/GL/glx/indirect_reqsize.c
+++ b/GL/glx/indirect_reqsize.c
@@ -31,7 +31,7 @@
#include "indirect_size.h"
#include "indirect_reqsize.h"
-#if defined(__linux__) || defined(__GNU__)
+#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
# include <byteswap.h>
# define SWAP_32(v) do { (v) = bswap_32(v); } while(0)
#else
diff --git a/GL/glx/indirect_texture_compression.c b/GL/glx/indirect_texture_compression.c
index 0c42ea0..35af1d2 100644
--- a/GL/glx/indirect_texture_compression.c
+++ b/GL/glx/indirect_texture_compression.c
@@ -39,7 +39,7 @@
#include "glthread.h"
#include "dispatch.h"
-#ifdef __linux__
+#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
diff --git a/GL/glx/indirect_util.c b/GL/glx/indirect_util.c
index 2d64f33..09b7ab8 100644
--- a/GL/glx/indirect_util.c
+++ b/GL/glx/indirect_util.c
@@ -28,7 +28,7 @@
#include <X11/Xmd.h>
#include <GL/gl.h>
#include <GL/glxproto.h>
-#if defined(__linux__) || defined(__GNU__)
+#if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
diff --git a/GL/glx/swap_interval.c b/GL/glx/swap_interval.c
index bcc1c47..c4137c1 100644
--- a/GL/glx/swap_interval.c
+++ b/GL/glx/swap_interval.c
@@ -40,7 +40,7 @@
#include "dispatch.h"
#include "glapioffsets.h"
-#ifdef __linux__
+#if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h>
#elif defined(__OpenBSD__)
#include <sys/endian.h>
diff-tree 82912ad7709e8cf4a5f8a9fa6b47f789842a3fe9 (from 8956f63a941bf0a5f157d47b33e6221601a75040)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date: Thu Nov 30 20:13:52 2006 -0800
Make solaris version of xf86OSRingBell return void like other OS'es
diff --git a/hw/xfree86/os-support/solaris/sun_bell.c b/hw/xfree86/os-support/solaris/sun_bell.c
index b3a9bfe..29ecd73 100644
--- a/hw/xfree86/os-support/solaris/sun_bell.c
+++ b/hw/xfree86/os-support/solaris/sun_bell.c
@@ -48,7 +48,7 @@
#define AUDIO_DEVICE "/dev/audio"
-_X_EXPORT int
+_X_EXPORT void
xf86OSRingBell(int loudness, int pitch, int duration)
{
static short samples[BELL_SAMPLES];
@@ -66,7 +66,7 @@ xf86OSRingBell(int loudness, int pitch,
int audioFD;
if ((loudness <= 0) || (pitch <= 0) || (duration <= 0)) {
- return 0;
+ return;
}
lastFreq = 0;
@@ -76,7 +76,7 @@ xf86OSRingBell(int loudness, int pitch,
if (audioFD == -1) {
xf86Msg(X_ERROR, "Bell: cannot open audio device \"%s\": %s\n",
AUDIO_DEVICE, strerror(errno));
- return -1;
+ return;
}
freq = pitch;
@@ -126,7 +126,7 @@ xf86OSRingBell(int loudness, int pitch,
"Bell: AUDIO_SETINFO failed on audio device \"%s\": %s\n",
AUDIO_DEVICE, strerror(errno));
close(audioFD);
- return -1;
+ return;
}
iovcnt = 0;
@@ -155,7 +155,7 @@ xf86OSRingBell(int loudness, int pitch,
"Bell: writev failed on audio device \"%s\": %s\n",
AUDIO_DEVICE, strerror(errno));
close(audioFD);
- return -1;
+ return;
}
i = iovcnt;
} else {
@@ -181,5 +181,5 @@ xf86OSRingBell(int loudness, int pitch,
}
close(audioFD);
- return 0;
+ return;
}
diff-tree 8956f63a941bf0a5f157d47b33e6221601a75040 (from ee9bdd3f4a14a42fb0747acc420966f0f669129b)
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date: Thu Nov 30 19:53:29 2006 -0800
Tell automake to STFU about the *.O files
automake will not stop whining about the *.O files not being in normal library
name format, so just tell automake they are PROGRAMS so it builds them without
bitching.
diff --git a/dix/Makefile.am b/dix/Makefile.am
index d0d6e87..a1f02c1 100644
--- a/dix/Makefile.am
+++ b/dix/Makefile.am
@@ -52,7 +52,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o
-noinst_LIBRARIES = dix.O
+noinst_PROGRAMS = dix.O
dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
ld -r -o $@ .libs/*.o
diff --git a/os/Makefile.am b/os/Makefile.am
index 7381797..d8d1405 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -56,7 +56,7 @@ if XSERVER_DTRACE
dtrace.o: $(top_srcdir)/dix/Xserver.d $(am_libos_la_OBJECTS)
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o ../dix/.libs/*.o
-noinst_LIBRARIES = os.O
+noinst_PROGRAMS = os.O
os.O: dtrace.o $(am_libos_la_OBJECTS)
ld -r -o $@ dtrace.o .libs/*.o
More information about the xorg-commit
mailing list