Merge branch 'master' of git://anongit.freedesktop.org/git/xorg/xserver

This commit is contained in:
Peter Hutterer 2006-12-19 10:51:01 +10:30 committed by Peter Hutterer
commit ca5ebe3971
186 changed files with 8772 additions and 3433 deletions

View File

@ -441,6 +441,7 @@ static int GetDrawableOrPixmap( __GLXcontext *glxc, GLXDrawable drawId,
__GLcontextModes *modes; __GLcontextModes *modes;
__GLXdrawable *pGlxDraw; __GLXdrawable *pGlxDraw;
__GLXpixmap *drawPixmap = NULL; __GLXpixmap *drawPixmap = NULL;
int rc;
/* This is the GLX 1.3 case - the client passes in a GLXWindow and /* This is the GLX 1.3 case - the client passes in a GLXWindow and
* we just return the __GLXdrawable. The first time a GLXPixmap * we just return the __GLXdrawable. The first time a GLXPixmap
@ -466,8 +467,8 @@ static int GetDrawableOrPixmap( __GLXcontext *glxc, GLXDrawable drawId,
* GLXWindow with the same XID as an X Window, so we wont get any * GLXWindow with the same XID as an X Window, so we wont get any
* resource ID clashes. Effectively, the X Window is now also a * resource ID clashes. Effectively, the X Window is now also a
* GLXWindow. */ * GLXWindow. */
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
if (pDraw->type == DRAWABLE_WINDOW) { if (pDraw->type == DRAWABLE_WINDOW) {
VisualID vid = wVisual((WindowPtr)pDraw); VisualID vid = wVisual((WindowPtr)pDraw);
@ -1199,12 +1200,12 @@ static int ValidateCreateDrawable(ClientPtr client,
ScreenPtr pScreen; ScreenPtr pScreen;
VisualPtr pVisual; VisualPtr pVisual;
__GLXscreen *pGlxScreen; __GLXscreen *pGlxScreen;
int i; int i, rc;
LEGAL_NEW_RESOURCE(glxDrawableId, client); LEGAL_NEW_RESOURCE(glxDrawableId, client);
pDraw = (DrawablePtr) LookupDrawable(drawablId, client); rc = dixLookupDrawable(&pDraw, drawablId, client, 0, DixUnknownAccess);
if (!pDraw || pDraw->type != type) { if (rc != Success || pDraw->type != type) {
client->errorValue = drawablId; client->errorValue = drawablId;
return type == DRAWABLE_WINDOW ? BadWindow : BadPixmap; return type == DRAWABLE_WINDOW ? BadWindow : BadPixmap;
} }
@ -2034,10 +2035,11 @@ int __glXDisp_BindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc; xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc;
XID drawable = req->drawable; XID drawable = req->drawable;
int barrier = req->barrier; int barrier = req->barrier;
DrawablePtr pDraw = (DrawablePtr) LookupDrawable(drawable, client); DrawablePtr pDraw;
int screen; int screen, rc;
if (pDraw && (pDraw->type == DRAWABLE_WINDOW)) { rc = dixLookupDrawable(&pDraw, drawable, client, 0, DixUnknownAccess);
if (rc == Success && (pDraw->type == DRAWABLE_WINDOW)) {
screen = pDraw->pScreen->myNum; screen = pDraw->pScreen->myNum;
if (__glXSwapBarrierFuncs && if (__glXSwapBarrierFuncs &&
__glXSwapBarrierFuncs[screen].bindSwapBarrierFunc) { __glXSwapBarrierFuncs[screen].bindSwapBarrierFunc) {

View File

@ -237,7 +237,7 @@ GLboolean __glXFreeContext(__GLXcontext *cx)
* __glXDispatch() or as a callback from the resource manager. In * __glXDispatch() or as a callback from the resource manager. In
* the latter case we need to lift the DRI lock manually. */ * the latter case we need to lift the DRI lock manually. */
if (glxBlockClients) { if (!glxBlockClients) {
__glXleaveServer(); __glXleaveServer();
cx->destroy(cx); cx->destroy(cx);
__glXenterServer(); __glXenterServer();

View File

@ -85,8 +85,6 @@ extern HIDDEN void __glXDisp_EvalCoord2fv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_EvalCoord2fv(GLbyte * pc); extern HIDDEN void __glXDispSwap_EvalCoord2fv(GLbyte * pc);
extern HIDDEN int __glXDisp_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDispSwap_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_DestroyPixmap(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN void __glXDisp_ProgramEnvParameter4dvARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_ProgramEnvParameter4dvARB(GLbyte * pc);
extern HIDDEN int __glXDisp_GetMapiv(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDispSwap_GetMapiv(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_GetMapiv(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDisp_SwapBuffers(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_SwapBuffers(struct __GLXclientStateRec *, GLbyte *);
@ -123,6 +121,8 @@ extern HIDDEN int __glXDisp_VendorPrivate(struct __GLXclientStateRec *, GLbyte *
extern HIDDEN int __glXDispSwap_VendorPrivate(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_VendorPrivate(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDisp_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDispSwap_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_CreateGLXPixmapWithConfigSGIX(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN void __glXDisp_VertexAttrib1fvNV(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib1fvNV(GLbyte * pc);
extern HIDDEN void __glXDisp_Vertex3iv(GLbyte * pc); extern HIDDEN void __glXDisp_Vertex3iv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_Vertex3iv(GLbyte * pc); extern HIDDEN void __glXDispSwap_Vertex3iv(GLbyte * pc);
extern HIDDEN void __glXDisp_CopyConvolutionFilter1D(GLbyte * pc); extern HIDDEN void __glXDisp_CopyConvolutionFilter1D(GLbyte * pc);
@ -279,6 +279,8 @@ extern HIDDEN void __glXDisp_ClearStencil(GLbyte * pc);
extern HIDDEN void __glXDispSwap_ClearStencil(GLbyte * pc); extern HIDDEN void __glXDispSwap_ClearStencil(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttrib3dvARB(GLbyte * pc); extern HIDDEN void __glXDisp_VertexAttrib3dvARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib3dvARB(GLbyte * pc); extern HIDDEN void __glXDispSwap_VertexAttrib3dvARB(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttribs4ubvNV(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttribs4ubvNV(GLbyte * pc);
extern HIDDEN void __glXDisp_ConvolutionParameteriv(GLbyte * pc); extern HIDDEN void __glXDisp_ConvolutionParameteriv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_ConvolutionParameteriv(GLbyte * pc); extern HIDDEN void __glXDispSwap_ConvolutionParameteriv(GLbyte * pc);
extern HIDDEN void __glXDisp_RasterPos2fv(GLbyte * pc); extern HIDDEN void __glXDisp_RasterPos2fv(GLbyte * pc);
@ -327,6 +329,8 @@ extern HIDDEN int __glXDisp_GetVertexAttribdvNV(struct __GLXclientStateRec *, GL
extern HIDDEN int __glXDispSwap_GetVertexAttribdvNV(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_GetVertexAttribdvNV(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN void __glXDisp_Normal3fv(GLbyte * pc); extern HIDDEN void __glXDisp_Normal3fv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_Normal3fv(GLbyte * pc); extern HIDDEN void __glXDispSwap_Normal3fv(GLbyte * pc);
extern HIDDEN void __glXDisp_ProgramEnvParameter4dvARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_ProgramEnvParameter4dvARB(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttrib4ivARB(GLbyte * pc); extern HIDDEN void __glXDisp_VertexAttrib4ivARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib4ivARB(GLbyte * pc); extern HIDDEN void __glXDispSwap_VertexAttrib4ivARB(GLbyte * pc);
extern HIDDEN void __glXDisp_End(GLbyte * pc); extern HIDDEN void __glXDisp_End(GLbyte * pc);
@ -457,8 +461,6 @@ extern HIDDEN void __glXDisp_BindFramebufferEXT(GLbyte * pc);
extern HIDDEN void __glXDispSwap_BindFramebufferEXT(GLbyte * pc); extern HIDDEN void __glXDispSwap_BindFramebufferEXT(GLbyte * pc);
extern HIDDEN void __glXDisp_PushAttrib(GLbyte * pc); extern HIDDEN void __glXDisp_PushAttrib(GLbyte * pc);
extern HIDDEN void __glXDispSwap_PushAttrib(GLbyte * pc); extern HIDDEN void __glXDispSwap_PushAttrib(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttrib4usvARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib4usvARB(GLbyte * pc);
extern HIDDEN int __glXDisp_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDispSwap_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_DestroyPbuffer(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN void __glXDisp_TexParameteriv(GLbyte * pc); extern HIDDEN void __glXDisp_TexParameteriv(GLbyte * pc);
@ -615,6 +617,8 @@ extern HIDDEN void __glXDisp_PrioritizeTextures(GLbyte * pc);
extern HIDDEN void __glXDispSwap_PrioritizeTextures(GLbyte * pc); extern HIDDEN void __glXDispSwap_PrioritizeTextures(GLbyte * pc);
extern HIDDEN int __glXDisp_PixelStorei(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDisp_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN int __glXDispSwap_PixelStorei(struct __GLXclientStateRec *, GLbyte *); extern HIDDEN int __glXDispSwap_PixelStorei(struct __GLXclientStateRec *, GLbyte *);
extern HIDDEN void __glXDisp_VertexAttrib4usvARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib4usvARB(GLbyte * pc);
extern HIDDEN void __glXDisp_Color4iv(GLbyte * pc); extern HIDDEN void __glXDisp_Color4iv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_Color4iv(GLbyte * pc); extern HIDDEN void __glXDispSwap_Color4iv(GLbyte * pc);
extern HIDDEN void __glXDisp_EvalCoord2dv(GLbyte * pc); extern HIDDEN void __glXDisp_EvalCoord2dv(GLbyte * pc);
@ -783,8 +787,6 @@ extern HIDDEN void __glXDisp_VertexAttribs2fvNV(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttribs2fvNV(GLbyte * pc); extern HIDDEN void __glXDispSwap_VertexAttribs2fvNV(GLbyte * pc);
extern HIDDEN void __glXDisp_Rectiv(GLbyte * pc); extern HIDDEN void __glXDisp_Rectiv(GLbyte * pc);
extern HIDDEN void __glXDispSwap_Rectiv(GLbyte * pc); extern HIDDEN void __glXDispSwap_Rectiv(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttrib1fvNV(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttrib1fvNV(GLbyte * pc);
extern HIDDEN void __glXDisp_SecondaryColor3dvEXT(GLbyte * pc); extern HIDDEN void __glXDisp_SecondaryColor3dvEXT(GLbyte * pc);
extern HIDDEN void __glXDispSwap_SecondaryColor3dvEXT(GLbyte * pc); extern HIDDEN void __glXDispSwap_SecondaryColor3dvEXT(GLbyte * pc);
extern HIDDEN void __glXDisp_Vertex2fv(GLbyte * pc); extern HIDDEN void __glXDisp_Vertex2fv(GLbyte * pc);
@ -919,8 +921,6 @@ extern HIDDEN void __glXDisp_DrawBuffersARB(GLbyte * pc);
extern HIDDEN void __glXDispSwap_DrawBuffersARB(GLbyte * pc); extern HIDDEN void __glXDispSwap_DrawBuffersARB(GLbyte * pc);
extern HIDDEN void __glXDisp_LoadName(GLbyte * pc); extern HIDDEN void __glXDisp_LoadName(GLbyte * pc);
extern HIDDEN void __glXDispSwap_LoadName(GLbyte * pc); extern HIDDEN void __glXDispSwap_LoadName(GLbyte * pc);
extern HIDDEN void __glXDisp_VertexAttribs4ubvNV(GLbyte * pc);
extern HIDDEN void __glXDispSwap_VertexAttribs4ubvNV(GLbyte * pc);
extern HIDDEN void __glXDisp_CopyTexSubImage1D(GLbyte * pc); extern HIDDEN void __glXDisp_CopyTexSubImage1D(GLbyte * pc);
extern HIDDEN void __glXDispSwap_CopyTexSubImage1D(GLbyte * pc); extern HIDDEN void __glXDispSwap_CopyTexSubImage1D(GLbyte * pc);
extern HIDDEN void __glXDisp_CullFace(GLbyte * pc); extern HIDDEN void __glXDisp_CullFace(GLbyte * pc);

View File

@ -28,7 +28,7 @@
#include <X11/Xmd.h> #include <X11/Xmd.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glxproto.h> #include <GL/glxproto.h>
#if defined(__linux__) || defined(__GNU__) #if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h> #include <byteswap.h>
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
#include <sys/endian.h> #include <sys/endian.h>

View File

@ -46,7 +46,7 @@
#include "dispatch.h" #include "dispatch.h"
#include "glapioffsets.h" #include "glapioffsets.h"
#ifdef __linux__ #if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h> #include <byteswap.h>
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
#include <sys/endian.h> #include <sys/endian.h>

View File

@ -31,7 +31,7 @@
#include "indirect_size.h" #include "indirect_size.h"
#include "indirect_reqsize.h" #include "indirect_reqsize.h"
#if defined(__linux__) || defined(__GNU__) #if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
# include <byteswap.h> # include <byteswap.h>
# define SWAP_32(v) do { (v) = bswap_32(v); } while(0) # define SWAP_32(v) do { (v) = bswap_32(v); } while(0)
#else #else

View File

@ -645,7 +645,7 @@ static const void *Render_function_table[400][2] = {
/* [ 302] = 4182 */ {__glXDisp_RequestResidentProgramsNV, __glXDispSwap_RequestResidentProgramsNV}, /* [ 302] = 4182 */ {__glXDisp_RequestResidentProgramsNV, __glXDispSwap_RequestResidentProgramsNV},
/* [ 303] = 4183 */ {__glXDisp_LoadProgramNV, __glXDispSwap_LoadProgramNV}, /* [ 303] = 4183 */ {__glXDisp_LoadProgramNV, __glXDispSwap_LoadProgramNV},
/* [ 304] = 4184 */ {__glXDisp_ProgramParameter4fvNV, __glXDispSwap_ProgramParameter4fvNV}, /* [ 304] = 4184 */ {__glXDisp_ProgramParameter4fvNV, __glXDispSwap_ProgramParameter4fvNV},
/* [ 305] = 4185 */ {__glXDisp_ProgramParameter4dvNV, __glXDispSwap_ProgramParameter4dvNV}, /* [ 305] = 4185 */ {__glXDisp_ProgramEnvParameter4dvARB, __glXDispSwap_ProgramEnvParameter4dvARB},
/* [ 306] = 4186 */ {__glXDisp_ProgramParameters4fvNV, __glXDispSwap_ProgramParameters4fvNV}, /* [ 306] = 4186 */ {__glXDisp_ProgramParameters4fvNV, __glXDispSwap_ProgramParameters4fvNV},
/* [ 307] = 4187 */ {__glXDisp_ProgramParameters4dvNV, __glXDispSwap_ProgramParameters4dvNV}, /* [ 307] = 4187 */ {__glXDisp_ProgramParameters4dvNV, __glXDispSwap_ProgramParameters4dvNV},
/* [ 308] = 4188 */ {__glXDisp_TrackMatrixNV, __glXDispSwap_TrackMatrixNV}, /* [ 308] = 4188 */ {__glXDisp_TrackMatrixNV, __glXDispSwap_TrackMatrixNV},
@ -886,10 +886,10 @@ static const int_fast16_t Render_size_table[400][2] = {
/* [140] = 140 */ { 0, ~0}, /* [140] = 140 */ { 0, ~0},
/* [141] = 141 */ { 4, ~0}, /* [141] = 141 */ { 4, ~0},
/* [142] = 142 */ { 8, ~0}, /* [142] = 142 */ { 8, ~0},
/* [143] = 143 */ { 40, 20}, /* [143] = 143 */ { 28, 20},
/* [144] = 144 */ { 28, 21}, /* [144] = 144 */ { 20, 21},
/* [145] = 145 */ { 64, 22}, /* [145] = 145 */ { 48, 22},
/* [146] = 146 */ { 44, 23}, /* [146] = 146 */ { 32, 23},
/* [147] = 147 */ { 24, ~0}, /* [147] = 147 */ { 24, ~0},
/* [148] = 148 */ { 16, ~0}, /* [148] = 148 */ { 16, ~0},
/* [149] = 149 */ { 44, ~0}, /* [149] = 149 */ { 44, ~0},

View File

@ -39,7 +39,7 @@
#include "glthread.h" #include "glthread.h"
#include "dispatch.h" #include "dispatch.h"
#ifdef __linux__ #if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h> #include <byteswap.h>
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
#include <sys/endian.h> #include <sys/endian.h>

View File

@ -28,7 +28,7 @@
#include <X11/Xmd.h> #include <X11/Xmd.h>
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glxproto.h> #include <GL/glxproto.h>
#if defined(__linux__) || defined(__GNU__) #if defined(__linux__) || defined (__GLIBC__) || defined(__GNU__)
#include <byteswap.h> #include <byteswap.h>
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
#include <sys/endian.h> #include <sys/endian.h>

View File

@ -40,7 +40,7 @@
#include "dispatch.h" #include "dispatch.h"
#include "glapioffsets.h" #include "glapioffsets.h"
#ifdef __linux__ #if defined(__linux__) || defined (__GLIBC__) || defined (__GNU__)
#include <byteswap.h> #include <byteswap.h>
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
#include <sys/endian.h> #include <sys/endian.h>

View File

@ -1092,8 +1092,8 @@ int XETrapRequestVector(ClientPtr client)
pdata->hdr.client = client->index; /* stuff client index in hdr */ pdata->hdr.client = client->index; /* stuff client index in hdr */
if (BitIsTrue(penv->cur.data_config_flags_data,XETrapWinXY)) if (BitIsTrue(penv->cur.data_config_flags_data,XETrapWinXY))
{ {
window_ptr = (WindowPtr) LookupDrawable(stuff->id, client); if (Success != dixLookupDrawable(&window_ptr, stuff->id,
if (window_ptr == 0L) client, 0, DixUnknownAccess))
{ /* Failed...invalidate the X and Y coordinate data. */ { /* Failed...invalidate the X and Y coordinate data. */
pdata->hdr.win_x = -1L; pdata->hdr.win_x = -1L;
pdata->hdr.win_y = -1L; pdata->hdr.win_y = -1L;

View File

@ -355,13 +355,15 @@ int AttrValidate(
AppGroupPtr pAppGrp) AppGroupPtr pAppGrp)
{ {
WindowPtr pWin; WindowPtr pWin;
int idepth, ivids, found; int idepth, ivids, found, rc;
ScreenPtr pScreen; ScreenPtr pScreen;
DepthPtr pDepth; DepthPtr pDepth;
ColormapPtr pColormap; ColormapPtr pColormap;
pWin = LookupWindow (pAppGrp->default_root, client); rc = dixLookupWindow(&pWin, pAppGrp->default_root, client,
/* XXX check that pWin is not NULL */ DixUnknownAccess);
if (rc != Success)
return rc;
pScreen = pWin->drawable.pScreen; pScreen = pWin->drawable.pScreen;
if (WindowTable[pScreen->myNum]->drawable.id != pAppGrp->default_root) if (WindowTable[pScreen->myNum]->drawable.id != pAppGrp->default_root)
return BadWindow; return BadWindow;
@ -432,7 +434,7 @@ int ProcXagDestroy(
REQUEST_SIZE_MATCH (xXagDestroyReq); REQUEST_SIZE_MATCH (xXagDestroyReq);
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client, pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess); (XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
if (!pAppGrp) return XagBadAppGroup; if (!pAppGrp) return XagBadAppGroup;
FreeResource ((XID)stuff->app_group, RT_NONE); FreeResource ((XID)stuff->app_group, RT_NONE);
if (--XagCallbackRefCount == 0) if (--XagCallbackRefCount == 0)
@ -451,7 +453,7 @@ int ProcXagGetAttr(
REQUEST_SIZE_MATCH (xXagGetAttrReq); REQUEST_SIZE_MATCH (xXagGetAttrReq);
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client, pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess); (XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
if (!pAppGrp) return XagBadAppGroup; if (!pAppGrp) return XagBadAppGroup;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
@ -483,10 +485,13 @@ int ProcXagQuery(
ClientPtr pClient; ClientPtr pClient;
AppGroupPtr pAppGrp; AppGroupPtr pAppGrp;
REQUEST (xXagQueryReq); REQUEST (xXagQueryReq);
int n; int n, rc;
REQUEST_SIZE_MATCH (xXagQueryReq); REQUEST_SIZE_MATCH (xXagQueryReq);
pClient = LookupClient (stuff->resource, client); rc = dixLookupClient(&pClient, stuff->resource, client, DixUnknownAccess);
if (rc != Success)
return rc;
for (pAppGrp = appGrpList; pAppGrp != NULL; pAppGrp = pAppGrp->next) for (pAppGrp = appGrpList; pAppGrp != NULL; pAppGrp = pAppGrp->next)
for (n = 0; n < pAppGrp->nclients; n++) for (n = 0; n < pAppGrp->nclients; n++)
if (pAppGrp->clients[n] == pClient) { if (pAppGrp->clients[n] == pClient) {

View File

@ -227,7 +227,7 @@ int ProcStoreColors(
REQUEST_AT_LEAST_SIZE (xXcupStoreColorsReq); REQUEST_AT_LEAST_SIZE (xXcupStoreColorsReq);
pcmp = (ColormapPtr) SecurityLookupIDByType (client, stuff->cmap, pcmp = (ColormapPtr) SecurityLookupIDByType (client, stuff->cmap,
RT_COLORMAP, SecurityWriteAccess); RT_COLORMAP, DixWriteAccess);
if (pcmp) { if (pcmp) {
int ncolors, n; int ncolors, n;

View File

@ -448,16 +448,15 @@ ProcCreateImageBuffers (client)
register int n; register int n;
WindowPtr pWin; WindowPtr pWin;
XID *ids; XID *ids;
int len, nbuf; int len, nbuf, i, err, rc;
int i;
int err;
REQUEST_AT_LEAST_SIZE (xMbufCreateImageBuffersReq); REQUEST_AT_LEAST_SIZE (xMbufCreateImageBuffersReq);
len = stuff->length - (sizeof(xMbufCreateImageBuffersReq) >> 2); len = stuff->length - (sizeof(xMbufCreateImageBuffersReq) >> 2);
if (len == 0) if (len == 0)
return BadLength; return BadLength;
if (!(pWin = LookupWindow (stuff->window, client))) rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
return BadWindow; if (rc != Success)
return rc;
if (pWin->drawable.class == InputOnly) if (pWin->drawable.class == InputOnly)
return BadMatch; return BadMatch;
switch (stuff->updateAction) switch (stuff->updateAction)
@ -584,10 +583,12 @@ ProcDestroyImageBuffers (client)
{ {
REQUEST (xMbufDestroyImageBuffersReq); REQUEST (xMbufDestroyImageBuffersReq);
WindowPtr pWin; WindowPtr pWin;
int rc;
REQUEST_SIZE_MATCH (xMbufDestroyImageBuffersReq); REQUEST_SIZE_MATCH (xMbufDestroyImageBuffersReq);
if (!(pWin = LookupWindow (stuff->window, client))) rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
return BadWindow; if (rc != Success)
return rc;
DestroyImageBuffers (pWin); DestroyImageBuffers (pWin);
return Success; return Success;
} }
@ -599,16 +600,16 @@ ProcSetMBufferAttributes (client)
REQUEST (xMbufSetMBufferAttributesReq); REQUEST (xMbufSetMBufferAttributesReq);
WindowPtr pWin; WindowPtr pWin;
MultibuffersPtr pMultibuffers; MultibuffersPtr pMultibuffers;
int len; int len, rc;
Mask vmask; Mask vmask;
Mask index2; Mask index2;
CARD32 updateHint; CARD32 updateHint;
XID *vlist; XID *vlist;
REQUEST_AT_LEAST_SIZE (xMbufSetMBufferAttributesReq); REQUEST_AT_LEAST_SIZE (xMbufSetMBufferAttributesReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType); pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
if (!pMultibuffers) if (!pMultibuffers)
return BadMatch; return BadMatch;
@ -655,12 +656,12 @@ ProcGetMBufferAttributes (client)
MultibuffersPtr pMultibuffers; MultibuffersPtr pMultibuffers;
XID *ids; XID *ids;
xMbufGetMBufferAttributesReply rep; xMbufGetMBufferAttributesReply rep;
int i, n; int i, n, rc;
REQUEST_SIZE_MATCH (xMbufGetMBufferAttributesReq); REQUEST_SIZE_MATCH (xMbufGetMBufferAttributesReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType); pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
if (!pMultibuffers) if (!pMultibuffers)
return BadAccess; return BadAccess;
@ -785,15 +786,15 @@ ProcGetBufferInfo (client)
DrawablePtr pDrawable; DrawablePtr pDrawable;
xMbufGetBufferInfoReply rep; xMbufGetBufferInfoReply rep;
ScreenPtr pScreen; ScreenPtr pScreen;
int i, j, k; int i, j, k, n, rc;
int n;
xMbufBufferInfo *pInfo; xMbufBufferInfo *pInfo;
int nInfo; int nInfo;
DepthPtr pDepth; DepthPtr pDepth;
pDrawable = (DrawablePtr) LookupDrawable (stuff->drawable, client); rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
if (!pDrawable) DixUnknownAccess);
return BadDrawable; if (rc != Success)
return rc;
pScreen = pDrawable->pScreen; pScreen = pDrawable->pScreen;
nInfo = 0; nInfo = 0;
for (i = 0; i < pScreen->numDepths; i++) for (i = 0; i < pScreen->numDepths; i++)

View File

@ -958,12 +958,13 @@ ProcPanoramiXGetState(ClientPtr client)
REQUEST(xPanoramiXGetStateReq); REQUEST(xPanoramiXGetStateReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetStateReply rep; xPanoramiXGetStateReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq); REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -984,12 +985,13 @@ ProcPanoramiXGetScreenCount(ClientPtr client)
REQUEST(xPanoramiXGetScreenCountReq); REQUEST(xPanoramiXGetScreenCountReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetScreenCountReply rep; xPanoramiXGetScreenCountReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -1009,12 +1011,13 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
REQUEST(xPanoramiXGetScreenSizeReq); REQUEST(xPanoramiXGetScreenSizeReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetScreenSizeReply rep; xPanoramiXGetScreenSizeReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;

View File

@ -91,7 +91,7 @@ int PanoramiXCreateWindow(ClientPtr client)
return BadLength; return BadLength;
if (!(parent = (PanoramiXRes *)SecurityLookupIDByType( if (!(parent = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess))) client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if(stuff->class == CopyFromParent) if(stuff->class == CopyFromParent)
@ -105,7 +105,7 @@ int PanoramiXCreateWindow(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pback_offset); tmp = *((CARD32 *) &stuff[1] + pback_offset);
if ((tmp != None) && (tmp != ParentRelative)) { if ((tmp != None) && (tmp != ParentRelative)) {
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -114,7 +114,7 @@ int PanoramiXCreateWindow(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pbord_offset); tmp = *((CARD32 *) &stuff[1] + pbord_offset);
if (tmp != CopyFromParent) { if (tmp != CopyFromParent) {
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -123,7 +123,7 @@ int PanoramiXCreateWindow(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + cmap_offset); tmp = *((CARD32 *) &stuff[1] + cmap_offset);
if ((tmp != CopyFromParent) && (tmp != None)) { if ((tmp != CopyFromParent) && (tmp != None)) {
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_COLORMAP, SecurityReadAccess))) client, tmp, XRT_COLORMAP, DixReadAccess)))
return BadColor; return BadColor;
} }
} }
@ -192,7 +192,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
return BadLength; return BadLength;
if (!(win = (PanoramiXRes *)SecurityLookupIDByType( if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityWriteAccess))) client, stuff->window, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if((win->u.win.class == InputOnly) && if((win->u.win.class == InputOnly) &&
@ -204,7 +204,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pback_offset); tmp = *((CARD32 *) &stuff[1] + pback_offset);
if ((tmp != None) && (tmp != ParentRelative)) { if ((tmp != None) && (tmp != ParentRelative)) {
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -213,7 +213,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pbord_offset); tmp = *((CARD32 *) &stuff[1] + pbord_offset);
if (tmp != CopyFromParent) { if (tmp != CopyFromParent) {
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -222,7 +222,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + cmap_offset); tmp = *((CARD32 *) &stuff[1] + cmap_offset);
if ((tmp != CopyFromParent) && (tmp != None)) { if ((tmp != CopyFromParent) && (tmp != None)) {
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_COLORMAP, SecurityReadAccess))) client, tmp, XRT_COLORMAP, DixReadAccess)))
return BadColor; return BadColor;
} }
} }
@ -251,7 +251,7 @@ int PanoramiXDestroyWindow(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess))) client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -276,7 +276,7 @@ int PanoramiXDestroySubwindows(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess))) client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -301,7 +301,7 @@ int PanoramiXChangeSaveSet(ClientPtr client)
REQUEST_SIZE_MATCH(xChangeSaveSetReq); REQUEST_SIZE_MATCH(xChangeSaveSetReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityReadAccess))) client, stuff->window, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -325,11 +325,11 @@ int PanoramiXReparentWindow(ClientPtr client)
REQUEST_SIZE_MATCH(xReparentWindowReq); REQUEST_SIZE_MATCH(xReparentWindowReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityWriteAccess))) client, stuff->window, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if(!(parent = (PanoramiXRes *)SecurityLookupIDByType( if(!(parent = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess))) client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
x = stuff->x; x = stuff->x;
@ -360,7 +360,7 @@ int PanoramiXMapWindow(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityReadAccess))) client, stuff->id, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
@ -382,7 +382,7 @@ int PanoramiXMapSubwindows(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityReadAccess))) client, stuff->id, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
@ -404,7 +404,7 @@ int PanoramiXUnmapWindow(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityReadAccess))) client, stuff->id, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
@ -426,7 +426,7 @@ int PanoramiXUnmapSubwindows(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_WINDOW, SecurityReadAccess))) client, stuff->id, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
@ -457,11 +457,11 @@ int PanoramiXConfigureWindow(ClientPtr client)
/* because we need the parent */ /* because we need the parent */
if (!(pWin = (WindowPtr)SecurityLookupIDByType( if (!(pWin = (WindowPtr)SecurityLookupIDByType(
client, stuff->window, RT_WINDOW, SecurityWriteAccess))) client, stuff->window, RT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if (!(win = (PanoramiXRes *)SecurityLookupIDByType( if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityWriteAccess))) client, stuff->window, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if ((Mask)stuff->mask & CWSibling) { if ((Mask)stuff->mask & CWSibling) {
@ -469,7 +469,7 @@ int PanoramiXConfigureWindow(ClientPtr client)
sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1)); sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1));
if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) {
if(!(sib = (PanoramiXRes*) SecurityLookupIDByType( if(!(sib = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_WINDOW, SecurityReadAccess))) client, tmp, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
} }
} }
@ -514,7 +514,7 @@ int PanoramiXCirculateWindow(ClientPtr client)
REQUEST_SIZE_MATCH(xCirculateWindowReq); REQUEST_SIZE_MATCH(xCirculateWindowReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityWriteAccess))) client, stuff->window, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS_FORWARD(j) { FOR_NSCREENS_FORWARD(j) {
@ -531,10 +531,14 @@ int PanoramiXGetGeometry(ClientPtr client)
{ {
xGetGeometryReply rep; xGetGeometryReply rep;
DrawablePtr pDraw; DrawablePtr pDraw;
int rc;
REQUEST(xResourceReq); REQUEST(xResourceReq);
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
VERIFY_GEOMETRABLE (pDraw, stuff->id, client); rc = dixLookupDrawable(&pDraw, stuff->id, client, M_ANY, DixUnknownAccess);
if (rc != Success)
return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -573,19 +577,17 @@ int PanoramiXTranslateCoords(ClientPtr client)
{ {
INT16 x, y; INT16 x, y;
REQUEST(xTranslateCoordsReq); REQUEST(xTranslateCoordsReq);
int rc;
register WindowPtr pWin, pDst; WindowPtr pWin, pDst;
xTranslateCoordsReply rep; xTranslateCoordsReply rep;
REQUEST_SIZE_MATCH(xTranslateCoordsReq); REQUEST_SIZE_MATCH(xTranslateCoordsReq);
pWin = (WindowPtr)SecurityLookupWindow(stuff->srcWid, client, rc = dixLookupWindow(&pWin, stuff->srcWid, client, DixReadAccess);
SecurityReadAccess); if (rc != Success)
if (!pWin) return rc;
return(BadWindow); rc = dixLookupWindow(&pDst, stuff->dstWid, client, DixReadAccess);
pDst = (WindowPtr)SecurityLookupWindow(stuff->dstWid, client, if (rc != Success)
SecurityReadAccess); return rc;
if (!pDst)
return(BadWindow);
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -655,7 +657,7 @@ int PanoramiXCreatePixmap(ClientPtr client)
client->errorValue = stuff->pid; client->errorValue = stuff->pid;
if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess))) client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
return BadDrawable; return BadDrawable;
if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
@ -694,7 +696,7 @@ int PanoramiXFreePixmap(ClientPtr client)
client->errorValue = stuff->id; client->errorValue = stuff->id;
if(!(pix = (PanoramiXRes *)SecurityLookupIDByType( if(!(pix = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_PIXMAP, SecurityDestroyAccess))) client, stuff->id, XRT_PIXMAP, DixDestroyAccess)))
return BadPixmap; return BadPixmap;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -730,14 +732,14 @@ int PanoramiXCreateGC(ClientPtr client)
return BadLength; return BadLength;
if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess))) client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
return BadDrawable; return BadDrawable;
if ((Mask)stuff->mask & GCTile) { if ((Mask)stuff->mask & GCTile) {
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -745,7 +747,7 @@ int PanoramiXCreateGC(ClientPtr client)
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -753,7 +755,7 @@ int PanoramiXCreateGC(ClientPtr client)
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -805,14 +807,14 @@ int PanoramiXChangeGC(ClientPtr client)
return BadLength; return BadLength;
if (!(gc = (PanoramiXRes *)SecurityLookupIDByType( if (!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if ((Mask)stuff->mask & GCTile) { if ((Mask)stuff->mask & GCTile) {
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -820,7 +822,7 @@ int PanoramiXChangeGC(ClientPtr client)
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -828,7 +830,7 @@ int PanoramiXChangeGC(ClientPtr client)
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -859,11 +861,11 @@ int PanoramiXCopyGC(ClientPtr client)
REQUEST_SIZE_MATCH(xCopyGCReq); REQUEST_SIZE_MATCH(xCopyGCReq);
if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType( if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->srcGC, XRT_GC, SecurityReadAccess))) client, stuff->srcGC, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType( if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->dstGC, XRT_GC, SecurityWriteAccess))) client, stuff->dstGC, XRT_GC, DixWriteAccess)))
return BadGC; return BadGC;
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
@ -886,7 +888,7 @@ int PanoramiXSetDashes(ClientPtr client)
REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes); REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityWriteAccess))) client, stuff->gc, XRT_GC, DixWriteAccess)))
return BadGC; return BadGC;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -908,7 +910,7 @@ int PanoramiXSetClipRectangles(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq); REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityWriteAccess))) client, stuff->gc, XRT_GC, DixWriteAccess)))
return BadGC; return BadGC;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -930,7 +932,7 @@ int PanoramiXFreeGC(ClientPtr client)
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_GC, SecurityDestroyAccess))) client, stuff->id, XRT_GC, DixDestroyAccess)))
return BadGC; return BadGC;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -956,7 +958,7 @@ int PanoramiXClearToBackground(ClientPtr client)
REQUEST_SIZE_MATCH(xClearAreaReq); REQUEST_SIZE_MATCH(xClearAreaReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityWriteAccess))) client, stuff->window, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
x = stuff->x; x = stuff->x;
@ -998,13 +1000,13 @@ int PanoramiXCopyArea(ClientPtr client)
REQUEST_SIZE_MATCH(xCopyAreaReq); REQUEST_SIZE_MATCH(xCopyAreaReq);
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess))) client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
return BadDrawable; return BadDrawable;
srcShared = IS_SHARED_PIXMAP(src); srcShared = IS_SHARED_PIXMAP(src);
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
dstShared = IS_SHARED_PIXMAP(dst); dstShared = IS_SHARED_PIXMAP(dst);
@ -1013,7 +1015,7 @@ int PanoramiXCopyArea(ClientPtr client)
return (* SavedProcVector[X_CopyArea])(client); return (* SavedProcVector[X_CopyArea])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if((dst->type == XRT_WINDOW) && dst->u.win.root) if((dst->type == XRT_WINDOW) && dst->u.win.root)
@ -1028,10 +1030,14 @@ int PanoramiXCopyArea(ClientPtr client)
DrawablePtr pDst; DrawablePtr pDst;
GCPtr pGC; GCPtr pGC;
char *data; char *data;
int pitch; int pitch, rc;
FOR_NSCREENS(j) FOR_NSCREENS(j) {
VERIFY_DRAWABLE(drawables[j], src->info[j].id, client); rc = dixLookupDrawable(drawables+j, src->info[j].id, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
}
pitch = PixmapBytePad(stuff->width, drawables[0]->depth); pitch = PixmapBytePad(stuff->width, drawables[0]->depth);
if(!(data = xcalloc(1, stuff->height * pitch))) if(!(data = xcalloc(1, stuff->height * pitch)))
@ -1065,6 +1071,7 @@ int PanoramiXCopyArea(ClientPtr client)
DrawablePtr pDst = NULL, pSrc = NULL; DrawablePtr pDst = NULL, pSrc = NULL;
GCPtr pGC = NULL; GCPtr pGC = NULL;
RegionPtr pRgn[MAXSCREENS]; RegionPtr pRgn[MAXSCREENS];
int rc;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
stuff->dstDrawable = dst->info[j].id; stuff->dstDrawable = dst->info[j].id;
@ -1081,8 +1088,11 @@ int PanoramiXCopyArea(ClientPtr client)
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client); VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
if (stuff->dstDrawable != stuff->srcDrawable) { if (stuff->dstDrawable != stuff->srcDrawable) {
SECURITY_VERIFY_DRAWABLE(pSrc, stuff->srcDrawable, client, rc = dixLookupDrawable(&pSrc, stuff->srcDrawable, client, 0,
SecurityReadAccess); DixReadAccess);
if (rc != Success)
return rc;
if ((pDst->pScreen != pSrc->pScreen) || if ((pDst->pScreen != pSrc->pScreen) ||
(pDst->depth != pSrc->depth)) { (pDst->depth != pSrc->depth)) {
client->errorValue = stuff->dstDrawable; client->errorValue = stuff->dstDrawable;
@ -1133,7 +1143,7 @@ int PanoramiXCopyArea(ClientPtr client)
int PanoramiXCopyPlane(ClientPtr client) int PanoramiXCopyPlane(ClientPtr client)
{ {
int j, srcx, srcy, dstx, dsty; int j, srcx, srcy, dstx, dsty, rc;
PanoramiXRes *gc, *src, *dst; PanoramiXRes *gc, *src, *dst;
Bool srcIsRoot = FALSE; Bool srcIsRoot = FALSE;
Bool dstIsRoot = FALSE; Bool dstIsRoot = FALSE;
@ -1146,13 +1156,13 @@ int PanoramiXCopyPlane(ClientPtr client)
REQUEST_SIZE_MATCH(xCopyPlaneReq); REQUEST_SIZE_MATCH(xCopyPlaneReq);
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess))) client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
return BadDrawable; return BadDrawable;
srcShared = IS_SHARED_PIXMAP(src); srcShared = IS_SHARED_PIXMAP(src);
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
dstShared = IS_SHARED_PIXMAP(dst); dstShared = IS_SHARED_PIXMAP(dst);
@ -1161,7 +1171,7 @@ int PanoramiXCopyPlane(ClientPtr client)
return (* SavedProcVector[X_CopyPlane])(client); return (* SavedProcVector[X_CopyPlane])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if((dst->type == XRT_WINDOW) && dst->u.win.root) if((dst->type == XRT_WINDOW) && dst->u.win.root)
@ -1187,8 +1197,11 @@ int PanoramiXCopyPlane(ClientPtr client)
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client); VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client);
if (stuff->dstDrawable != stuff->srcDrawable) { if (stuff->dstDrawable != stuff->srcDrawable) {
SECURITY_VERIFY_DRAWABLE(psrcDraw, stuff->srcDrawable, client, rc = dixLookupDrawable(&psrcDraw, stuff->srcDrawable, client, 0,
SecurityReadAccess); DixReadAccess);
if (rc != Success)
return rc;
if (pdstDraw->pScreen != psrcDraw->pScreen) { if (pdstDraw->pScreen != psrcDraw->pScreen) {
client->errorValue = stuff->dstDrawable; client->errorValue = stuff->dstDrawable;
return (BadMatch); return (BadMatch);
@ -1246,14 +1259,14 @@ int PanoramiXPolyPoint(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyPointReq); REQUEST_AT_LEAST_SIZE(xPolyPointReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyPoint])(client); return (*SavedProcVector[X_PolyPoint])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1304,14 +1317,14 @@ int PanoramiXPolyLine(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyLineReq); REQUEST_AT_LEAST_SIZE(xPolyLineReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyLine])(client); return (*SavedProcVector[X_PolyLine])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1362,14 +1375,14 @@ int PanoramiXPolySegment(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolySegmentReq); REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolySegment])(client); return (*SavedProcVector[X_PolySegment])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1424,14 +1437,14 @@ int PanoramiXPolyRectangle(ClientPtr client)
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyRectangle])(client); return (*SavedProcVector[X_PolyRectangle])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1484,14 +1497,14 @@ int PanoramiXPolyArc(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyArcReq); REQUEST_AT_LEAST_SIZE(xPolyArcReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyArc])(client); return (*SavedProcVector[X_PolyArc])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1542,14 +1555,14 @@ int PanoramiXFillPoly(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xFillPolyReq); REQUEST_AT_LEAST_SIZE(xFillPolyReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_FillPoly])(client); return (*SavedProcVector[X_FillPoly])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1601,14 +1614,14 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq); REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyFillRectangle])(client); return (*SavedProcVector[X_PolyFillRectangle])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1660,14 +1673,14 @@ int PanoramiXPolyFillArc(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyFillArcReq); REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyFillArc])(client); return (*SavedProcVector[X_PolyFillArc])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1718,14 +1731,14 @@ int PanoramiXPutImage(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPutImageReq); REQUEST_AT_LEAST_SIZE(xPutImageReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PutImage])(client); return (*SavedProcVector[X_PutImage])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1754,7 +1767,7 @@ int PanoramiXGetImage(ClientPtr client)
xGetImageReply xgi; xGetImageReply xgi;
Bool isRoot; Bool isRoot;
char *pBuf; char *pBuf;
int i, x, y, w, h, format; int i, x, y, w, h, format, rc;
Mask plane = 0, planemask; Mask plane = 0, planemask;
int linesDone, nlines, linesPerBuf; int linesDone, nlines, linesPerBuf;
long widthBytesLine, length; long widthBytesLine, length;
@ -1769,13 +1782,16 @@ int PanoramiXGetImage(ClientPtr client)
} }
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(draw->type == XRT_PIXMAP) if(draw->type == XRT_PIXMAP)
return (*SavedProcVector[X_GetImage])(client); return (*SavedProcVector[X_GetImage])(client);
VERIFY_DRAWABLE(pDraw, stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
if(!((WindowPtr)pDraw)->realized) if(!((WindowPtr)pDraw)->realized)
return(BadMatch); return(BadMatch);
@ -1809,8 +1825,12 @@ int PanoramiXGetImage(ClientPtr client)
} }
drawables[0] = pDraw; drawables[0] = pDraw;
for(i = 1; i < PanoramiXNumScreens; i++) for(i = 1; i < PanoramiXNumScreens; i++) {
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client); rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
}
xgi.visual = wVisual (((WindowPtr) pDraw)); xgi.visual = wVisual (((WindowPtr) pDraw));
xgi.type = X_Reply; xgi.type = X_Reply;
@ -1909,14 +1929,14 @@ PanoramiXPolyText8(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyText8])(client); return (*SavedProcVector[X_PolyText8])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1948,14 +1968,14 @@ PanoramiXPolyText16(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_PolyText16])(client); return (*SavedProcVector[X_PolyText16])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1987,14 +2007,14 @@ int PanoramiXImageText8(ClientPtr client)
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars); REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_ImageText8])(client); return (*SavedProcVector[X_ImageText8])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -2026,14 +2046,14 @@ int PanoramiXImageText16(ClientPtr client)
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1); REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(IS_SHARED_PIXMAP(draw)) if(IS_SHARED_PIXMAP(draw))
return (*SavedProcVector[X_ImageText16])(client); return (*SavedProcVector[X_ImageText16])(client);
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -2064,7 +2084,7 @@ int PanoramiXCreateColormap(ClientPtr client)
REQUEST_SIZE_MATCH(xCreateColormapReq); REQUEST_SIZE_MATCH(xCreateColormapReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->window, XRT_WINDOW, SecurityReadAccess))) client, stuff->window, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
if(!stuff->visual || (stuff->visual > 255)) if(!stuff->visual || (stuff->visual > 255))
@ -2107,7 +2127,7 @@ int PanoramiXFreeColormap(ClientPtr client)
client->errorValue = stuff->id; client->errorValue = stuff->id;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_COLORMAP, SecurityDestroyAccess))) client, stuff->id, XRT_COLORMAP, DixDestroyAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -2136,7 +2156,7 @@ PanoramiXCopyColormapAndFree(ClientPtr client)
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->srcCmap, XRT_COLORMAP, client, stuff->srcCmap, XRT_COLORMAP,
SecurityReadAccess | SecurityWriteAccess))) DixReadAccess | DixWriteAccess)))
return BadColor; return BadColor;
if(!(newCmap = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) if(!(newCmap = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
@ -2174,7 +2194,7 @@ int PanoramiXInstallColormap(ClientPtr client)
client->errorValue = stuff->id; client->errorValue = stuff->id;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_COLORMAP, SecurityReadAccess))) client, stuff->id, XRT_COLORMAP, DixReadAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2197,7 +2217,7 @@ int PanoramiXUninstallColormap(ClientPtr client)
client->errorValue = stuff->id; client->errorValue = stuff->id;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->id, XRT_COLORMAP, SecurityReadAccess))) client, stuff->id, XRT_COLORMAP, DixReadAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -2220,7 +2240,7 @@ int PanoramiXAllocColor(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2243,7 +2263,7 @@ int PanoramiXAllocNamedColor(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2266,7 +2286,7 @@ int PanoramiXAllocColorCells(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2289,7 +2309,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2313,7 +2333,7 @@ int PanoramiXFreeColors(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j) { FOR_NSCREENS_BACKWARD(j) {
@ -2335,7 +2355,7 @@ int PanoramiXStoreColors(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){
@ -2358,7 +2378,7 @@ int PanoramiXStoreNamedColor(ClientPtr client)
client->errorValue = stuff->cmap; client->errorValue = stuff->cmap;
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess))) client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
return BadColor; return BadColor;
FOR_NSCREENS_BACKWARD(j){ FOR_NSCREENS_BACKWARD(j){

View File

@ -780,16 +780,17 @@ ProcScreenSaverQueryInfo (client)
{ {
REQUEST(xScreenSaverQueryInfoReq); REQUEST(xScreenSaverQueryInfoReq);
xScreenSaverQueryInfoReply rep; xScreenSaverQueryInfoReply rep;
register int n; register int n, rc;
ScreenSaverStuffPtr pSaver; ScreenSaverStuffPtr pSaver;
DrawablePtr pDraw; DrawablePtr pDraw;
CARD32 lastInput; CARD32 lastInput;
ScreenSaverScreenPrivatePtr pPriv; ScreenSaverScreenPrivatePtr pPriv;
REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq); REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq);
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
if (!pDraw) DixUnknownAccess);
return BadDrawable; if (rc != Success)
return rc;
pSaver = &savedScreenInfo[pDraw->pScreen->myNum]; pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
pPriv = GetScreenPrivate (pDraw->pScreen); pPriv = GetScreenPrivate (pDraw->pScreen);
@ -852,11 +853,13 @@ ProcScreenSaverSelectInput (client)
{ {
REQUEST(xScreenSaverSelectInputReq); REQUEST(xScreenSaverSelectInputReq);
DrawablePtr pDraw; DrawablePtr pDraw;
int rc;
REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq); REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq);
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client); rc = dixLookupDrawable (&pDraw, stuff->drawable, client, 0,
if (!pDraw) DixUnknownAccess);
return BadDrawable; if (rc != Success)
return rc;
if (!setEventMask (pDraw->pScreen, client, stuff->eventMask)) if (!setEventMask (pDraw->pScreen, client, stuff->eventMask))
return BadAlloc; return BadAlloc;
return Success; return Success;
@ -871,9 +874,7 @@ ScreenSaverSetAttributes (ClientPtr client)
ScreenPtr pScreen; ScreenPtr pScreen;
ScreenSaverScreenPrivatePtr pPriv = 0; ScreenSaverScreenPrivatePtr pPriv = 0;
ScreenSaverAttrPtr pAttr = 0; ScreenSaverAttrPtr pAttr = 0;
int ret; int ret, len, class, bw, depth;
int len;
int class, bw, depth;
unsigned long visual; unsigned long visual;
int idepth, ivisual; int idepth, ivisual;
Bool fOK; Bool fOK;
@ -891,9 +892,10 @@ ScreenSaverSetAttributes (ClientPtr client)
ColormapPtr pCmap; ColormapPtr pCmap;
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq); REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client); ret = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
if (!pDraw) DixUnknownAccess);
return BadDrawable; if (ret != Success)
return ret;
pScreen = pDraw->pScreen; pScreen = pDraw->pScreen;
pParent = WindowTable[pScreen->myNum]; pParent = WindowTable[pScreen->myNum];
@ -1246,11 +1248,13 @@ ScreenSaverUnsetAttributes (ClientPtr client)
REQUEST(xScreenSaverSetAttributesReq); REQUEST(xScreenSaverSetAttributesReq);
DrawablePtr pDraw; DrawablePtr pDraw;
ScreenSaverScreenPrivatePtr pPriv; ScreenSaverScreenPrivatePtr pPriv;
int rc;
REQUEST_SIZE_MATCH (xScreenSaverUnsetAttributesReq); REQUEST_SIZE_MATCH (xScreenSaverUnsetAttributesReq);
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
if (!pDraw) DixUnknownAccess);
return BadDrawable; if (rc != Success)
return rc;
pPriv = GetScreenPrivate (pDraw->pScreen); pPriv = GetScreenPrivate (pDraw->pScreen);
if (pPriv && pPriv->attr && pPriv->attr->client == client) if (pPriv && pPriv->attr && pPriv->attr->client == client)
{ {
@ -1279,7 +1283,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq); REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2); len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2);
@ -1291,7 +1295,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pback_offset); tmp = *((CARD32 *) &stuff[1] + pback_offset);
if ((tmp != None) && (tmp != ParentRelative)) { if ((tmp != None) && (tmp != ParentRelative)) {
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -1301,7 +1305,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + pbord_offset); tmp = *((CARD32 *) &stuff[1] + pbord_offset);
if (tmp != CopyFromParent) { if (tmp != CopyFromParent) {
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_PIXMAP, SecurityReadAccess))) client, tmp, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} }
} }
@ -1311,7 +1315,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
tmp = *((CARD32 *) &stuff[1] + cmap_offset); tmp = *((CARD32 *) &stuff[1] + cmap_offset);
if ((tmp != CopyFromParent) && (tmp != None)) { if ((tmp != CopyFromParent) && (tmp != None)) {
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
client, tmp, XRT_COLORMAP, SecurityReadAccess))) client, tmp, XRT_COLORMAP, DixReadAccess)))
return BadColor; return BadColor;
} }
} }
@ -1351,7 +1355,7 @@ ProcScreenSaverUnsetAttributes (ClientPtr client)
int i; int i;
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
for(i = PanoramiXNumScreens - 1; i > 0; i--) { for(i = PanoramiXNumScreens - 1; i > 0; i--) {

View File

@ -600,7 +600,7 @@ ProcSecurityRevokeAuthorization(
REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq); REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client, pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client,
stuff->authId, SecurityAuthorizationResType, SecurityDestroyAccess); stuff->authId, SecurityAuthorizationResType, DixDestroyAccess);
if (!pAuth) if (!pAuth)
return SecurityErrorBase + XSecurityBadAuthorization; return SecurityErrorBase + XSecurityBadAuthorization;
@ -966,7 +966,7 @@ CALLBACK(SecurityCheckResourceIDAccess)
int cid, reqtype; int cid, reqtype;
if (TRUSTLEVEL(client) == XSecurityClientTrusted || if (TRUSTLEVEL(client) == XSecurityClientTrusted ||
SecurityUnknownAccess == access_mode) DixUnknownAccess == access_mode)
return; /* for compatibility, we have to allow access */ return; /* for compatibility, we have to allow access */
cid = CLIENT_ID(id); cid = CLIENT_ID(id);
@ -1217,7 +1217,7 @@ CALLBACK(SecurityCheckHostlistAccess)
if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted) if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
{ {
rec->rval = FALSE; rec->rval = FALSE;
if (rec->access_mode == SecurityWriteAccess) if (rec->access_mode == DixWriteAccess)
SecurityAudit("client %d attempted to change host access\n", SecurityAudit("client %d attempted to change host access\n",
rec->client->index); rec->client->index);
else else
@ -1251,7 +1251,7 @@ typedef struct _PropertyAccessRec {
} PropertyAccessRec, *PropertyAccessPtr; } PropertyAccessRec, *PropertyAccessPtr;
static PropertyAccessPtr PropertyAccessList = NULL; static PropertyAccessPtr PropertyAccessList = NULL;
static char SecurityDefaultAction = SecurityErrorOperation; static char SecurityDefaultAction = XaceErrorOperation;
static char *SecurityPolicyFile = DEFAULTPOLICYFILE; static char *SecurityPolicyFile = DEFAULTPOLICYFILE;
static ATOM SecurityMaxPropertyName = 0; static ATOM SecurityMaxPropertyName = 0;
@ -1410,9 +1410,9 @@ SecurityParsePropertyAccessRule(
{ {
switch (c) switch (c)
{ {
case 'i': action = SecurityIgnoreOperation; break; case 'i': action = XaceIgnoreOperation; break;
case 'a': action = SecurityAllowOperation; break; case 'a': action = XaceAllowOperation; break;
case 'e': action = SecurityErrorOperation; break; case 'e': action = XaceErrorOperation; break;
case 'r': readAction = action; break; case 'r': readAction = action; break;
case 'w': writeAction = action; break; case 'w': writeAction = action; break;
@ -1797,22 +1797,22 @@ CALLBACK(SecurityCheckPropertyAccess)
* If pacl doesn't apply, something above should have * If pacl doesn't apply, something above should have
* executed a continue, which will skip the follwing code. * executed a continue, which will skip the follwing code.
*/ */
action = SecurityAllowOperation; action = XaceAllowOperation;
if (access_mode & SecurityReadAccess) if (access_mode & DixReadAccess)
action = max(action, pacl->readAction); action = max(action, pacl->readAction);
if (access_mode & SecurityWriteAccess) if (access_mode & DixWriteAccess)
action = max(action, pacl->writeAction); action = max(action, pacl->writeAction);
if (access_mode & SecurityDestroyAccess) if (access_mode & DixDestroyAccess)
action = max(action, pacl->destroyAction); action = max(action, pacl->destroyAction);
break; break;
} /* end for each pacl */ } /* end for each pacl */
} /* end if propertyName <= SecurityMaxPropertyName */ } /* end if propertyName <= SecurityMaxPropertyName */
if (SecurityAllowOperation != action) if (XaceAllowOperation != action)
{ /* audit the access violation */ { /* audit the access violation */
int cid = CLIENT_ID(pWin->drawable.id); int cid = CLIENT_ID(pWin->drawable.id);
int reqtype = ((xReq *)client->requestBuffer)->reqType; int reqtype = ((xReq *)client->requestBuffer)->reqType;
char *actionstr = (SecurityIgnoreOperation == action) ? char *actionstr = (XaceIgnoreOperation == action) ?
"ignored" : "error"; "ignored" : "error";
SecurityAudit("client %d attempted request %d with window 0x%x property %s (atom 0x%x) of client %d, %s\n", 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, client->index, reqtype, pWin->drawable.id,

View File

@ -316,16 +316,16 @@ ProcShapeRectangles (client)
ScreenPtr pScreen; ScreenPtr pScreen;
REQUEST(xShapeRectanglesReq); REQUEST(xShapeRectanglesReq);
xRectangle *prects; xRectangle *prects;
int nrects, ctype; int nrects, ctype, rc;
RegionPtr srcRgn; RegionPtr srcRgn;
RegionPtr *destRgn; RegionPtr *destRgn;
CreateDftPtr createDefault; CreateDftPtr createDefault;
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq); REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
UpdateCurrentTime(); UpdateCurrentTime();
pWin = LookupWindow (stuff->dest, client); rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
switch (stuff->destKind) { switch (stuff->destKind) {
case ShapeBounding: case ShapeBounding:
createDefault = CreateBoundingShape; createDefault = CreateBoundingShape;
@ -390,7 +390,7 @@ ProcPanoramiXShapeRectangles(
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq); REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess))) client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
@ -419,12 +419,13 @@ ProcShapeMask (client)
RegionPtr *destRgn; RegionPtr *destRgn;
PixmapPtr pPixmap; PixmapPtr pPixmap;
CreateDftPtr createDefault; CreateDftPtr createDefault;
int rc;
REQUEST_SIZE_MATCH (xShapeMaskReq); REQUEST_SIZE_MATCH (xShapeMaskReq);
UpdateCurrentTime(); UpdateCurrentTime();
pWin = SecurityLookupWindow (stuff->dest, client, SecurityWriteAccess); rc = dixLookupWindow(&pWin, stuff->dest, client, DixWriteAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
switch (stuff->destKind) { switch (stuff->destKind) {
case ShapeBounding: case ShapeBounding:
createDefault = CreateBoundingShape; createDefault = CreateBoundingShape;
@ -444,7 +445,7 @@ ProcShapeMask (client)
srcRgn = 0; srcRgn = 0;
else { else {
pPixmap = (PixmapPtr) SecurityLookupIDByType(client, stuff->src, pPixmap = (PixmapPtr) SecurityLookupIDByType(client, stuff->src,
RT_PIXMAP, SecurityReadAccess); RT_PIXMAP, DixReadAccess);
if (!pPixmap) if (!pPixmap)
return BadPixmap; return BadPixmap;
if (pPixmap->drawable.pScreen != pScreen || if (pPixmap->drawable.pScreen != pScreen ||
@ -488,12 +489,12 @@ ProcPanoramiXShapeMask(
REQUEST_SIZE_MATCH (xShapeMaskReq); REQUEST_SIZE_MATCH (xShapeMaskReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess))) client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if(stuff->src != None) { if(stuff->src != None) {
if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType( if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->src, XRT_PIXMAP, SecurityReadAccess))) client, stuff->src, XRT_PIXMAP, DixReadAccess)))
return BadPixmap; return BadPixmap;
} else } else
pmap = NULL; pmap = NULL;
@ -526,12 +527,13 @@ ProcShapeCombine (client)
CreateDftPtr createDefault; CreateDftPtr createDefault;
CreateDftPtr createSrc; CreateDftPtr createSrc;
RegionPtr tmp; RegionPtr tmp;
int rc;
REQUEST_SIZE_MATCH (xShapeCombineReq); REQUEST_SIZE_MATCH (xShapeCombineReq);
UpdateCurrentTime(); UpdateCurrentTime();
pDestWin = LookupWindow (stuff->dest, client); rc = dixLookupWindow(&pDestWin, stuff->dest, client, DixUnknownAccess);
if (!pDestWin) if (rc != Success)
return BadWindow; return rc;
if (!pDestWin->optional) if (!pDestWin->optional)
MakeWindowOptional (pDestWin); MakeWindowOptional (pDestWin);
switch (stuff->destKind) { switch (stuff->destKind) {
@ -550,9 +552,9 @@ ProcShapeCombine (client)
} }
pScreen = pDestWin->drawable.pScreen; pScreen = pDestWin->drawable.pScreen;
pSrcWin = LookupWindow (stuff->src, client); rc = dixLookupWindow(&pSrcWin, stuff->src, client, DixUnknownAccess);
if (!pSrcWin) if (rc != Success)
return BadWindow; return rc;
switch (stuff->srcKind) { switch (stuff->srcKind) {
case ShapeBounding: case ShapeBounding:
srcRgn = wBoundingShape (pSrcWin); srcRgn = wBoundingShape (pSrcWin);
@ -616,11 +618,11 @@ ProcPanoramiXShapeCombine(
REQUEST_AT_LEAST_SIZE (xShapeCombineReq); REQUEST_AT_LEAST_SIZE (xShapeCombineReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess))) client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType( if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->src, XRT_WINDOW, SecurityReadAccess))) client, stuff->src, XRT_WINDOW, DixReadAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
@ -645,12 +647,13 @@ ProcShapeOffset (client)
ScreenPtr pScreen; ScreenPtr pScreen;
REQUEST(xShapeOffsetReq); REQUEST(xShapeOffsetReq);
RegionPtr srcRgn; RegionPtr srcRgn;
int rc;
REQUEST_SIZE_MATCH (xShapeOffsetReq); REQUEST_SIZE_MATCH (xShapeOffsetReq);
UpdateCurrentTime(); UpdateCurrentTime();
pWin = LookupWindow (stuff->dest, client); rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
switch (stuff->destKind) { switch (stuff->destKind) {
case ShapeBounding: case ShapeBounding:
srcRgn = wBoundingShape (pWin); srcRgn = wBoundingShape (pWin);
@ -688,7 +691,7 @@ ProcPanoramiXShapeOffset(
REQUEST_AT_LEAST_SIZE (xShapeOffsetReq); REQUEST_AT_LEAST_SIZE (xShapeOffsetReq);
if(!(win = (PanoramiXRes *)SecurityLookupIDByType( if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess))) client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
return BadWindow; return BadWindow;
FOR_NSCREENS(j) { FOR_NSCREENS(j) {
@ -709,13 +712,13 @@ ProcShapeQueryExtents (client)
WindowPtr pWin; WindowPtr pWin;
xShapeQueryExtentsReply rep; xShapeQueryExtentsReply rep;
BoxRec extents, *pExtents; BoxRec extents, *pExtents;
register int n; register int n, rc;
RegionPtr region; RegionPtr region;
REQUEST_SIZE_MATCH (xShapeQueryExtentsReq); REQUEST_SIZE_MATCH (xShapeQueryExtentsReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -820,13 +823,14 @@ ProcShapeSelectInput (client)
WindowPtr pWin; WindowPtr pWin;
ShapeEventPtr pShapeEvent, pNewShapeEvent, *pHead; ShapeEventPtr pShapeEvent, pNewShapeEvent, *pHead;
XID clientResource; XID clientResource;
int rc;
REQUEST_SIZE_MATCH (xShapeSelectInputReq); REQUEST_SIZE_MATCH (xShapeSelectInputReq);
pWin = SecurityLookupWindow (stuff->window, client, SecurityWriteAccess); rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
pHead = (ShapeEventPtr *)SecurityLookupIDByType(client, pHead = (ShapeEventPtr *)SecurityLookupIDByType(client,
pWin->drawable.id, EventType, SecurityWriteAccess); pWin->drawable.id, EventType, DixWriteAccess);
switch (stuff->enable) { switch (stuff->enable) {
case xTrue: case xTrue:
if (pHead) { if (pHead) {
@ -990,16 +994,16 @@ ProcShapeInputSelected (client)
REQUEST(xShapeInputSelectedReq); REQUEST(xShapeInputSelectedReq);
WindowPtr pWin; WindowPtr pWin;
ShapeEventPtr pShapeEvent, *pHead; ShapeEventPtr pShapeEvent, *pHead;
int enabled; int enabled, rc;
xShapeInputSelectedReply rep; xShapeInputSelectedReply rep;
register int n; register int n;
REQUEST_SIZE_MATCH (xShapeInputSelectedReq); REQUEST_SIZE_MATCH (xShapeInputSelectedReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
pHead = (ShapeEventPtr *) SecurityLookupIDByType(client, pHead = (ShapeEventPtr *) SecurityLookupIDByType(client,
pWin->drawable.id, EventType, SecurityReadAccess); pWin->drawable.id, EventType, DixReadAccess);
enabled = xFalse; enabled = xFalse;
if (pHead) { if (pHead) {
for (pShapeEvent = *pHead; for (pShapeEvent = *pHead;
@ -1032,14 +1036,14 @@ ProcShapeGetRectangles (client)
WindowPtr pWin; WindowPtr pWin;
xShapeGetRectanglesReply rep; xShapeGetRectanglesReply rep;
xRectangle *rects; xRectangle *rects;
int nrects, i; int nrects, i, rc;
RegionPtr region; RegionPtr region;
register int n; register int n;
REQUEST_SIZE_MATCH(xShapeGetRectanglesReq); REQUEST_SIZE_MATCH(xShapeGetRectanglesReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
switch (stuff->kind) { switch (stuff->kind) {
case ShapeBounding: case ShapeBounding:
region = wBoundingShape(pWin); region = wBoundingShape(pWin);

View File

@ -571,11 +571,11 @@ ProcPanoramiXShmPutImage(register ClientPtr client)
REQUEST_SIZE_MATCH(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -606,7 +606,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
DrawablePtr pDraw; DrawablePtr pDraw;
xShmGetImageReply xgi; xShmGetImageReply xgi;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
int i, x, y, w, h, format; int i, x, y, w, h, format, rc;
Mask plane = 0, planemask; Mask plane = 0, planemask;
long lenPer = 0, length, widthBytesLine; long lenPer = 0, length, widthBytesLine;
Bool isRoot; Bool isRoot;
@ -621,13 +621,16 @@ ProcPanoramiXShmGetImage(ClientPtr client)
} }
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if (draw->type == XRT_PIXMAP) if (draw->type == XRT_PIXMAP)
return ProcShmGetImage(client); return ProcShmGetImage(client);
VERIFY_DRAWABLE(pDraw, stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
@ -660,8 +663,12 @@ ProcPanoramiXShmGetImage(ClientPtr client)
} }
drawables[0] = pDraw; drawables[0] = pDraw;
for(i = 1; i < PanoramiXNumScreens; i++) for(i = 1; i < PanoramiXNumScreens; i++) {
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client); rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
}
xgi.visual = wVisual(((WindowPtr)pDraw)); xgi.visual = wVisual(((WindowPtr)pDraw));
xgi.type = X_Reply; xgi.type = X_Reply;
@ -720,7 +727,7 @@ ProcPanoramiXShmCreatePixmap(
PixmapPtr pMap = NULL; PixmapPtr pMap = NULL;
DrawablePtr pDraw; DrawablePtr pDraw;
DepthPtr pDepth; DepthPtr pDepth;
int i, j, result; int i, j, result, rc;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmCreatePixmapReq); REQUEST(xShmCreatePixmapReq);
PanoramiXRes *newPix; PanoramiXRes *newPix;
@ -730,7 +737,11 @@ ProcPanoramiXShmCreatePixmap(
if (!sharedPixmaps) if (!sharedPixmaps)
return BadImplementation; return BadImplementation;
LEGAL_NEW_RESOURCE(stuff->pid, client); LEGAL_NEW_RESOURCE(stuff->pid, client);
VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
DixUnknownAccess);
if (rc != Success)
return rc;
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
if (!stuff->width || !stuff->height) if (!stuff->width || !stuff->height)
{ {
@ -805,8 +816,8 @@ static int
ProcShmPutImage(client) ProcShmPutImage(client)
register ClientPtr client; register ClientPtr client;
{ {
register GCPtr pGC; GCPtr pGC;
register DrawablePtr pDraw; DrawablePtr pDraw;
long length; long length;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmPutImageReq); REQUEST(xShmPutImageReq);
@ -909,12 +920,12 @@ static int
ProcShmGetImage(client) ProcShmGetImage(client)
register ClientPtr client; register ClientPtr client;
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
long lenPer = 0, length; long lenPer = 0, length;
Mask plane = 0; Mask plane = 0;
xShmGetImageReply xgi; xShmGetImageReply xgi;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
int n; int n, rc;
REQUEST(xShmGetImageReq); REQUEST(xShmGetImageReq);
@ -924,7 +935,10 @@ ProcShmGetImage(client)
client->errorValue = stuff->format; client->errorValue = stuff->format;
return(BadValue); return(BadValue);
} }
VERIFY_DRAWABLE(pDraw, stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
DixUnknownAccess);
if (rc != Success)
return rc;
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
if (pDraw->type == DRAWABLE_WINDOW) if (pDraw->type == DRAWABLE_WINDOW)
{ {
@ -1042,9 +1056,9 @@ ProcShmCreatePixmap(client)
register ClientPtr client; register ClientPtr client;
{ {
PixmapPtr pMap; PixmapPtr pMap;
register DrawablePtr pDraw; DrawablePtr pDraw;
DepthPtr pDepth; DepthPtr pDepth;
register int i; register int i, rc;
ShmDescPtr shmdesc; ShmDescPtr shmdesc;
REQUEST(xShmCreatePixmapReq); REQUEST(xShmCreatePixmapReq);
@ -1053,7 +1067,11 @@ ProcShmCreatePixmap(client)
if (!sharedPixmaps) if (!sharedPixmaps)
return BadImplementation; return BadImplementation;
LEGAL_NEW_RESOURCE(stuff->pid, client); LEGAL_NEW_RESOURCE(stuff->pid, client);
VERIFY_GEOMETRABLE(pDraw, stuff->drawable, client); rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
DixUnknownAccess);
if (rc != Success)
return rc;
VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client);
if (!stuff->width || !stuff->height) if (!stuff->width || !stuff->height)
{ {

View File

@ -436,7 +436,7 @@ SyncInitTrigger(client, pTrigger, counter, changes)
if (counter == None) if (counter == None)
pCounter = NULL; pCounter = NULL;
else if (!(pCounter = (SyncCounter *)SecurityLookupIDByType( else if (!(pCounter = (SyncCounter *)SecurityLookupIDByType(
client, counter, RTCounter, SecurityReadAccess))) client, counter, RTCounter, DixReadAccess)))
{ {
client->errorValue = counter; client->errorValue = counter;
return SyncErrorBase + XSyncBadCounter; return SyncErrorBase + XSyncBadCounter;
@ -1452,15 +1452,17 @@ ProcSyncSetPriority(client)
{ {
REQUEST(xSyncSetPriorityReq); REQUEST(xSyncSetPriorityReq);
ClientPtr priorityclient; ClientPtr priorityclient;
int rc;
REQUEST_SIZE_MATCH(xSyncSetPriorityReq); REQUEST_SIZE_MATCH(xSyncSetPriorityReq);
if (stuff->id == None) if (stuff->id == None)
priorityclient = client; priorityclient = client;
else if (!(priorityclient = LookupClient(stuff->id, client))) else {
{ rc = dixLookupClient(&priorityclient, stuff->id, client,
client->errorValue = stuff->id; DixUnknownAccess);
return BadMatch; if (rc != Success)
return rc;
} }
if (priorityclient->priority != stuff->priority) if (priorityclient->priority != stuff->priority)
@ -1487,15 +1489,17 @@ ProcSyncGetPriority(client)
REQUEST(xSyncGetPriorityReq); REQUEST(xSyncGetPriorityReq);
xSyncGetPriorityReply rep; xSyncGetPriorityReply rep;
ClientPtr priorityclient; ClientPtr priorityclient;
int rc;
REQUEST_SIZE_MATCH(xSyncGetPriorityReq); REQUEST_SIZE_MATCH(xSyncGetPriorityReq);
if (stuff->id == None) if (stuff->id == None)
priorityclient = client; priorityclient = client;
else if (!(priorityclient = LookupClient(stuff->id, client))) else {
{ rc = dixLookupClient(&priorityclient, stuff->id, client,
client->errorValue = stuff->id; DixUnknownAccess);
return BadMatch; if (rc != Success)
return rc;
} }
rep.type = X_Reply; rep.type = X_Reply;
@ -1550,7 +1554,7 @@ ProcSyncSetCounter(client)
REQUEST_SIZE_MATCH(xSyncSetCounterReq); REQUEST_SIZE_MATCH(xSyncSetCounterReq);
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->cid, pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->cid,
RTCounter, SecurityWriteAccess); RTCounter, DixWriteAccess);
if (pCounter == NULL) if (pCounter == NULL)
{ {
client->errorValue = stuff->cid; client->errorValue = stuff->cid;
@ -1583,7 +1587,7 @@ ProcSyncChangeCounter(client)
REQUEST_SIZE_MATCH(xSyncChangeCounterReq); REQUEST_SIZE_MATCH(xSyncChangeCounterReq);
pCounter = (SyncCounter *) SecurityLookupIDByType(client, stuff->cid, pCounter = (SyncCounter *) SecurityLookupIDByType(client, stuff->cid,
RTCounter, SecurityWriteAccess); RTCounter, DixWriteAccess);
if (pCounter == NULL) if (pCounter == NULL)
{ {
client->errorValue = stuff->cid; client->errorValue = stuff->cid;
@ -1621,7 +1625,7 @@ ProcSyncDestroyCounter(client)
REQUEST_SIZE_MATCH(xSyncDestroyCounterReq); REQUEST_SIZE_MATCH(xSyncDestroyCounterReq);
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter, pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
RTCounter, SecurityDestroyAccess); RTCounter, DixDestroyAccess);
if (pCounter == NULL) if (pCounter == NULL)
{ {
client->errorValue = stuff->counter; client->errorValue = stuff->counter;
@ -1767,7 +1771,7 @@ ProcSyncQueryCounter(client)
REQUEST_SIZE_MATCH(xSyncQueryCounterReq); REQUEST_SIZE_MATCH(xSyncQueryCounterReq);
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter, pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
RTCounter, SecurityReadAccess); RTCounter, DixReadAccess);
if (pCounter == NULL) if (pCounter == NULL)
{ {
client->errorValue = stuff->counter; client->errorValue = stuff->counter;
@ -1896,7 +1900,7 @@ ProcSyncChangeAlarm(client)
REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq); REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq);
if (!(pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm, if (!(pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
RTAlarm, SecurityWriteAccess))) RTAlarm, DixWriteAccess)))
{ {
client->errorValue = stuff->alarm; client->errorValue = stuff->alarm;
return SyncErrorBase + XSyncBadAlarm; return SyncErrorBase + XSyncBadAlarm;
@ -1937,7 +1941,7 @@ ProcSyncQueryAlarm(client)
REQUEST_SIZE_MATCH(xSyncQueryAlarmReq); REQUEST_SIZE_MATCH(xSyncQueryAlarmReq);
pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm, pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
RTAlarm, SecurityReadAccess); RTAlarm, DixReadAccess);
if (!pAlarm) if (!pAlarm)
{ {
client->errorValue = stuff->alarm; client->errorValue = stuff->alarm;
@ -1997,7 +2001,7 @@ ProcSyncDestroyAlarm(client)
REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq); REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq);
if (!((SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm, if (!((SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
RTAlarm, SecurityDestroyAccess))) RTAlarm, DixDestroyAccess)))
{ {
client->errorValue = stuff->alarm; client->errorValue = stuff->alarm;
return SyncErrorBase + XSyncBadAlarm; return SyncErrorBase + XSyncBadAlarm;

View File

@ -99,7 +99,7 @@ int XaceHook(int hook, ...)
va_arg(ap, WindowPtr), va_arg(ap, WindowPtr),
va_arg(ap, Atom), va_arg(ap, Atom),
va_arg(ap, Mask), va_arg(ap, Mask),
SecurityAllowOperation /* default allow */ XaceAllowOperation /* default allow */
}; };
calldata = &rec; calldata = &rec;
prv = &rec.rval; prv = &rec.rval;

View File

@ -20,6 +20,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef _XACE_H #ifndef _XACE_H
#define _XACE_H #define _XACE_H
/* Hook return codes */
#define XaceErrorOperation 0
#define XaceAllowOperation 1
#define XaceIgnoreOperation 2
#ifdef XACE
#define XACE_EXTENSION_NAME "XAccessControlExtension" #define XACE_EXTENSION_NAME "XAccessControlExtension"
#define XACE_MAJOR_VERSION 1 #define XACE_MAJOR_VERSION 1
#define XACE_MINOR_VERSION 0 #define XACE_MINOR_VERSION 0
@ -75,11 +82,6 @@ extern int XaceHook(
/* From the original Security extension... /* 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. /* Proc vectors for untrusted clients, swapped and unswapped versions.
* These are the same as the normal proc vectors except that extensions * These are the same as the normal proc vectors except that extensions
* that haven't declared themselves secure will have ProcBadRequest plugged * that haven't declared themselves secure will have ProcBadRequest plugged
@ -100,4 +102,18 @@ extern void XaceCensorImage(
char * pBuf char * pBuf
); );
#else /* XACE */
/* Define calls away when XACE is not being built. */
#ifdef __GNUC__
#define XaceHook(args...) XaceAllowOperation
#define XaceCensorImage(args...) { ; }
#else
#define XaceHook(...) XaceAllowOperation
#define XaceCensorImage(...) { ; }
#endif
#endif /* XACE */
#endif /* _XACE_H */ #endif /* _XACE_H */

View File

@ -445,11 +445,10 @@ ProcXF86BigfontQueryFont(
#endif #endif
client->errorValue = stuff->id; /* EITHER font or gc */ client->errorValue = stuff->id; /* EITHER font or gc */
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
SecurityReadAccess); DixReadAccess);
if (!pFont) { if (!pFont) {
/* can't use VERIFY_GC because it might return BadGC */
GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC, GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
SecurityReadAccess); DixReadAccess);
if (!pGC) { if (!pGC) {
client->errorValue = stuff->id; client->errorValue = stuff->id;
return BadFont; /* procotol spec says only error is BadFont */ return BadFont; /* procotol spec says only error is BadFont */

View File

@ -749,7 +749,7 @@ ProcXpGetPageDimensions(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -811,7 +811,7 @@ ProcXpSetImageResolution(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityWriteAccess)) DixWriteAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -859,7 +859,7 @@ ProcXpGetImageResolution(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -1068,7 +1068,7 @@ ProcXpSetContext(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityWriteAccess)) DixWriteAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -1141,7 +1141,7 @@ ProcXpDestroyContext(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityDestroyAccess)) DixDestroyAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -1167,7 +1167,7 @@ ProcXpGetContextScreen(ClientPtr client)
if((pContext =(XpContextPtr)SecurityLookupIDByType(client, if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
return XpErrorBase+XPBadContext; return XpErrorBase+XPBadContext;
@ -1852,9 +1852,10 @@ ProcXpStartPage(ClientPtr client)
if(pContext->state & PAGE_STARTED) if(pContext->state & PAGE_STARTED)
return XpErrorBase+XPBadSequence; return XpErrorBase+XPBadSequence;
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client, result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
SecurityWriteAccess); if (result != Success)
if (!pWin || pWin->drawable.pScreen->myNum != pContext->screenNum) return result;
if (pWin->drawable.pScreen->myNum != pContext->screenNum)
return BadWindow; return BadWindow;
if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL) if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL)
@ -1943,8 +1944,11 @@ ProcXpPutDocumentData(ClientPtr client)
if (stuff->drawable) { if (stuff->drawable) {
if (pContext->state & DOC_RAW_STARTED) if (pContext->state & DOC_RAW_STARTED)
return BadDrawable; return BadDrawable;
pDraw = (DrawablePtr)LookupDrawable(stuff->drawable, client); result = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
if (!pDraw || pDraw->pScreen->myNum != pContext->screenNum) DixUnknownAccess);
if (result != Success)
return result;
if (pDraw->pScreen->myNum != pContext->screenNum)
return BadDrawable; return BadDrawable;
} else { } else {
if (pContext->state & DOC_COOKED_STARTED) if (pContext->state & DOC_COOKED_STARTED)
@ -1994,7 +1998,7 @@ ProcXpGetDocumentData(ClientPtr client)
if((pContext = (XpContextPtr)SecurityLookupIDByType(client, if((pContext = (XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityWriteAccess)) DixWriteAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -2077,7 +2081,7 @@ ProcXpGetAttributes(ClientPtr client)
client, client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -2149,7 +2153,7 @@ ProcXpSetAttributes(ClientPtr client)
client, client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityWriteAccess)) DixWriteAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -2229,7 +2233,7 @@ ProcXpGetOneAttribute(ClientPtr client)
client, client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -2300,7 +2304,7 @@ ProcXpSelectInput(ClientPtr client)
if((pContext=(XpContextPtr)SecurityLookupIDByType(client, if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityWriteAccess)) DixWriteAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;
@ -2336,7 +2340,7 @@ ProcXpInputSelected(ClientPtr client)
if((pContext=(XpContextPtr)SecurityLookupIDByType(client, if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
stuff->printContext, stuff->printContext,
RTcontext, RTcontext,
SecurityReadAccess)) DixReadAccess))
== (XpContextPtr)NULL) == (XpContextPtr)NULL)
{ {
client->errorValue = stuff->printContext; client->errorValue = stuff->printContext;

View File

@ -139,12 +139,12 @@ ProcXTestCompareCursor(client)
xXTestCompareCursorReply rep; xXTestCompareCursorReply rep;
WindowPtr pWin; WindowPtr pWin;
CursorPtr pCursor; CursorPtr pCursor;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xXTestCompareCursorReq); REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
pWin = (WindowPtr)LookupWindow(stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return(BadWindow); return rc;
if (stuff->cursor == None) if (stuff->cursor == None)
pCursor = NullCursor; pCursor = NullCursor;
else if (stuff->cursor == XTestCurrentCursor) else if (stuff->cursor == XTestCurrentCursor)
@ -173,12 +173,10 @@ ProcXTestFakeInput(client)
register ClientPtr client; register ClientPtr client;
{ {
REQUEST(xXTestFakeInputReq); REQUEST(xXTestFakeInputReq);
int nev; int nev, n, type, rc;
int n;
xEvent *ev; xEvent *ev;
DeviceIntPtr dev = NULL; DeviceIntPtr dev = NULL;
WindowPtr root; WindowPtr root;
int type;
#ifdef XINPUT #ifdef XINPUT
Bool extension = FALSE; Bool extension = FALSE;
deviceValuator *dv = NULL; deviceValuator *dv = NULL;
@ -367,9 +365,10 @@ ProcXTestFakeInput(client)
root = GetCurrentRootWindow(); root = GetCurrentRootWindow();
else else
{ {
root = LookupWindow(ev->u.keyButtonPointer.root, client); rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client,
if (!root) DixUnknownAccess);
return BadWindow; if (rc != Success)
return rc;
if (root->parent) if (root->parent)
{ {
client->errorValue = ev->u.keyButtonPointer.root; client->errorValue = ev->u.keyButtonPointer.root;

View File

@ -373,10 +373,8 @@ ProcXvQueryAdaptors(ClientPtr client)
xvFormat format; xvFormat format;
xvAdaptorInfo ainfo; xvAdaptorInfo ainfo;
xvQueryAdaptorsReply rep; xvQueryAdaptorsReply rep;
int totalSize; int totalSize, na, nf, rc;
int na;
XvAdaptorPtr pa; XvAdaptorPtr pa;
int nf;
XvFormatPtr pf; XvFormatPtr pf;
WindowPtr pWin; WindowPtr pWin;
ScreenPtr pScreen; ScreenPtr pScreen;
@ -385,11 +383,9 @@ ProcXvQueryAdaptors(ClientPtr client)
REQUEST(xvQueryAdaptorsReq); REQUEST(xvQueryAdaptorsReq);
REQUEST_SIZE_MATCH(xvQueryAdaptorsReq); REQUEST_SIZE_MATCH(xvQueryAdaptorsReq);
if(!(pWin = (WindowPtr)LookupWindow(stuff->window, client) )) rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
{ if (rc != Success)
client->errorValue = stuff->window; return rc;
return (BadWindow);
}
pScreen = pWin->drawable.pScreen; pScreen = pWin->drawable.pScreen;
pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr; pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
@ -531,9 +527,9 @@ ProcXvQueryEncodings(ClientPtr client)
static int static int
ProcXvPutVideo(ClientPtr client) ProcXvPutVideo(ClientPtr client)
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
XvPortPtr pPort; XvPortPtr pPort;
register GCPtr pGC; GCPtr pGC;
int status; int status;
REQUEST(xvPutVideoReq); REQUEST(xvPutVideoReq);
@ -577,9 +573,9 @@ ProcXvPutVideo(ClientPtr client)
static int static int
ProcXvPutStill(ClientPtr client) ProcXvPutStill(ClientPtr client)
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
XvPortPtr pPort; XvPortPtr pPort;
register GCPtr pGC; GCPtr pGC;
int status; int status;
REQUEST(xvPutStillReq); REQUEST(xvPutStillReq);
@ -624,9 +620,9 @@ ProcXvPutStill(ClientPtr client)
static int static int
ProcXvGetVideo(ClientPtr client) ProcXvGetVideo(ClientPtr client)
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
XvPortPtr pPort; XvPortPtr pPort;
register GCPtr pGC; GCPtr pGC;
int status; int status;
REQUEST(xvGetVideoReq); REQUEST(xvGetVideoReq);
@ -671,9 +667,9 @@ ProcXvGetVideo(ClientPtr client)
static int static int
ProcXvGetStill(ClientPtr client) ProcXvGetStill(ClientPtr client)
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
XvPortPtr pPort; XvPortPtr pPort;
register GCPtr pGC; GCPtr pGC;
int status; int status;
REQUEST(xvGetStillReq); REQUEST(xvGetStillReq);
@ -717,15 +713,14 @@ ProcXvGetStill(ClientPtr client)
static int static int
ProcXvSelectVideoNotify(ClientPtr client) ProcXvSelectVideoNotify(ClientPtr client)
{ {
register DrawablePtr pDraw; DrawablePtr pDraw;
int rc;
REQUEST(xvSelectVideoNotifyReq); REQUEST(xvSelectVideoNotifyReq);
REQUEST_SIZE_MATCH(xvSelectVideoNotifyReq); REQUEST_SIZE_MATCH(xvSelectVideoNotifyReq);
if(!(pDraw = (DrawablePtr)LOOKUP_DRAWABLE(stuff->drawable, client) )) rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
{ if (rc != Success)
client->errorValue = stuff->drawable; return rc;
return (BadWindow);
}
return XVCALL(diSelectVideoNotify)(client, pDraw, stuff->onoff); return XVCALL(diSelectVideoNotify)(client, pDraw, stuff->onoff);
@ -822,8 +817,8 @@ ProcXvUngrabPort(ClientPtr client)
static int static int
ProcXvStopVideo(ClientPtr client) ProcXvStopVideo(ClientPtr client)
{ {
int status; int status, rc;
register DrawablePtr pDraw; DrawablePtr pDraw;
XvPortPtr pPort; XvPortPtr pPort;
REQUEST(xvStopVideoReq); REQUEST(xvStopVideoReq);
REQUEST_SIZE_MATCH(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq);
@ -840,11 +835,9 @@ ProcXvStopVideo(ClientPtr client)
return (status); return (status);
} }
if(!(pDraw = LOOKUP_DRAWABLE(stuff->drawable, client) )) rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
{ if (rc != Success)
client->errorValue = stuff->drawable; return rc;
return (BadDrawable);
}
return XVCALL(diStopVideo)(client, pPort, pDraw); return XVCALL(diStopVideo)(client, pPort, pDraw);
@ -1877,11 +1870,11 @@ XineramaXvStopVideo(ClientPtr client)
REQUEST_SIZE_MATCH(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
FOR_NSCREENS_BACKWARD(i) { FOR_NSCREENS_BACKWARD(i) {
@ -1905,7 +1898,7 @@ XineramaXvSetPortAttribute(ClientPtr client)
REQUEST_SIZE_MATCH(xvSetPortAttributeReq); REQUEST_SIZE_MATCH(xvSetPortAttributeReq);
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
FOR_NSCREENS_BACKWARD(i) { FOR_NSCREENS_BACKWARD(i) {
@ -1931,15 +1924,15 @@ XineramaXvShmPutImage(ClientPtr client)
REQUEST_SIZE_MATCH(xvShmPutImageReq); REQUEST_SIZE_MATCH(xvShmPutImageReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -1978,15 +1971,15 @@ XineramaXvPutImage(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xvPutImageReq); REQUEST_AT_LEAST_SIZE(xvPutImageReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -2023,15 +2016,15 @@ XineramaXvPutVideo(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xvPutVideoReq); REQUEST_AT_LEAST_SIZE(xvPutVideoReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
@ -2068,15 +2061,15 @@ XineramaXvPutStill(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xvPutImageReq); REQUEST_AT_LEAST_SIZE(xvPutImageReq);
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess))) client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
return BadDrawable; return BadDrawable;
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->gc, XRT_GC, SecurityReadAccess))) client, stuff->gc, XRT_GC, DixReadAccess)))
return BadGC; return BadGC;
if(!(port = (PanoramiXRes *)SecurityLookupIDByType( if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
client, stuff->port, XvXRTPort, SecurityReadAccess))) client, stuff->port, XvXRTPort, DixReadAccess)))
return _XvBadPort; return _XvBadPort;
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;

View File

@ -106,7 +106,7 @@ SProcXChangeDeviceDontPropagateList(register ClientPtr client)
int int
ProcXChangeDeviceDontPropagateList(register ClientPtr client) ProcXChangeDeviceDontPropagateList(register ClientPtr client)
{ {
int i; int i, rc;
WindowPtr pWin; WindowPtr pWin;
struct tmask tmp[EMASKSIZE]; struct tmask tmp[EMASKSIZE];
OtherInputMasks *others; OtherInputMasks *others;
@ -121,11 +121,10 @@ ProcXChangeDeviceDontPropagateList(register ClientPtr client)
return Success; return Success;
} }
pWin = (WindowPtr) LookupWindow(stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) { if (rc != Success) {
client->errorValue = stuff->window;
SendErrorToClient(client, IReqCode, X_ChangeDeviceDontPropagateList, 0, SendErrorToClient(client, IReqCode, X_ChangeDeviceDontPropagateList, 0,
BadWindow); rc);
return Success; return Success;
} }

View File

@ -505,6 +505,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
WindowPtr pWin, confineTo; WindowPtr pWin, confineTo;
CursorPtr cursor; CursorPtr cursor;
GrabPtr grab; GrabPtr grab;
int rc;
if ((this_device_mode != GrabModeSync) && if ((this_device_mode != GrabModeSync) &&
(this_device_mode != GrabModeAsync)) { (this_device_mode != GrabModeAsync)) {
@ -524,15 +525,15 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
client->errorValue = ownerEvents; client->errorValue = ownerEvents;
return BadValue; return BadValue;
} }
pWin = LookupWindow(grabWindow, client); rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (rconfineTo == None) if (rconfineTo == None)
confineTo = NullWindow; confineTo = NullWindow;
else { else {
confineTo = LookupWindow(rconfineTo, client); rc = dixLookupWindow(&confineTo, rconfineTo, client, DixUnknownAccess);
if (!confineTo) if (rc != Success)
return BadWindow; return rc;
} }
if (rcursor == None) if (rcursor == None)
cursor = NullCursor; cursor = NullCursor;
@ -562,6 +563,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
WindowPtr pWin; WindowPtr pWin;
GrabPtr grab; GrabPtr grab;
KeyClassPtr k = dev->key; KeyClassPtr k = dev->key;
int rc;
if (k == NULL) if (k == NULL)
return BadMatch; return BadMatch;
@ -588,9 +590,9 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
client->errorValue = ownerEvents; client->errorValue = ownerEvents;
return BadValue; return BadValue;
} }
pWin = LookupWindow(grabWindow, client); rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
grab = CreateGrab(client->index, dev, pWin, grab = CreateGrab(client->index, dev, pWin,
mask, ownerEvents, this_device_mode, other_devices_mode, mask, ownerEvents, this_device_mode, other_devices_mode,
@ -810,7 +812,7 @@ SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
} else } else
effectiveFocus = pWin = inputFocus; effectiveFocus = pWin = inputFocus;
} else } else
pWin = LookupWindow(dest, client); dixLookupWindow(&pWin, dest, client, DixUnknownAccess);
if (!pWin) if (!pWin)
return BadWindow; return BadWindow;
if ((propagate != xFalse) && (propagate != xTrue)) { if ((propagate != xFalse) && (propagate != xTrue)) {

View File

@ -100,7 +100,7 @@ int
ProcXGetDeviceDontPropagateList(register ClientPtr client) ProcXGetDeviceDontPropagateList(register ClientPtr client)
{ {
CARD16 count = 0; CARD16 count = 0;
int i; int i, rc;
XEventClass *buf = NULL, *tbuf; XEventClass *buf = NULL, *tbuf;
WindowPtr pWin; WindowPtr pWin;
xGetDeviceDontPropagateListReply rep; xGetDeviceDontPropagateListReply rep;
@ -115,11 +115,10 @@ ProcXGetDeviceDontPropagateList(register ClientPtr client)
rep.length = 0; rep.length = 0;
rep.count = 0; rep.count = 0;
pWin = (WindowPtr) LookupWindow(stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) { if (rc != Success) {
client->errorValue = stuff->window;
SendErrorToClient(client, IReqCode, X_GetDeviceDontPropagateList, 0, SendErrorToClient(client, IReqCode, X_GetDeviceDontPropagateList, 0,
BadWindow); rc);
return Success; return Success;
} }

View File

@ -98,8 +98,7 @@ SProcXGetSelectedExtensionEvents(register ClientPtr client)
int int
ProcXGetSelectedExtensionEvents(register ClientPtr client) ProcXGetSelectedExtensionEvents(register ClientPtr client)
{ {
int i; int i, rc, total_length = 0;
int total_length = 0;
xGetSelectedExtensionEventsReply rep; xGetSelectedExtensionEventsReply rep;
WindowPtr pWin; WindowPtr pWin;
XEventClass *buf = NULL; XEventClass *buf = NULL;
@ -118,9 +117,10 @@ ProcXGetSelectedExtensionEvents(register ClientPtr client)
rep.this_client_count = 0; rep.this_client_count = 0;
rep.all_clients_count = 0; rep.all_clients_count = 0;
if (!(pWin = LookupWindow(stuff->window, client))) { rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (rc != Success) {
SendErrorToClient(client, IReqCode, X_GetSelectedExtensionEvents, 0, SendErrorToClient(client, IReqCode, X_GetSelectedExtensionEvents, 0,
BadWindow); rc);
return Success; return Success;
} }

View File

@ -170,11 +170,9 @@ ProcXSelectExtensionEvent(register ClientPtr client)
return Success; return Success;
} }
pWin = (WindowPtr) LookupWindow(stuff->window, client); ret = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) { if (ret != Success) {
client->errorValue = stuff->window; SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0, ret);
SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0,
BadWindow);
return Success; return Success;
} }

View File

@ -105,6 +105,7 @@ ProcXUngrabDeviceButton(ClientPtr client)
DeviceIntPtr mdev; DeviceIntPtr mdev;
WindowPtr pWin; WindowPtr pWin;
GrabRec temporaryGrab; GrabRec temporaryGrab;
int rc;
REQUEST(xUngrabDeviceButtonReq); REQUEST(xUngrabDeviceButtonReq);
REQUEST_SIZE_MATCH(xUngrabDeviceButtonReq); REQUEST_SIZE_MATCH(xUngrabDeviceButtonReq);
@ -134,9 +135,9 @@ ProcXUngrabDeviceButton(ClientPtr client)
} else } else
mdev = (DeviceIntPtr) LookupKeyboardDevice(); mdev = (DeviceIntPtr) LookupKeyboardDevice();
pWin = LookupWindow(stuff->grabWindow, client); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
if (!pWin) { if (rc != Success) {
SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, BadWindow); SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, rc);
return Success; return Success;
} }

View File

@ -105,6 +105,7 @@ ProcXUngrabDeviceKey(ClientPtr client)
DeviceIntPtr mdev; DeviceIntPtr mdev;
WindowPtr pWin; WindowPtr pWin;
GrabRec temporaryGrab; GrabRec temporaryGrab;
int rc;
REQUEST(xUngrabDeviceKeyReq); REQUEST(xUngrabDeviceKeyReq);
REQUEST_SIZE_MATCH(xUngrabDeviceKeyReq); REQUEST_SIZE_MATCH(xUngrabDeviceKeyReq);
@ -133,9 +134,9 @@ ProcXUngrabDeviceKey(ClientPtr client)
} else } else
mdev = (DeviceIntPtr) LookupKeyboardDevice(); mdev = (DeviceIntPtr) LookupKeyboardDevice();
pWin = LookupWindow(stuff->grabWindow, client); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
if (!pWin) { if (rc != Success) {
SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, BadWindow); SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, rc);
return Success; return Success;
} }
if (((stuff->key > dev->key->curKeySyms.maxKeyCode) || if (((stuff->key > dev->key->curKeySyms.maxKeyCode) ||

View File

@ -269,7 +269,10 @@ ProcCompositeNameWindowPixmap (ClientPtr client)
client->errorValue = stuff->window; client->errorValue = stuff->window;
return BadWindow; return BadWindow;
} }
if (!pWin->viewable)
return BadMatch;
LEGAL_NEW_RESOURCE (stuff->pixmap, client); LEGAL_NEW_RESOURCE (stuff->pixmap, client);
cw = GetCompWindow (pWin); cw = GetCompWindow (pWin);

View File

@ -93,10 +93,10 @@ typedef struct _compPixmapVisit {
static Bool static Bool
compRepaintBorder (ClientPtr pClient, pointer closure) compRepaintBorder (ClientPtr pClient, pointer closure)
{ {
WindowPtr pWindow = LookupWindow ((XID) closure, pClient); WindowPtr pWindow;
int rc = dixLookupWindow(&pWindow, (XID)closure, pClient,DixUnknownAccess);
if (pWindow) if (rc == Success) {
{
RegionRec exposed; RegionRec exposed;
REGION_NULL(pScreen, &exposed); REGION_NULL(pScreen, &exposed);

View File

@ -36,10 +36,10 @@
/* the above comment lies. there is no better way. */ /* the above comment lies. there is no better way. */
#include "input.h" #include "input.h"
#include "inputstr.h" #include "inputstr.h"
#include "config.h" #include "hotplug.h"
#include "os.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_MSG "[config] malformed message, dropping"
#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \ #define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \
@ -50,18 +50,44 @@
ret = BadValue; \ ret = BadValue; \
goto unwind; } goto unwind; }
static DBusConnection *configConnection = NULL; /* How often to attempt reconnecting when we get booted off the bus. */
static int configfd = -1; #define RECONNECT_DELAY 10000 /* in ms */
static char busobject[32] = { 0 };
static char busname[64] = { 0 };
void struct config_data {
configDispatch() int fd;
DBusConnection *connection;
char busobject[32];
char busname[64];
};
static struct config_data *configData;
static CARD32 configReconnect(OsTimerPtr timer, CARD32 time, pointer arg);
static void
configWakeupHandler(pointer blockData, int err, pointer pReadMask)
{ {
if (!configConnection) struct config_data *data = blockData;
return;
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 void
configTeardown(void)
{
if (configData) {
RemoveGeneralSocket(configData->fd);
RemoveBlockAndWakeupHandlers(configBlockHandler, configWakeupHandler,
configData);
xfree(configData);
configData = NULL;
}
} }
static int static int
@ -217,23 +243,22 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
ret = configAddDevice(message, &iter, &error); ret = configAddDevice(message, &iter, &error);
else if (strcmp(dbus_message_get_member(message), "remove") == 0) else if (strcmp(dbus_message_get_member(message), "remove") == 0)
ret = configRemoveDevice(message, &iter, &error); 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) { if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) {
reply = dbus_message_new_method_return(message); ErrorF("[config] couldn't append to iterator\n");
dbus_message_iter_init_append(reply, &iter); dbus_error_free(&error);
return DBUS_HANDLER_RESULT_HANDLED;
}
if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &ret)) { if (!dbus_connection_send(bus, reply, NULL))
ErrorF("[config] couldn't append to iterator\n"); ErrorF("[config] failed to send reply\n");
dbus_error_free(&error); dbus_connection_flush(bus);
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); dbus_error_free(&error);
@ -246,71 +271,147 @@ configMessage(DBusConnection *connection, DBusMessage *message, void *closure)
return DBUS_HANDLER_RESULT_HANDLED; 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)
{ {
DBusConnection *bus = NULL;
DBusError error; DBusError error;
DBusObjectPathVTable vtable = { .message_function = configMessage }; DBusObjectPathVTable vtable = { .message_function = configMessage };
configConnection = NULL; if (!configData)
configData = (struct config_data *) xcalloc(sizeof(struct config_data), 1);
if (!configData) {
ErrorF("[dbus] failed to allocate data struct.\n");
return FALSE;
}
dbus_error_init(&error); dbus_error_init(&error);
bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error); configData->connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
if (!bus || dbus_error_is_set(&error)) { if (!configData->connection || dbus_error_is_set(&error)) {
ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name, ErrorF("[dbus] some kind of error occurred: %s (%s)\n", error.name,
error.message); error.message);
dbus_error_free(&error); dbus_error_free(&error);
return; xfree(configData);
configData = NULL;
return FALSE;
} }
if (!dbus_connection_get_unix_fd(bus, &configfd)) { dbus_connection_set_exit_on_disconnect(configData->connection, FALSE);
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"); ErrorF("[dbus] couldn't get fd for bus\n");
dbus_error_free(&error); dbus_error_free(&error);
configfd = -1; xfree(configData);
return; configData = NULL;
return FALSE;
} }
snprintf(busname, sizeof(busname), "org.x.config.display%d", atoi(display)); snprintf(configData->busname, sizeof(configData->busname),
if (!dbus_bus_request_name(bus, busname, 0, &error) || "org.x.config.display%d", atoi(display));
dbus_error_is_set(&error)) { 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", ErrorF("[dbus] couldn't take over org.x.config: %s (%s)\n",
error.name, error.message); error.name, error.message);
dbus_error_free(&error); dbus_error_free(&error);
dbus_connection_unref(bus); dbus_connection_unref(configData->connection);
configfd = -1; xfree(configData);
return; configData = NULL;
return FALSE;
} }
/* blocks until we get a reply. */ /* blocks until we get a reply. */
dbus_bus_add_match(bus, MATCH_RULE, &error); dbus_bus_add_match(configData->connection, CONFIG_MATCH_RULE, &error);
if (dbus_error_is_set(&error)) { if (dbus_error_is_set(&error)) {
ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name, ErrorF("[dbus] couldn't match X.Org rule: %s (%s)\n", error.name,
error.message); error.message);
dbus_error_free(&error); dbus_error_free(&error);
dbus_bus_release_name(bus, busname, &error); dbus_bus_release_name(configData->connection, configData->busname,
dbus_connection_unref(bus); &error);
configfd = -1; dbus_connection_unref(configData->connection);
return; xfree(configData);
configData = NULL;
return FALSE;
} }
snprintf(busobject, sizeof(busobject), "/org/x/config/%d", atoi(display)); if (!dbus_connection_add_filter(configData->connection, configFilter,
if (!dbus_connection_register_object_path(bus, busobject, &vtable, bus)) { configData, NULL)) {
ErrorF("[dbus] couldn't register object path\n");
configfd = -1; ErrorF("[dbus] couldn't add signal filter: %s (%s)\n", error.name,
dbus_bus_release_name(bus, busname, &error); error.message);
dbus_bus_remove_match(bus, MATCH_RULE, &error);
dbus_connection_unref(bus);
dbus_error_free(&error); dbus_error_free(&error);
return; 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;
} }
DebugF("[dbus] registered object path %s\n", busobject); 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");
dbus_bus_release_name(configData->connection, configData->busname,
&error);
dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
&error);
dbus_connection_unref(configData->connection);
dbus_error_free(&error);
xfree(configData);
configData = NULL;
return FALSE;
}
DebugF("[dbus] registered object path %s\n", configData->busobject);
dbus_error_free(&error); dbus_error_free(&error);
configConnection = bus; AddGeneralSocket(configData->fd);
AddGeneralSocket(configfd);
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 void
@ -318,26 +419,24 @@ configFini()
{ {
DBusError error; DBusError error;
if (configConnection) { if (configData) {
dbus_error_init(&error); dbus_error_init(&error);
dbus_connection_unregister_object_path(configConnection, busobject); dbus_connection_unregister_object_path(configData->connection,
dbus_bus_remove_match(configConnection, MATCH_RULE, &error); configData->busobject);
dbus_bus_release_name(configConnection, busname, &error); dbus_connection_remove_filter(configData->connection, configFilter,
dbus_connection_unref(configConnection); configData);
RemoveGeneralSocket(configfd); dbus_bus_remove_match(configData->connection, CONFIG_MATCH_RULE,
configConnection = NULL; &error);
configfd = -1; dbus_bus_release_name(configData->connection, configData->busname,
&error);
dbus_connection_unref(configData->connection);
dbus_error_free(&error); dbus_error_free(&error);
configTeardown();
} }
} }
#else /* !HAVE_DBUS */ #else /* !HAVE_DBUS */
void
configDispatch()
{
}
void void
configInitialise() configInitialise()
{ {

View File

@ -174,7 +174,7 @@ AC_CACHE_CHECK([for SYSV IPC],
[AC_TRY_LINK([ [AC_TRY_LINK([
#include <sys/shm.h> #include <sys/shm.h>
],[ ],[
int main () { {
int id; int id;
id = shmget(IPC_PRIVATE, 512, SHM_W | SHM_R); id = shmget(IPC_PRIVATE, 512, SHM_W | SHM_R);
if (id < 0) return -1; if (id < 0) return -1;
@ -391,7 +391,7 @@ AC_ARG_WITH(mesa-source, AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [P
AC_ARG_WITH(fontdir, AS_HELP_STRING([--with-fontdir=FONTDIR], [Path to top level dir where fonts are installed (default: ${libdir}/X11/fonts)]), 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="$withval" ],
[ FONTDIR="${libdir}/X11/fonts" ]) [ 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]), AC_ARG_WITH(default-font-path, AS_HELP_STRING([--with-default-font-path=PATH], [Comma separated list of font dirs]),
[ FONTPATH="$withval" ], [ FONTPATH="$withval" ],
[ FONTPATH="${DEFAULT_FONT_PATH}" ]) [ FONTPATH="${DEFAULT_FONT_PATH}" ])
@ -545,7 +545,7 @@ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la' XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
dnl Core modules for most extensions, et al. dnl Core modules for most extensions, et al.
REQUIRED_MODULES="randrproto renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]" REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] damageproto xcmiscproto xextproto xproto xtrans [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto [inputproto >= 1.4] [kbproto >= 1.0.3]"
REQUIRED_LIBS="xfont xau fontenc" REQUIRED_LIBS="xfont xau fontenc"
if test "x$DBUS" = xauto; then if test "x$DBUS" = xauto; then
@ -655,6 +655,9 @@ if test "x$DRI" = xyes; then
PKG_CHECK_MODULES([DRIPROTO], [xf86driproto]) PKG_CHECK_MODULES([DRIPROTO], [xf86driproto])
PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0]) PKG_CHECK_MODULES([LIBDRM], [libdrm >= 2.3.0])
PKG_CHECK_MODULES([GL], [glproto >= 1.4.1]) PKG_CHECK_MODULES([GL], [glproto >= 1.4.1])
PKG_CHECK_EXISTS(libdrm >= 2.2.0,
[AC_DEFINE([HAVE_LIBDRM_2_2], 1,
[Has version 2.2 (or newer) of the drm library])])
AC_SUBST(DRIPROTO_CFLAGS) AC_SUBST(DRIPROTO_CFLAGS)
AC_SUBST(LIBDRM_CFLAGS) AC_SUBST(LIBDRM_CFLAGS)
AC_SUBST(LIBDRM_LIBS) AC_SUBST(LIBDRM_LIBS)
@ -1004,7 +1007,7 @@ dnl ---------------------------------------------------------------------------
dnl DMX DDX dnl DMX DDX
AC_MSG_CHECKING([whether to build Xdmx DDX]) AC_MSG_CHECKING([whether to build Xdmx DDX])
PKG_CHECK_MODULES([DMXMODULES], [xmuu xext x11 xrender xfont xi dmxproto xau $XDMCP_MODULES], [have_dmx=yes], [have_dmx=no]) PKG_CHECK_MODULES([DMXMODULES], [xmuu xext x11 xrender xfixes xfont xi dmxproto xau $XDMCP_MODULES], [have_dmx=yes], [have_dmx=no])
if test "x$DMX" = xauto; then if test "x$DMX" = xauto; then
DMX="$have_dmx" DMX="$have_dmx"
fi fi
@ -1056,7 +1059,7 @@ AC_MSG_RESULT([$XVFB])
AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes]) AM_CONDITIONAL(XVFB, [test "x$XVFB" = xyes])
if test "x$XVFB" = xyes; then 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]) AC_SUBST([XVFB_LIBS])
fi fi
@ -1383,6 +1386,7 @@ dnl has it in libc), or if libdl is needed to get it.
AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file]) AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file])
AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file]) AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path]) AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
AC_DEFINE_DIR(DEFAULT_LIBRARY_PATH, libdir, [Default library install path])
AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location]) AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support]) AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support])
@ -1758,13 +1762,11 @@ AM_CONDITIONAL(BUILD_KBD_MODE, [test x$BUILD_KBD_MODE = xyes])
AM_CONDITIONAL(BSD_KBD_MODE, [test x$KBD_MODE_TYPE = xbsd]) AM_CONDITIONAL(BSD_KBD_MODE, [test x$KBD_MODE_TYPE = xbsd])
AM_CONDITIONAL(SUN_KBD_MODE, [test x$KBD_MODE_TYPE = xsun]) AM_CONDITIONAL(SUN_KBD_MODE, [test x$KBD_MODE_TYPE = xsun])
CFLAGS="$XSERVER_CFLAGS $CFLAGS"
AC_SUBST([CFLAGS])
BUILD_DATE="$(date +'%Y%m%d')" BUILD_DATE="$(date +'%Y%m%d')"
AC_SUBST([BUILD_DATE]) AC_SUBST([BUILD_DATE])
DIX_CFLAGS="-DHAVE_DIX_CONFIG_H" DIX_CFLAGS="-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"
AC_SUBST([DIX_CFLAGS]) AC_SUBST([DIX_CFLAGS])
AC_SUBST([libdir exec_prefix prefix]) AC_SUBST([libdir exec_prefix prefix])

View File

@ -34,6 +34,7 @@ MANDEFS = \
-D__miscmansuffix__=$(MISC_MAN_SUFFIX) \ -D__miscmansuffix__=$(MISC_MAN_SUFFIX) \
-D__drivermansuffix__=$(DRIVER_MAN_SUFFIX) \ -D__drivermansuffix__=$(DRIVER_MAN_SUFFIX) \
-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \ -D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
-D__mandir__=$(mandir) \
-D__projectroot__=$(prefix) \ -D__projectroot__=$(prefix) \
-D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \ -D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
-D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME) -D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME)

View File

@ -173,13 +173,17 @@ ProcDamageCreate (ClientPtr client)
DamageExtPtr pDamageExt; DamageExtPtr pDamageExt;
DamageReportLevel level; DamageReportLevel level;
RegionPtr pRegion; RegionPtr pRegion;
int rc;
REQUEST(xDamageCreateReq); REQUEST(xDamageCreateReq);
REQUEST_SIZE_MATCH(xDamageCreateReq); REQUEST_SIZE_MATCH(xDamageCreateReq);
LEGAL_NEW_RESOURCE(stuff->damage, client); LEGAL_NEW_RESOURCE(stuff->damage, client);
SECURITY_VERIFY_DRAWABLE (pDrawable, stuff->drawable, client, rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
SecurityReadAccess); DixReadAccess);
if (rc != Success)
return rc;
switch (stuff->level) { switch (stuff->level) {
case XDamageReportRawRectangles: case XDamageReportRawRectangles:
level = DamageReportRawRegion; level = DamageReportRawRegion;
@ -237,7 +241,7 @@ ProcDamageDestroy (ClientPtr client)
DamageExtPtr pDamageExt; DamageExtPtr pDamageExt;
REQUEST_SIZE_MATCH(xDamageDestroyReq); REQUEST_SIZE_MATCH(xDamageDestroyReq);
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess); VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
FreeResource (stuff->damage, RT_NONE); FreeResource (stuff->damage, RT_NONE);
return (client->noClientException); return (client->noClientException);
} }
@ -251,9 +255,9 @@ ProcDamageSubtract (ClientPtr client)
RegionPtr pParts; RegionPtr pParts;
REQUEST_SIZE_MATCH(xDamageSubtractReq); REQUEST_SIZE_MATCH(xDamageSubtractReq);
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess); VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, SecurityWriteAccess); VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, DixWriteAccess);
VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, SecurityWriteAccess); VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, DixWriteAccess);
if (pDamageExt->level != DamageReportRawRegion) if (pDamageExt->level != DamageReportRawRegion)
{ {

View File

@ -405,11 +405,9 @@ ProcDbeAllocateBackBufferName(ClientPtr client)
REQUEST_SIZE_MATCH(xDbeAllocateBackBufferNameReq); REQUEST_SIZE_MATCH(xDbeAllocateBackBufferNameReq);
/* The window must be valid. */ /* The window must be valid. */
if (!(pWin = SecurityLookupWindow(stuff->window, client, status = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
SecurityWriteAccess))) if (status != Success)
{ return status;
return(BadWindow);
}
/* The window must be InputOutput. */ /* The window must be InputOutput. */
if (pWin->drawable.class != InputOutput) if (pWin->drawable.class != InputOutput)
@ -633,9 +631,9 @@ ProcDbeDeallocateBackBufferName(ClientPtr client)
/* Buffer name must be valid */ /* Buffer name must be valid */
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
stuff->buffer, dbeWindowPrivResType, SecurityDestroyAccess)) || stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) ||
!(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType, !(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType,
SecurityDestroyAccess))) DixDestroyAccess)))
{ {
client->errorValue = stuff->buffer; client->errorValue = stuff->buffer;
return(dbeErrorBase + DbeBadBuffer); return(dbeErrorBase + DbeBadBuffer);
@ -729,11 +727,11 @@ ProcDbeSwapBuffers(ClientPtr client)
/* Check all windows to swap. */ /* Check all windows to swap. */
/* Each window must be a valid window - BadWindow. */ /* Each window must be a valid window - BadWindow. */
if (!(pWin = SecurityLookupWindow(dbeSwapInfo[i].window, client, error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
SecurityWriteAccess))) DixWriteAccess);
{ if (error != Success) {
DEALLOCATE_LOCAL(swapInfo); DEALLOCATE_LOCAL(swapInfo);
return(BadWindow); return error;
} }
/* Each window must be double-buffered - BadMatch. */ /* Each window must be double-buffered - BadMatch. */
@ -867,7 +865,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
xDbeGetVisualInfoReply rep; xDbeGetVisualInfoReply rep;
Drawable *drawables; Drawable *drawables;
DrawablePtr *pDrawables = NULL; DrawablePtr *pDrawables = NULL;
register int i, j, n; register int i, j, n, rc;
register int count; /* number of visual infos in reply */ register int count; /* number of visual infos in reply */
register int length; /* length of reply */ register int length; /* length of reply */
ScreenPtr pScreen; ScreenPtr pScreen;
@ -889,11 +887,11 @@ ProcDbeGetVisualInfo(ClientPtr client)
for (i = 0; i < stuff->n; i++) for (i = 0; i < stuff->n; i++)
{ {
if (!(pDrawables[i] = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
drawables[i], client, SecurityReadAccess))) DixReadAccess);
{ if (rc != Success) {
DEALLOCATE_LOCAL(pDrawables); DEALLOCATE_LOCAL(pDrawables);
return(BadDrawable); return rc;
} }
} }
} }
@ -1047,7 +1045,7 @@ ProcDbeGetBackBufferAttributes(ClientPtr client)
REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq); REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq);
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
stuff->buffer, dbeWindowPrivResType, SecurityReadAccess))) stuff->buffer, dbeWindowPrivResType, DixReadAccess)))
{ {
rep.attributes = None; rep.attributes = None;
} }

View File

@ -52,7 +52,7 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS) dtrace-dix.o: $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS)
$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o $(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) dix.O: dtrace-dix.o $(am_libdix_la_OBJECTS)
ld -r -o $@ .libs/*.o ld -r -o $@ .libs/*.o

View File

@ -903,7 +903,7 @@ AllocColor (ColormapPtr pmap,
{ {
ColormapPtr prootmap = (ColormapPtr) ColormapPtr prootmap = (ColormapPtr)
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
RT_COLORMAP, SecurityReadAccess); RT_COLORMAP, DixReadAccess);
if (pmap->class == prootmap->class) if (pmap->class == prootmap->class)
FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb, FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
@ -920,7 +920,7 @@ AllocColor (ColormapPtr pmap,
{ {
ColormapPtr prootmap = (ColormapPtr) ColormapPtr prootmap = (ColormapPtr)
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
RT_COLORMAP, SecurityReadAccess); RT_COLORMAP, DixReadAccess);
if (pmap->class == prootmap->class) if (pmap->class == prootmap->class)
{ {

View File

@ -262,9 +262,9 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
GlyphSharePtr pShare; GlyphSharePtr pShare;
sourcefont = (FontPtr) SecurityLookupIDByType(client, source, RT_FONT, sourcefont = (FontPtr) SecurityLookupIDByType(client, source, RT_FONT,
SecurityReadAccess); DixReadAccess);
maskfont = (FontPtr) SecurityLookupIDByType(client, mask, RT_FONT, maskfont = (FontPtr) SecurityLookupIDByType(client, mask, RT_FONT,
SecurityReadAccess); DixReadAccess);
if (!sourcefont) if (!sourcefont)
{ {

View File

@ -69,9 +69,7 @@ SOFTWARE.
#ifdef XKB #ifdef XKB
#include <X11/extensions/XKBsrv.h> #include <X11/extensions/XKBsrv.h>
#endif #endif
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
#include "dispatch.h" #include "dispatch.h"
#include "swaprep.h" #include "swaprep.h"
@ -1178,10 +1176,8 @@ DoSetModifierMapping(ClientPtr client, KeyCode *inputMap,
} }
} }
#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE)) if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
return BadAccess; return BadAccess;
#endif
/* None of the modifiers (old or new) may be down while we change /* None of the modifiers (old or new) may be down while we change
* the map. */ * the map. */
@ -1302,14 +1298,12 @@ ProcChangeKeyboardMapping(ClientPtr client)
return BadValue; return BadValue;
} }
#ifdef XACE
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) { if ((pDev->coreEvents || pDev == inputInfo.keyboard) && pDev->key) {
if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE)) if (!XaceHook(XACE_DEVICE_ACCESS, client, pDev, TRUE))
return BadAccess; return BadAccess;
} }
} }
#endif
keysyms.minKeyCode = stuff->firstKeyCode; keysyms.minKeyCode = stuff->firstKeyCode;
keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1; keysyms.maxKeyCode = stuff->firstKeyCode + stuff->keyCodes - 1;
@ -1655,7 +1649,6 @@ ProcChangeKeyboardControl (ClientPtr client)
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask)) if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
return BadLength; return BadLength;
#ifdef XACE
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) { pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
@ -1663,7 +1656,6 @@ ProcChangeKeyboardControl (ClientPtr client)
return BadAccess; return BadAccess;
} }
} }
#endif
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
if ((pDev->coreEvents || pDev == inputInfo.keyboard) && if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
@ -1848,16 +1840,16 @@ ProcGetMotionEvents(ClientPtr client)
WindowPtr pWin; WindowPtr pWin;
xTimecoord * coords = (xTimecoord *) NULL; xTimecoord * coords = (xTimecoord *) NULL;
xGetMotionEventsReply rep; xGetMotionEventsReply rep;
int i, count, xmin, xmax, ymin, ymax; int i, count, xmin, xmax, ymin, ymax, rc;
unsigned long nEvents; unsigned long nEvents;
DeviceIntPtr mouse = inputInfo.pointer; DeviceIntPtr mouse = inputInfo.pointer;
TimeStamp start, stop; TimeStamp start, stop;
REQUEST(xGetMotionEventsReq); REQUEST(xGetMotionEventsReq);
REQUEST_SIZE_MATCH(xGetMotionEventsReq); REQUEST_SIZE_MATCH(xGetMotionEventsReq);
pWin = SecurityLookupWindow(stuff->window, client, TRUE); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (mouse->valuator->motionHintWindow) if (mouse->valuator->motionHintWindow)
MaybeStopHint(mouse, client); MaybeStopHint(mouse, client);
rep.type = X_Reply; rep.type = X_Reply;
@ -1920,15 +1912,13 @@ ProcQueryKeymap(ClientPtr client)
rep.type = X_Reply; rep.type = X_Reply;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
rep.length = 2; rep.length = 2;
#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE)) if (XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
{ for (i = 0; i<32; i++)
bzero((char *)&rep.map[0], 32); rep.map[i] = down[i];
}
else else
#endif bzero((char *)&rep.map[0], 32);
for (i = 0; i<32; i++)
rep.map[i] = down[i];
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep); WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
return Success; return Success;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1178,7 +1178,7 @@ doPolyText(ClientPtr client, register PTclosurePtr c)
if (c->slept && if (c->slept &&
c->pDraw && c->pDraw &&
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
RC_DRAWABLE, SecurityWriteAccess)) RC_DRAWABLE, DixWriteAccess))
{ {
/* Our drawable has disappeared. Treat like client died... ask /* Our drawable has disappeared. Treat like client died... ask
the FPE code to clean up after client and avoid further the FPE code to clean up after client and avoid further
@ -1208,7 +1208,7 @@ doPolyText(ClientPtr client, register PTclosurePtr c)
| ((Font)*(c->pElt+2)) << 16 | ((Font)*(c->pElt+2)) << 16
| ((Font)*(c->pElt+1)) << 24; | ((Font)*(c->pElt+1)) << 24;
pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT, pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT,
SecurityReadAccess); DixReadAccess);
if (!pFont) if (!pFont)
{ {
client->errorValue = fid; client->errorValue = fid;
@ -1463,7 +1463,7 @@ doImageText(ClientPtr client, register ITclosurePtr c)
if (c->slept && if (c->slept &&
c->pDraw && c->pDraw &&
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
RC_DRAWABLE, SecurityWriteAccess)) RC_DRAWABLE, DixWriteAccess))
{ {
/* Our drawable has disappeared. Treat like client died... ask /* Our drawable has disappeared. Treat like client died... ask
the FPE code to clean up after client. */ the FPE code to clean up after client. */
@ -2016,7 +2016,7 @@ FontPtr
find_old_font(XID id) find_old_font(XID id)
{ {
return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE, return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE,
SecurityUnknownAccess); DixUnknownAccess);
} }
Font Font

View File

@ -95,9 +95,7 @@ Author: Adobe Systems Incorporated
#include "scrnintstr.h" #include "scrnintstr.h"
#define XK_LATIN1 #define XK_LATIN1
#include <X11/keysymdef.h> #include <X11/keysymdef.h>
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
/* /*
* CompareTimeStamps returns -1, 0, or +1 depending on if the first * CompareTimeStamps returns -1, 0, or +1 depending on if the first
@ -196,115 +194,144 @@ CompareISOLatin1Lowered(unsigned char *s1, int s1len,
return (int) c1 - (int) c2; return (int) c1 - (int) c2;
} }
#ifdef XACE /*
* dixLookupWindow and dixLookupDrawable:
/* SecurityLookupWindow and SecurityLookupDrawable: * Look up the window/drawable taking into account the client doing the
* Look up the window/drawable taking into account the client doing * lookup, the type of drawable desired, and the type of access desired.
* the lookup and the type of access desired. Return the window/drawable * Return Success with *pDraw set if the window/drawable exists and the client
* if it exists and the client is allowed access, else return NULL. * is allowed access, else return an error code with *pDraw set to NULL. The
* Most Proc* functions should be calling these instead of * access mask values are defined in resource.h. The type mask values are
* LookupWindow and LookupDrawable, which do no access checks. * defined in pixmap.h, with zero equivalent to M_DRAWABLE.
* XACE note: need to see if client->lastDrawableID can still be used here.
*/ */
_X_EXPORT int
_X_EXPORT WindowPtr dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
SecurityLookupWindow(XID rid, ClientPtr client, Mask access_mode) Mask type, Mask access)
{ {
client->errorValue = rid; DrawablePtr pTmp;
if(rid == INVALID) RESTYPE rtype;
return NULL; *pDraw = NULL;
return (WindowPtr)SecurityLookupIDByType(client, rid, RT_WINDOW, access_mode); client->errorValue = id;
}
if (id == INVALID)
return BadDrawable;
_X_EXPORT pointer if (id == client->lastDrawableID) {
SecurityLookupDrawable(XID rid, ClientPtr client, Mask access_mode) pTmp = client->lastDrawable;
{
register DrawablePtr pDraw;
if(rid == INVALID) /* an access check is required for cached drawables */
return (pointer) NULL; rtype = (pTmp->type | M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
pDraw = (DrawablePtr)SecurityLookupIDByClass(client, rid, RC_DRAWABLE, if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
access_mode); return BadDrawable;
if (pDraw && (pDraw->type != UNDRAWABLE_WINDOW)) } else
return (pointer)pDraw; pTmp = (DrawablePtr)SecurityLookupIDByClass(client, id, RC_DRAWABLE,
return (pointer)NULL; access);
} if (!pTmp)
return BadDrawable;
if (!((1 << pTmp->type) | (type ? type : M_DRAWABLE)))
return BadMatch;
/* We can't replace the LookupWindow and LookupDrawable functions with if (pTmp->type | M_DRAWABLE) {
* macros because of compatibility with loadable servers. client->lastDrawable = pTmp;
*/ client->lastDrawableID = id;
_X_EXPORT WindowPtr
LookupWindow(XID rid, ClientPtr client)
{
return SecurityLookupWindow(rid, client, SecurityUnknownAccess);
}
_X_EXPORT pointer
LookupDrawable(XID rid, ClientPtr client)
{
return SecurityLookupDrawable(rid, client, SecurityUnknownAccess);
}
#else /* not XACE */
WindowPtr
LookupWindow(XID rid, ClientPtr client)
{
WindowPtr pWin;
client->errorValue = rid;
if(rid == INVALID)
return NULL;
if (client->lastDrawableID == rid)
{
if (client->lastDrawable->type == DRAWABLE_WINDOW)
return ((WindowPtr) client->lastDrawable);
return (WindowPtr) NULL;
}
pWin = (WindowPtr)LookupIDByType(rid, RT_WINDOW);
if (pWin && pWin->drawable.type == DRAWABLE_WINDOW) {
client->lastDrawable = (DrawablePtr) pWin;
client->lastDrawableID = rid;
client->lastGCID = INVALID; client->lastGCID = INVALID;
client->lastGC = (GCPtr)NULL; client->lastGC = (GCPtr)NULL;
} }
return pWin; *pDraw = pTmp;
return Success;
} }
_X_EXPORT int
pointer dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access)
LookupDrawable(XID rid, ClientPtr client)
{ {
register DrawablePtr pDraw; int rc;
rc = dixLookupDrawable((DrawablePtr*)pWin, id, client, M_WINDOW, access);
if(rid == INVALID) return (rc == BadDrawable) ? BadWindow : rc;
return (pointer) NULL;
if (client->lastDrawableID == rid)
return ((pointer) client->lastDrawable);
pDraw = (DrawablePtr)LookupIDByClass(rid, RC_DRAWABLE);
if (pDraw && (pDraw->type != UNDRAWABLE_WINDOW))
return (pointer)pDraw;
return (pointer)NULL;
} }
#endif /* XACE */ _X_EXPORT int
dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access)
{
GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access);
if (pTmp) {
*pGC = pTmp;
return Success;
}
client->errorValue = id;
*pGC = NULL;
return BadGC;
}
_X_EXPORT ClientPtr _X_EXPORT int
LookupClient(XID rid, ClientPtr client) dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
{ {
pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY, pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY,
SecurityReadAccess); DixReadAccess);
int clientIndex = CLIENT_ID(rid); int clientIndex = CLIENT_ID(rid);
client->errorValue = rid;
if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT)) if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT)) {
{ *pClient = clients[clientIndex];
return clients[clientIndex]; return Success;
} }
return (ClientPtr)NULL; *pClient = NULL;
return BadValue;
} }
/*
* These are deprecated compatibility functions and will be removed soon!
* Please use the new dixLookup*() functions above.
*/
_X_EXPORT _X_DEPRECATED WindowPtr
SecurityLookupWindow(XID id, ClientPtr client, Mask access_mode)
{
WindowPtr pWin;
int i = dixLookupWindow(&pWin, id, client, access_mode);
static int warn = 1;
if (warn-- > 0)
ErrorF("Warning: LookupWindow()/SecurityLookupWindow() "
"are deprecated. Please convert your driver/module "
"to use dixLookupWindow().\n");
return (i == Success) ? pWin : NULL;
}
_X_EXPORT _X_DEPRECATED WindowPtr
LookupWindow(XID id, ClientPtr client)
{
return SecurityLookupWindow(id, client, DixUnknownAccess);
}
_X_EXPORT _X_DEPRECATED pointer
SecurityLookupDrawable(XID id, ClientPtr client, Mask access_mode)
{
DrawablePtr pDraw;
int i = dixLookupDrawable(&pDraw, id, client, M_DRAWABLE, access_mode);
static int warn = 1;
if (warn-- > 0)
ErrorF("Warning: LookupDrawable()/SecurityLookupDrawable() "
"are deprecated. Please convert your driver/module "
"to use dixLookupDrawable().\n");
return (i == Success) ? pDraw : NULL;
}
_X_EXPORT _X_DEPRECATED pointer
LookupDrawable(XID id, ClientPtr client)
{
return SecurityLookupDrawable(id, client, DixUnknownAccess);
}
_X_EXPORT _X_DEPRECATED ClientPtr
LookupClient(XID id, ClientPtr client)
{
ClientPtr pClient;
int i = dixLookupClient(&pClient, id, client, DixUnknownAccess);
static int warn = 1;
if (warn-- > 0)
ErrorF("Warning: LookupClient() is deprecated. Please convert your "
"driver/module to use dixLookupClient().\n");
return (i == Success) ? pClient : NULL;
}
/* end deprecated functions */
int int
AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode, AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,

View File

@ -137,9 +137,7 @@ of the copyright holder.
extern Bool XkbFilterEvents(ClientPtr, int, xEvent *); extern Bool XkbFilterEvents(ClientPtr, int, xEvent *);
#endif #endif
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
#ifdef XSERVER_DTRACE #ifdef XSERVER_DTRACE
#include <sys/types.h> #include <sys/types.h>
@ -2230,16 +2228,15 @@ static int
XineramaWarpPointer(ClientPtr client) XineramaWarpPointer(ClientPtr client)
{ {
WindowPtr dest = NULL; WindowPtr dest = NULL;
int x, y; int x, y, rc;
REQUEST(xWarpPointerReq); REQUEST(xWarpPointerReq);
if (stuff->dstWid != None) if (stuff->dstWid != None) {
{ rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess); if (rc != Success)
if (!dest) return rc;
return BadWindow;
} }
x = sprite.hotPhys.x; x = sprite.hotPhys.x;
y = sprite.hotPhys.y; y = sprite.hotPhys.y;
@ -2250,8 +2247,9 @@ XineramaWarpPointer(ClientPtr client)
XID winID = stuff->srcWid; XID winID = stuff->srcWid;
WindowPtr source; WindowPtr source;
source = SecurityLookupWindow(winID, client, SecurityReadAccess); rc = dixLookupWindow(&source, winID, client, DixReadAccess);
if (!source) return BadWindow; if (rc != Success)
return rc;
winX = source->drawable.x; winX = source->drawable.x;
winY = source->drawable.y; winY = source->drawable.y;
@ -2303,7 +2301,7 @@ int
ProcWarpPointer(ClientPtr client) ProcWarpPointer(ClientPtr client)
{ {
WindowPtr dest = NULL; WindowPtr dest = NULL;
int x, y; int x, y, rc;
ScreenPtr newScreen; ScreenPtr newScreen;
REQUEST(xWarpPointerReq); REQUEST(xWarpPointerReq);
@ -2315,11 +2313,10 @@ ProcWarpPointer(ClientPtr client)
return XineramaWarpPointer(client); return XineramaWarpPointer(client);
#endif #endif
if (stuff->dstWid != None) if (stuff->dstWid != None) {
{ rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess); if (rc != Success)
if (!dest) return rc;
return BadWindow;
} }
x = sprite.hotPhys.x; x = sprite.hotPhys.x;
y = sprite.hotPhys.y; y = sprite.hotPhys.y;
@ -2330,8 +2327,9 @@ ProcWarpPointer(ClientPtr client)
XID winID = stuff->srcWid; XID winID = stuff->srcWid;
WindowPtr source; WindowPtr source;
source = SecurityLookupWindow(winID, client, SecurityReadAccess); rc = dixLookupWindow(&source, winID, client, DixReadAccess);
if (!source) return BadWindow; if (rc != Success)
return rc;
winX = source->drawable.x; winX = source->drawable.x;
winY = source->drawable.y; winY = source->drawable.y;
@ -2463,10 +2461,8 @@ CheckPassiveGrabsOnWindow(
(grab->confineTo->realized && (grab->confineTo->realized &&
BorderSizeNotEmpty(grab->confineTo)))) BorderSizeNotEmpty(grab->confineTo))))
{ {
#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, wClient(pWin), device, FALSE)) if (!XaceHook(XACE_DEVICE_ACCESS, wClient(pWin), device, FALSE))
return FALSE; return FALSE;
#endif
#ifdef XKB #ifdef XKB
if (!noXkbExtension) { if (!noXkbExtension) {
XE_KBPTR.state &= 0x1f00; XE_KBPTR.state &= 0x1f00;
@ -2827,9 +2823,7 @@ drawable.id:0;
if (deactivateGrab) if (deactivateGrab)
(*keybd->DeactivateGrab)(keybd); (*keybd->DeactivateGrab)(keybd);
#ifdef XACE
XaceHook(XACE_KEY_AVAIL, xE, keybd, count); XaceHook(XACE_KEY_AVAIL, xE, keybd, count);
#endif
} }
#ifdef XKB #ifdef XKB
@ -3253,17 +3247,13 @@ EnterLeaveEvent(
if ((type == EnterNotify) && (mask & KeymapStateMask)) if ((type == EnterNotify) && (mask & KeymapStateMask))
{ {
xKeymapEvent ke; xKeymapEvent ke;
#ifdef XACE
ClientPtr client = grab ? rClient(grab) ClientPtr client = grab ? rClient(grab)
: clients[CLIENT_ID(pWin->drawable.id)]; : clients[CLIENT_ID(pWin->drawable.id)];
if (!XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE)) if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, FALSE))
{ memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
bzero((char *)&ke.map[0], 31);
}
else else
#endif bzero((char *)&ke.map[0], 31);
memmove((char *)&ke.map[0], (char *)&keybd->key->down[1], 31);
ke.type = KeymapNotify; ke.type = KeymapNotify;
if (grab) if (grab)
(void)TryClientEvents(rClient(grab), (xEvent *)&ke, 1, mask, (void)TryClientEvents(rClient(grab), (xEvent *)&ke, 1, mask,
@ -3349,15 +3339,12 @@ FocusEvent(DeviceIntPtr dev, int type, int mode, int detail, register WindowPtr
((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask)) ((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask))
{ {
xKeymapEvent ke; xKeymapEvent ke;
#ifdef XACE
ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)];
if (!XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE)) if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE))
{ memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
bzero((char *)&ke.map[0], 31);
}
else else
#endif bzero((char *)&ke.map[0], 31);
memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31);
ke.type = KeymapNotify; ke.type = KeymapNotify;
(void)DeliverEventsToWindow(pWin, (xEvent *)&ke, 1, (void)DeliverEventsToWindow(pWin, (xEvent *)&ke, 1,
KeymapStateMask, NullGrab, 0); KeymapStateMask, NullGrab, 0);
@ -3545,8 +3532,8 @@ SetInputFocus(
Bool followOK) Bool followOK)
{ {
register FocusClassPtr focus; register FocusClassPtr focus;
register WindowPtr focusWin; WindowPtr focusWin;
int mode; int mode, rc;
TimeStamp time; TimeStamp time;
UpdateCurrentTime(); UpdateCurrentTime();
@ -3563,14 +3550,12 @@ SetInputFocus(
focusWin = (WindowPtr)(long)focusID; focusWin = (WindowPtr)(long)focusID;
else if ((focusID == FollowKeyboard) && followOK) else if ((focusID == FollowKeyboard) && followOK)
focusWin = inputInfo.keyboard->focus->win; focusWin = inputInfo.keyboard->focus->win;
else if (!(focusWin = SecurityLookupWindow(focusID, client, else {
SecurityReadAccess))) rc = dixLookupWindow(&focusWin, focusID, client, DixReadAccess);
return BadWindow; if (rc != Success)
else return rc;
{
/* It is a match error to try to set the input focus to an /* It is a match error to try to set the input focus to an
unviewable window. */ unviewable window. */
if(!focusWin->realized) if(!focusWin->realized)
return(BadMatch); return(BadMatch);
} }
@ -3620,10 +3605,10 @@ ProcSetInputFocus(client)
REQUEST(xSetInputFocusReq); REQUEST(xSetInputFocusReq);
REQUEST_SIZE_MATCH(xSetInputFocusReq); REQUEST_SIZE_MATCH(xSetInputFocusReq);
#ifdef XACE
if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE)) if (!XaceHook(XACE_DEVICE_ACCESS, client, inputInfo.keyboard, TRUE))
return Success; return Success;
#endif
return SetInputFocus(client, inputInfo.keyboard, stuff->focus, return SetInputFocus(client, inputInfo.keyboard, stuff->focus,
stuff->revertTo, stuff->time, FALSE); stuff->revertTo, stuff->time, FALSE);
} }
@ -3659,6 +3644,7 @@ ProcGrabPointer(ClientPtr client)
CursorPtr cursor, oldCursor; CursorPtr cursor, oldCursor;
REQUEST(xGrabPointerReq); REQUEST(xGrabPointerReq);
TimeStamp time; TimeStamp time;
int rc;
REQUEST_SIZE_MATCH(xGrabPointerReq); REQUEST_SIZE_MATCH(xGrabPointerReq);
UpdateCurrentTime(); UpdateCurrentTime();
@ -3684,24 +3670,24 @@ ProcGrabPointer(ClientPtr client)
client->errorValue = stuff->eventMask; client->errorValue = stuff->eventMask;
return BadValue; return BadValue;
} }
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (stuff->confineTo == None) if (stuff->confineTo == None)
confineTo = NullWindow; confineTo = NullWindow;
else else
{ {
confineTo = SecurityLookupWindow(stuff->confineTo, client, rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
SecurityReadAccess); DixReadAccess);
if (!confineTo) if (rc != Success)
return BadWindow; return rc;
} }
if (stuff->cursor == None) if (stuff->cursor == None)
cursor = NullCursor; cursor = NullCursor;
else else
{ {
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
RT_CURSOR, SecurityReadAccess); RT_CURSOR, DixReadAccess);
if (!cursor) if (!cursor)
{ {
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
@ -3775,7 +3761,7 @@ ProcChangeActivePointerGrab(ClientPtr client)
else else
{ {
newCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, newCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
RT_CURSOR, SecurityReadAccess); RT_CURSOR, DixReadAccess);
if (!newCursor) if (!newCursor)
{ {
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
@ -3825,9 +3811,10 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
unsigned this_mode, unsigned other_mode, Window grabWindow, unsigned this_mode, unsigned other_mode, Window grabWindow,
unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status) unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status)
{ {
register WindowPtr pWin; WindowPtr pWin;
register GrabPtr grab; register GrabPtr grab;
TimeStamp time; TimeStamp time;
int rc;
UpdateCurrentTime(); UpdateCurrentTime();
if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync)) if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync))
@ -3845,9 +3832,9 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
client->errorValue = ownerEvents; client->errorValue = ownerEvents;
return BadValue; return BadValue;
} }
pWin = SecurityLookupWindow(grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
time = ClientTimeToServerTime(ctime); time = ClientTimeToServerTime(ctime);
grab = dev->grab; grab = dev->grab;
if (grab && !SameClient(grab, client)) if (grab && !SameClient(grab, client))
@ -3885,18 +3872,17 @@ ProcGrabKeyboard(ClientPtr client)
int result; int result;
REQUEST_SIZE_MATCH(xGrabKeyboardReq); 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; result = Success;
rep.status = AlreadyGrabbed; 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) if (result != Success)
return result; return result;
rep.type = X_Reply; rep.type = X_Reply;
@ -3932,11 +3918,12 @@ ProcQueryPointer(ClientPtr client)
WindowPtr pWin, t; WindowPtr pWin, t;
REQUEST(xResourceReq); REQUEST(xResourceReq);
DeviceIntPtr mouse = inputInfo.pointer; DeviceIntPtr mouse = inputInfo.pointer;
int rc;
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
pWin = SecurityLookupWindow(stuff->id, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (mouse->valuator->motionHintWindow) if (mouse->valuator->motionHintWindow)
MaybeStopHint(mouse, client); MaybeStopHint(mouse, client);
rep.type = X_Reply; rep.type = X_Reply;
@ -4100,8 +4087,8 @@ ProcSendEvent(ClientPtr client)
effectiveFocus = pWin = inputFocus; effectiveFocus = pWin = inputFocus;
} }
else else
pWin = SecurityLookupWindow(stuff->destination, client, dixLookupWindow(&pWin, stuff->destination, client, DixReadAccess);
SecurityReadAccess);
if (!pWin) if (!pWin)
return BadWindow; return BadWindow;
if ((stuff->propagate != xFalse) && (stuff->propagate != xTrue)) if ((stuff->propagate != xFalse) && (stuff->propagate != xTrue))
@ -4137,11 +4124,12 @@ ProcUngrabKey(ClientPtr client)
WindowPtr pWin; WindowPtr pWin;
GrabRec tempGrab; GrabRec tempGrab;
DeviceIntPtr keybd = inputInfo.keyboard; DeviceIntPtr keybd = inputInfo.keyboard;
int rc;
REQUEST_SIZE_MATCH(xUngrabKeyReq); REQUEST_SIZE_MATCH(xUngrabKeyReq);
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (((stuff->key > keybd->key->curKeySyms.maxKeyCode) || if (((stuff->key > keybd->key->curKeySyms.maxKeyCode) ||
(stuff->key < keybd->key->curKeySyms.minKeyCode)) (stuff->key < keybd->key->curKeySyms.minKeyCode))
@ -4178,6 +4166,7 @@ ProcGrabKey(ClientPtr client)
REQUEST(xGrabKeyReq); REQUEST(xGrabKeyReq);
GrabPtr grab; GrabPtr grab;
DeviceIntPtr keybd = inputInfo.keyboard; DeviceIntPtr keybd = inputInfo.keyboard;
int rc;
REQUEST_SIZE_MATCH(xGrabKeyReq); REQUEST_SIZE_MATCH(xGrabKeyReq);
if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse)) if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse))
@ -4210,9 +4199,9 @@ ProcGrabKey(ClientPtr client)
client->errorValue = stuff->modifiers; client->errorValue = stuff->modifiers;
return BadValue; return BadValue;
} }
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
grab = CreateGrab(client->index, keybd, pWin, grab = CreateGrab(client->index, keybd, pWin,
(Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents, (Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents,
@ -4232,6 +4221,7 @@ ProcGrabButton(ClientPtr client)
REQUEST(xGrabButtonReq); REQUEST(xGrabButtonReq);
CursorPtr cursor; CursorPtr cursor;
GrabPtr grab; GrabPtr grab;
int rc;
REQUEST_SIZE_MATCH(xGrabButtonReq); REQUEST_SIZE_MATCH(xGrabButtonReq);
if ((stuff->pointerMode != GrabModeSync) && if ((stuff->pointerMode != GrabModeSync) &&
@ -4262,23 +4252,23 @@ ProcGrabButton(ClientPtr client)
client->errorValue = stuff->eventMask; client->errorValue = stuff->eventMask;
return BadValue; return BadValue;
} }
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
if (stuff->confineTo == None) if (stuff->confineTo == None)
confineTo = NullWindow; confineTo = NullWindow;
else { else {
confineTo = SecurityLookupWindow(stuff->confineTo, client, rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
SecurityReadAccess); DixReadAccess);
if (!confineTo) if (rc != Success)
return BadWindow; return rc;
} }
if (stuff->cursor == None) if (stuff->cursor == None)
cursor = NullCursor; cursor = NullCursor;
else else
{ {
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
RT_CURSOR, SecurityReadAccess); RT_CURSOR, DixReadAccess);
if (!cursor) if (!cursor)
{ {
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;
@ -4303,6 +4293,7 @@ ProcUngrabButton(ClientPtr client)
REQUEST(xUngrabButtonReq); REQUEST(xUngrabButtonReq);
WindowPtr pWin; WindowPtr pWin;
GrabRec tempGrab; GrabRec tempGrab;
int rc;
REQUEST_SIZE_MATCH(xUngrabButtonReq); REQUEST_SIZE_MATCH(xUngrabButtonReq);
if ((stuff->modifiers != AnyModifier) && if ((stuff->modifiers != AnyModifier) &&
@ -4311,9 +4302,9 @@ ProcUngrabButton(ClientPtr client)
client->errorValue = stuff->modifiers; client->errorValue = stuff->modifiers;
return BadValue; return BadValue;
} }
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess); rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
tempGrab.resource = client->clientAsMask; tempGrab.resource = client->clientAsMask;
tempGrab.device = inputInfo.pointer; tempGrab.device = inputInfo.pointer;
tempGrab.window = pWin; tempGrab.window = pWin;
@ -4465,7 +4456,7 @@ ProcRecolorCursor(ClientPtr client)
REQUEST_SIZE_MATCH(xRecolorCursorReq); REQUEST_SIZE_MATCH(xRecolorCursorReq);
pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
RT_CURSOR, SecurityWriteAccess); RT_CURSOR, DixWriteAccess);
if ( !pCursor) if ( !pCursor)
{ {
client->errorValue = stuff->cursor; client->errorValue = stuff->cursor;

View File

@ -59,9 +59,7 @@ SOFTWARE.
#include "gcstruct.h" #include "gcstruct.h"
#include "scrnintstr.h" #include "scrnintstr.h"
#include "dispatch.h" #include "dispatch.h"
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
#define EXTENSION_BASE 128 #define EXTENSION_BASE 128
#define EXTENSION_EVENT_BASE 64 #define EXTENSION_EVENT_BASE 64
@ -256,11 +254,9 @@ GetExtensionEntry(int major)
_X_EXPORT void _X_EXPORT void
DeclareExtensionSecurity(char *extname, Bool secure) DeclareExtensionSecurity(char *extname, Bool secure)
{ {
#ifdef XACE
int i = FindExtension(extname, strlen(extname)); int i = FindExtension(extname, strlen(extname));
if (i >= 0) if (i >= 0)
XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure); XaceHook(XACE_DECLARE_EXT_SECURE, extensions[i], secure);
#endif
} }
_X_EXPORT unsigned short _X_EXPORT unsigned short
@ -336,12 +332,7 @@ ProcQueryExtension(ClientPtr client)
else else
{ {
i = FindExtension((char *)&stuff[1], stuff->nbytes); i = FindExtension((char *)&stuff[1], stuff->nbytes);
if (i < 0 if (i < 0 || !XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
#ifdef XACE
/* call callbacks to find out whether to show extension */
|| !XaceHook(XACE_EXT_ACCESS, client, extensions[i])
#endif
)
reply.present = xFalse; reply.present = xFalse;
else else
{ {
@ -376,11 +367,10 @@ ProcListExtensions(ClientPtr client)
for (i=0; i<NumExtensions; i++) for (i=0; i<NumExtensions; i++)
{ {
#ifdef XACE
/* call callbacks to find out whether to show extension */ /* call callbacks to find out whether to show extension */
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i])) if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
continue; continue;
#endif
total_length += strlen(extensions[i]->name) + 1; total_length += strlen(extensions[i]->name) + 1;
reply.nExtensions += 1 + extensions[i]->num_aliases; reply.nExtensions += 1 + extensions[i]->num_aliases;
for (j = extensions[i]->num_aliases; --j >= 0;) for (j = extensions[i]->num_aliases; --j >= 0;)
@ -393,10 +383,9 @@ ProcListExtensions(ClientPtr client)
for (i=0; i<NumExtensions; i++) for (i=0; i<NumExtensions; i++)
{ {
int len; int len;
#ifdef XACE
if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i])) if (!XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
continue; continue;
#endif
*bufptr++ = len = strlen(extensions[i]->name); *bufptr++ = len = strlen(extensions[i]->name);
memmove(bufptr, extensions[i]->name, len); memmove(bufptr, extensions[i]->name, len);
bufptr += len; bufptr += len;

View File

@ -271,7 +271,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
{ {
NEXTVAL(XID, newpix); NEXTVAL(XID, newpix);
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
newpix, RT_PIXMAP, SecurityReadAccess); newpix, RT_PIXMAP, DixReadAccess);
} }
if (pPixmap) if (pPixmap)
{ {
@ -307,7 +307,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
{ {
NEXTVAL(XID, newstipple) NEXTVAL(XID, newstipple)
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
newstipple, RT_PIXMAP, SecurityReadAccess); newstipple, RT_PIXMAP, DixReadAccess);
} }
if (pPixmap) if (pPixmap)
{ {
@ -349,7 +349,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
{ {
NEXTVAL(XID, newfont) NEXTVAL(XID, newfont)
pFont = (FontPtr)SecurityLookupIDByType(client, newfont, pFont = (FontPtr)SecurityLookupIDByType(client, newfont,
RT_FONT, SecurityReadAccess); RT_FONT, DixReadAccess);
} }
if (pFont) if (pFont)
{ {
@ -416,7 +416,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
} }
else else
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
pid, RT_PIXMAP, SecurityReadAccess); pid, RT_PIXMAP, DixReadAccess);
} }
if (pPixmap) if (pPixmap)

View File

@ -39,6 +39,7 @@
#include "cursorstr.h" #include "cursorstr.h"
#include "dixstruct.h" #include "dixstruct.h"
#include "globals.h" #include "globals.h"
#include "dixevents.h"
#include "mipointer.h" #include "mipointer.h"
#ifdef XKB #ifdef XKB
@ -47,10 +48,6 @@
extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies); extern Bool XkbCopyKeymap(XkbDescPtr src, XkbDescPtr dst, Bool sendNotifies);
#endif #endif
#ifdef XACE
#include "xace.h"
#endif
#ifdef PANORAMIX #ifdef PANORAMIX
#include "panoramiX.h" #include "panoramiX.h"
#include "panoramiXsrv.h" #include "panoramiXsrv.h"
@ -487,6 +484,8 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
int num_events = 0, final_valuator = 0; int num_events = 0, final_valuator = 0;
CARD32 ms = 0; CARD32 ms = 0;
deviceKeyButtonPointer *kbp = NULL; deviceKeyButtonPointer *kbp = NULL;
/* Thanks to a broken lib, we _always_ have to chase DeviceMotionNotifies
* with DeviceValuators. */
Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE); Bool sendValuators = (type == MotionNotify || flags & POINTER_ABSOLUTE);
DeviceIntPtr pointer = NULL; DeviceIntPtr pointer = NULL;
int x = 0, y = 0; int x = 0, y = 0;
@ -503,15 +502,16 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
else else
num_events = 1; num_events = 1;
if (type == MotionNotify && num_valuators <= 0) {
return 0;
}
/* Do we need to send a DeviceValuator event? */ /* 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) if ((((num_valuators - 1) / 6) + 1) > MAX_VALUATOR_EVENTS)
num_valuators = MAX_VALUATOR_EVENTS * 6; num_valuators = MAX_VALUATOR_EVENTS * 6;
num_events += ((num_valuators - 1) / 6) + 1; num_events += ((num_valuators - 1) / 6) + 1;
} }
else if (type == MotionNotify && num_valuators <= 0) {
return 0;
}
final_valuator = num_valuators + first_valuator; final_valuator = num_valuators + first_valuator;
@ -604,7 +604,7 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
kbp->root_y = y; kbp->root_y = y;
events++; events++;
if (final_valuator > 2 && sendValuators) { if (sendValuators) {
kbp->deviceid |= MORE_EVENTS; kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators); clipValuators(pDev, first_valuator, num_valuators, valuators);
events = getValuatorEvents(events, pDev, first_valuator, events = getValuatorEvents(events, pDev, first_valuator,
@ -748,7 +748,7 @@ SwitchCorePointer(DeviceIntPtr pDev)
* to shift the pointer to get it inside the new bounds. * to shift the pointer to get it inside the new bounds.
*/ */
void void
PostSyntheticMotion(int x, int y, int screenNum, unsigned long time) PostSyntheticMotion(int x, int y, ScreenPtr pScreen, unsigned long time)
{ {
xEvent xE; xEvent xE;
@ -757,8 +757,8 @@ PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
will translate from sprite screen to screen 0 upon reentry will translate from sprite screen to screen 0 upon reentry
to the DIX layer. */ to the DIX layer. */
if (!noPanoramiXExtension) { if (!noPanoramiXExtension) {
x += panoramiXdataPtr[0].x - panoramiXdataPtr[screenNum].x; x += panoramiXdataPtr[0].x - panoramiXdataPtr[pScreen->myNum].x;
y += panoramiXdataPtr[0].y - panoramiXdataPtr[screenNum].y; y += panoramiXdataPtr[0].y - panoramiXdataPtr[pScreen->myNum].y;
} }
#endif #endif
@ -766,6 +766,7 @@ PostSyntheticMotion(int x, int y, int screenNum, unsigned long time)
xE.u.u.type = MotionNotify; xE.u.u.type = MotionNotify;
xE.u.keyButtonPointer.rootX = x; xE.u.keyButtonPointer.rootX = x;
xE.u.keyButtonPointer.rootY = y; xE.u.keyButtonPointer.rootY = y;
xE.u.keyButtonPointer.time = time;
(*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1); (*inputInfo.pointer->public.processInputProc)(&xE, inputInfo.pointer, 1);
} }

View File

@ -98,7 +98,7 @@ Equipment Corporation.
#include <X11/fonts/font.h> #include <X11/fonts/font.h>
#include "opaque.h" #include "opaque.h"
#include "servermd.h" #include "servermd.h"
#include "config.h" #include "hotplug.h"
#include "site.h" #include "site.h"
#include "dixfont.h" #include "dixfont.h"
#include "extnsionst.h" #include "extnsionst.h"
@ -309,9 +309,9 @@ main(int argc, char *argv[], char *envp[])
DPMSPowerLevel = 0; DPMSPowerLevel = 0;
#endif #endif
InitBlockAndWakeupHandlers(); InitBlockAndWakeupHandlers();
configInitialise();
/* Perform any operating system dependent initializations you'd like */ /* Perform any operating system dependent initializations you'd like */
OsInit(); OsInit();
configInitialise();
if(serverGeneration == 1) if(serverGeneration == 1)
{ {
CreateWellKnownSockets(); CreateWellKnownSockets();
@ -414,21 +414,24 @@ main(int argc, char *argv[], char *envp[])
ErrorF("failed to set default font path '%s'", ErrorF("failed to set default font path '%s'",
defaultFontPath); defaultFontPath);
} }
if (!SetDefaultFont(defaultTextFont)) if (!SetDefaultFont(defaultTextFont)) {
FatalError("could not open default font '%s'", defaultTextFont); FatalError("could not open default font '%s'", defaultTextFont);
}
#ifdef NULL_ROOT_CURSOR #ifdef NULL_ROOT_CURSOR
cm.width = 0; cm.width = 0;
cm.height = 0; cm.height = 0;
cm.xhot = 0; cm.xhot = 0;
cm.yhot = 0; cm.yhot = 0;
if (!(rootCursor = AllocCursor(NULL, NULL, &cm, 0, 0, 0, 0, 0, 0))) if (!(rootCursor = AllocCursor(NULL, NULL, &cm, 0, 0, 0, 0, 0, 0))) {
FatalError("could not create empty root cursor"); FatalError("could not create empty root cursor");
}
AddResource(FakeClientID(0), RT_CURSOR, (pointer)rootCursor); AddResource(FakeClientID(0), RT_CURSOR, (pointer)rootCursor);
#else #else
if (!(rootCursor = CreateRootCursor(defaultCursorFont, 0))) if (!(rootCursor = CreateRootCursor(defaultCursorFont, 0))) {
FatalError("could not open default cursor font '%s'", FatalError("could not open default cursor font '%s'",
defaultCursorFont); defaultCursorFont);
}
#endif #endif
#ifdef DPMSExtension #ifdef DPMSExtension
/* check all screens, looking for DPMS Capabilities */ /* check all screens, looking for DPMS Capabilities */
@ -452,13 +455,15 @@ main(int argc, char *argv[], char *envp[])
#ifdef PANORAMIX #ifdef PANORAMIX
if (!noPanoramiXExtension) { if (!noPanoramiXExtension) {
if (!PanoramiXCreateConnectionBlock()) if (!PanoramiXCreateConnectionBlock()) {
FatalError("could not create connection block info"); FatalError("could not create connection block info");
}
} else } else
#endif #endif
{ {
if (!CreateConnectionBlock()) if (!CreateConnectionBlock()) {
FatalError("could not create connection block info"); FatalError("could not create connection block info");
}
} }
Dispatch(); Dispatch();

View File

@ -58,9 +58,7 @@ SOFTWARE.
#include "dixstruct.h" #include "dixstruct.h"
#include "dispatch.h" #include "dispatch.h"
#include "swaprep.h" #include "swaprep.h"
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
/***************************************************************** /*****************************************************************
* Property Stuff * Property Stuff
@ -96,7 +94,7 @@ PrintPropertys(WindowPtr pWin)
int int
ProcRotateProperties(ClientPtr client) ProcRotateProperties(ClientPtr client)
{ {
int i, j, delta; int i, j, delta, rc;
REQUEST(xRotatePropertiesReq); REQUEST(xRotatePropertiesReq);
WindowPtr pWin; WindowPtr pWin;
register Atom * atoms; register Atom * atoms;
@ -106,10 +104,9 @@ ProcRotateProperties(ClientPtr client)
REQUEST_FIXED_SIZE(xRotatePropertiesReq, stuff->nAtoms << 2); REQUEST_FIXED_SIZE(xRotatePropertiesReq, stuff->nAtoms << 2);
UpdateCurrentTime(); UpdateCurrentTime();
pWin = (WindowPtr) SecurityLookupWindow(stuff->window, client, rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
SecurityWriteAccess); if (rc != Success)
if (!pWin) return rc;
return(BadWindow);
if (!stuff->nAtoms) if (!stuff->nAtoms)
return(Success); return(Success);
atoms = (Atom *) & stuff[1]; atoms = (Atom *) & stuff[1];
@ -118,27 +115,19 @@ ProcRotateProperties(ClientPtr client)
return(BadAlloc); return(BadAlloc);
for (i = 0; i < stuff->nAtoms; i++) for (i = 0; i < stuff->nAtoms; i++)
{ {
#ifdef XACE
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i], char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
SecurityReadAccess|SecurityWriteAccess); DixReadAccess|DixWriteAccess);
#endif
if (!ValidAtom(atoms[i]) if (!ValidAtom(atoms[i]) || (XaceErrorOperation == action)) {
#ifdef XACE
|| (SecurityErrorOperation == action)
#endif
)
{
DEALLOCATE_LOCAL(props); DEALLOCATE_LOCAL(props);
client->errorValue = atoms[i]; client->errorValue = atoms[i];
return BadAtom; return BadAtom;
} }
#ifdef XACE if (XaceIgnoreOperation == action) {
if (SecurityIgnoreOperation == action)
{
DEALLOCATE_LOCAL(props); DEALLOCATE_LOCAL(props);
return Success; return Success;
} }
#endif
for (j = i + 1; j < stuff->nAtoms; j++) for (j = i + 1; j < stuff->nAtoms; j++)
if (atoms[j] == atoms[i]) if (atoms[j] == atoms[i])
{ {
@ -191,9 +180,7 @@ ProcChangeProperty(ClientPtr client)
WindowPtr pWin; WindowPtr pWin;
char format, mode; char format, mode;
unsigned long len; unsigned long len;
int sizeInBytes; int sizeInBytes, totalSize, err;
int totalSize;
int err;
REQUEST(xChangePropertyReq); REQUEST(xChangePropertyReq);
REQUEST_AT_LEAST_SIZE(xChangePropertyReq); REQUEST_AT_LEAST_SIZE(xChangePropertyReq);
@ -218,10 +205,9 @@ ProcChangeProperty(ClientPtr client)
totalSize = len * sizeInBytes; totalSize = len * sizeInBytes;
REQUEST_FIXED_SIZE(xChangePropertyReq, totalSize); REQUEST_FIXED_SIZE(xChangePropertyReq, totalSize);
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client, err = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
SecurityWriteAccess); if (err != Success)
if (!pWin) return err;
return(BadWindow);
if (!ValidAtom(stuff->property)) if (!ValidAtom(stuff->property))
{ {
client->errorValue = stuff->property; client->errorValue = stuff->property;
@ -233,17 +219,15 @@ ProcChangeProperty(ClientPtr client)
return(BadAtom); return(BadAtom);
} }
#ifdef XACE
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property, switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
SecurityWriteAccess)) DixWriteAccess))
{ {
case SecurityErrorOperation: case XaceErrorOperation:
client->errorValue = stuff->property; client->errorValue = stuff->property;
return BadAtom; return BadAtom;
case SecurityIgnoreOperation: case XaceIgnoreOperation:
return Success; return Success;
} }
#endif
err = ChangeWindowProperty(pWin, stuff->property, stuff->type, (int)format, err = ChangeWindowProperty(pWin, stuff->property, stuff->type, (int)format,
(int)mode, len, (pointer)&stuff[1], TRUE); (int)mode, len, (pointer)&stuff[1], TRUE);
@ -457,18 +441,18 @@ int
ProcGetProperty(ClientPtr client) ProcGetProperty(ClientPtr client)
{ {
PropertyPtr pProp, prevProp; PropertyPtr pProp, prevProp;
unsigned long n, len, ind; unsigned long n, len, ind, rc;
WindowPtr pWin; WindowPtr pWin;
xGetPropertyReply reply; xGetPropertyReply reply;
Mask access_mode = DixReadAccess;
REQUEST(xGetPropertyReq); REQUEST(xGetPropertyReq);
REQUEST_SIZE_MATCH(xGetPropertyReq); REQUEST_SIZE_MATCH(xGetPropertyReq);
if (stuff->delete) if (stuff->delete)
UpdateCurrentTime(); UpdateCurrentTime();
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client, rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
SecurityReadAccess); if (rc != Success)
if (!pWin) return rc;
return BadWindow;
if (!ValidAtom(stuff->property)) if (!ValidAtom(stuff->property))
{ {
@ -501,24 +485,18 @@ ProcGetProperty(ClientPtr client)
if (!pProp) if (!pProp)
return NullPropertyReply(client, None, 0, &reply); return NullPropertyReply(client, None, 0, &reply);
#ifdef XACE if (stuff->delete)
access_mode |= DixDestroyAccess;
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
access_mode))
{ {
Mask access_mode = SecurityReadAccess; case XaceErrorOperation:
client->errorValue = stuff->property;
if (stuff->delete) return BadAtom;;
access_mode |= SecurityDestroyAccess; case XaceIgnoreOperation:
switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property, return NullPropertyReply(client, pProp->type, pProp->format, &reply);
access_mode))
{
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 /* If the request type and actual type don't match. Return the
property information, but not the data. */ property information, but not the data. */
@ -602,16 +580,15 @@ ProcListProperties(ClientPtr client)
{ {
Atom *pAtoms = NULL, *temppAtoms; Atom *pAtoms = NULL, *temppAtoms;
xListPropertiesReply xlpr; xListPropertiesReply xlpr;
int numProps = 0; int rc, numProps = 0;
WindowPtr pWin; WindowPtr pWin;
PropertyPtr pProp; PropertyPtr pProp;
REQUEST(xResourceReq); REQUEST(xResourceReq);
REQUEST_SIZE_MATCH(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq);
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client, rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
SecurityReadAccess); if (rc != Success)
if (!pWin) return rc;
return(BadWindow);
pProp = wUserProps (pWin); pProp = wUserProps (pWin);
while (pProp) while (pProp)
@ -653,27 +630,24 @@ ProcDeleteProperty(register ClientPtr client)
REQUEST_SIZE_MATCH(xDeletePropertyReq); REQUEST_SIZE_MATCH(xDeletePropertyReq);
UpdateCurrentTime(); UpdateCurrentTime();
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client, result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
SecurityWriteAccess); if (result != Success)
if (!pWin) return result;
return(BadWindow);
if (!ValidAtom(stuff->property)) if (!ValidAtom(stuff->property))
{ {
client->errorValue = stuff->property; client->errorValue = stuff->property;
return (BadAtom); return (BadAtom);
} }
#ifdef XACE switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
switch(XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property, DixDestroyAccess))
SecurityDestroyAccess))
{ {
case SecurityErrorOperation: case XaceErrorOperation:
client->errorValue = stuff->property; client->errorValue = stuff->property;
return BadAtom;; return BadAtom;;
case SecurityIgnoreOperation: case XaceIgnoreOperation:
return Success; return Success;
} }
#endif
result = DeleteProperty(pWin, stuff->property); result = DeleteProperty(pWin, stuff->property);
if (client->noClientException != Success) if (client->noClientException != Success)

View File

@ -148,9 +148,7 @@ Equipment Corporation.
#include "panoramiX.h" #include "panoramiX.h"
#include "panoramiXsrv.h" #include "panoramiXsrv.h"
#endif #endif
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
#include <assert.h> #include <assert.h>
#ifdef XSERVER_DTRACE #ifdef XSERVER_DTRACE
@ -904,11 +902,10 @@ SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype, Mask mode)
break; break;
} }
} }
#ifdef XACE
if (retval && client && if (retval && client &&
!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval)) !XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, mode, retval))
retval = NULL; retval = NULL;
#endif
return retval; return retval;
} }
@ -932,11 +929,10 @@ SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, Mask mode)
break; break;
} }
} }
#ifdef XACE
if (retval && client && if (retval && client &&
!XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval)) !XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type, mode, retval))
retval = NULL; retval = NULL;
#endif
return retval; return retval;
} }
@ -948,12 +944,12 @@ _X_EXPORT pointer
LookupIDByType(XID id, RESTYPE rtype) LookupIDByType(XID id, RESTYPE rtype)
{ {
return SecurityLookupIDByType(NullClient, id, rtype, return SecurityLookupIDByType(NullClient, id, rtype,
SecurityUnknownAccess); DixUnknownAccess);
} }
_X_EXPORT pointer _X_EXPORT pointer
LookupIDByClass(XID id, RESTYPE classes) LookupIDByClass(XID id, RESTYPE classes)
{ {
return SecurityLookupIDByClass(NullClient, id, classes, return SecurityLookupIDByClass(NullClient, id, classes,
SecurityUnknownAccess); DixUnknownAccess);
} }

View File

@ -126,9 +126,7 @@ Equipment Corporation.
#ifdef XAPPGROUP #ifdef XAPPGROUP
#include "appgroup.h" #include "appgroup.h"
#endif #endif
#ifdef XACE
#include "xace.h" #include "xace.h"
#endif
/****** /******
* Window stuff for server * Window stuff for server
@ -531,9 +529,7 @@ InitRootWindow(WindowPtr pWin)
/* We SHOULD check for an error value here XXX */ /* We SHOULD check for an error value here XXX */
(*pScreen->ChangeWindowAttributes)(pWin, backFlag); (*pScreen->ChangeWindowAttributes)(pWin, backFlag);
#ifdef XACE
XaceHook(XACE_WINDOW_INIT, serverClient, pWin); XaceHook(XACE_WINDOW_INIT, serverClient, pWin);
#endif
MapWindow(pWin, serverClient); MapWindow(pWin, serverClient);
} }
@ -738,18 +734,16 @@ CreateWindow(Window wid, register WindowPtr pParent, int x, int y, unsigned w,
} }
pWin->borderWidth = bw; pWin->borderWidth = bw;
#ifdef XACE
/* can't let untrusted clients have background None windows; /* can't let untrusted clients have background None windows;
* they make it too easy to steal window contents * 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->backgroundState = BackgroundPixel;
pWin->background.pixel = 0; pWin->background.pixel = 0;
} }
else
#endif
pWin->backgroundState = None;
pWin->borderIsPixel = pParent->borderIsPixel; pWin->borderIsPixel = pParent->borderIsPixel;
pWin->border = pParent->border; pWin->border = pParent->border;
@ -769,9 +763,7 @@ CreateWindow(Window wid, register WindowPtr pParent, int x, int y, unsigned w,
REGION_NULL(pScreen, &pWin->winSize); REGION_NULL(pScreen, &pWin->winSize);
REGION_NULL(pScreen, &pWin->borderSize); REGION_NULL(pScreen, &pWin->borderSize);
#ifdef XACE
XaceHook(XACE_WINDOW_INIT, client, pWin); XaceHook(XACE_WINDOW_INIT, client, pWin);
#endif
pHead = RealChildHead(pParent); pHead = RealChildHead(pParent);
if (pHead) if (pHead)
@ -1036,24 +1028,18 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
borderRelative = TRUE; borderRelative = TRUE;
if (pixID == None) if (pixID == None)
{ {
#ifdef XACE
/* can't let untrusted clients have background None windows */ /* can't let untrusted clients have background None windows */
if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin)) if (XaceHook(XACE_BACKGRND_ACCESS, client, pWin)) {
{ if (pWin->backgroundState == BackgroundPixmap)
#endif (*pScreen->DestroyPixmap)(pWin->background.pixmap);
if (pWin->backgroundState == BackgroundPixmap) if (!pWin->parent)
(*pScreen->DestroyPixmap)(pWin->background.pixmap); MakeRootTile(pWin);
if (!pWin->parent) else
MakeRootTile(pWin); pWin->backgroundState = None;
else } else {
pWin->backgroundState = None; /* didn't change the backgrnd to None, so don't tell ddx */
#ifdef XACE
}
else
{ /* didn't change the background to None, so don't tell ddx */
index2 = 0; index2 = 0;
} }
#endif
} }
else if (pixID == ParentRelative) else if (pixID == ParentRelative)
{ {
@ -1076,7 +1062,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
else else
{ {
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID, pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
RT_PIXMAP, SecurityReadAccess); RT_PIXMAP, DixReadAccess);
if (pPixmap != (PixmapPtr) NULL) if (pPixmap != (PixmapPtr) NULL)
{ {
if ((pPixmap->drawable.depth != pWin->drawable.depth) || if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
@ -1137,7 +1123,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
else else
{ {
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID, pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
RT_PIXMAP, SecurityReadAccess); RT_PIXMAP, DixReadAccess);
if (pPixmap) if (pPixmap)
{ {
if ((pPixmap->drawable.depth != pWin->drawable.depth) || if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
@ -1347,7 +1333,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
goto PatchUp; goto PatchUp;
} }
pCmap = (ColormapPtr)SecurityLookupIDByType(client, cmap, pCmap = (ColormapPtr)SecurityLookupIDByType(client, cmap,
RT_COLORMAP, SecurityReadAccess); RT_COLORMAP, DixReadAccess);
if (!pCmap) if (!pCmap)
{ {
error = BadColor; error = BadColor;
@ -1423,7 +1409,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
else else
{ {
pCursor = (CursorPtr)SecurityLookupIDByType(client, cursorID, pCursor = (CursorPtr)SecurityLookupIDByType(client, cursorID,
RT_CURSOR, SecurityReadAccess); RT_CURSOR, DixReadAccess);
if (!pCursor) if (!pCursor)
{ {
error = BadCursor; error = BadCursor;
@ -2313,7 +2299,7 @@ ConfigureWindow(register WindowPtr pWin, register Mask mask, XID *vlist, ClientP
sibwid = (Window ) *pVlist; sibwid = (Window ) *pVlist;
pVlist++; pVlist++;
pSib = (WindowPtr )SecurityLookupIDByType(client, sibwid, pSib = (WindowPtr )SecurityLookupIDByType(client, sibwid,
RT_WINDOW, SecurityReadAccess); RT_WINDOW, DixReadAccess);
if (!pSib) if (!pSib)
{ {
client->errorValue = sibwid; client->errorValue = sibwid;
@ -2739,11 +2725,9 @@ MapWindow(register WindowPtr pWin, ClientPtr client)
if (pWin->mapped) if (pWin->mapped)
return(Success); return(Success);
#ifdef XACE
/* general check for permission to map window */ /* general check for permission to map window */
if (!XaceHook(XACE_MAP_ACCESS, client, pWin)) if (!XaceHook(XACE_MAP_ACCESS, client, pWin))
return Success; return Success;
#endif
pScreen = pWin->drawable.pScreen; pScreen = pWin->drawable.pScreen;
if ( (pParent = pWin->parent) ) if ( (pParent = pWin->parent) )

View File

@ -159,6 +159,14 @@ default state is platform and configuration specific.
disables DPMS (display power management services). The default state disables DPMS (display power management services). The default state
is platform and configuration specific. is platform and configuration specific.
.TP 8 .TP 8
.BI \-extension extensionName
disables named extension. If an unknown extension name is specified,
a list of accepted extension names is printed.
.TP 8
.BI \+extension extensionName
enables named extension. If an unknown extension name is specified,
a list of accepted extension names is printed.
.TP 8
.B \-f \fIvolume\fP .B \-f \fIvolume\fP
sets feep (bell) volume (allowable range: 0-100). sets feep (bell) volume (allowable range: 0-100).
.TP 8 .TP 8

View File

@ -1341,6 +1341,9 @@ fbCreateDefColormap(ScreenPtr pScreen);
void void
fbClearVisualTypes(void); fbClearVisualTypes(void);
Bool
fbHasVisualTypes (int depth);
Bool Bool
fbSetVisualTypes (int depth, int visuals, int bitsPerRGB); fbSetVisualTypes (int depth, int visuals, int bitsPerRGB);

View File

@ -268,7 +268,7 @@ ProcAppleWMSelectInput (client)
REQUEST_SIZE_MATCH (xAppleWMSelectInputReq); REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
pHead = (WMEventPtr *)SecurityLookupIDByType(client, pHead = (WMEventPtr *)SecurityLookupIDByType(client,
eventResource, EventType, SecurityWriteAccess); eventResource, EventType, DixWriteAccess);
if (stuff->mask != 0) { if (stuff->mask != 0) {
if (pHead) { if (pHead) {
/* check for existing entry. */ /* check for existing entry. */
@ -490,11 +490,9 @@ ProcAppleWMSetWindowLevel(
REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq); REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq);
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window, if (Success != dixLookupWindow(&pWin, stuff->window, client,
client, SecurityReadAccess))) DixReadAccess))
{
return BadValue; return BadValue;
}
if (stuff->level < 0 || stuff->level >= AppleWMNumWindowLevels) { if (stuff->level < 0 || stuff->level >= AppleWMNumWindowLevels) {
return BadValue; return BadValue;
@ -602,11 +600,9 @@ ProcAppleWMFrameDraw(
REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq); REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq);
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window, if (Success != dixLookupWindow(&pWin, stuff->window, client,
client, SecurityReadAccess))) DixReadAccess))
{
return BadValue; return BadValue;
}
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih); ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh); or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);

View File

@ -170,12 +170,13 @@ static int ProcPseudoramiXGetState(ClientPtr client)
REQUEST(xPanoramiXGetStateReq); REQUEST(xPanoramiXGetStateReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetStateReply rep; xPanoramiXGetStateReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq); REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -196,12 +197,13 @@ static int ProcPseudoramiXGetScreenCount(ClientPtr client)
REQUEST(xPanoramiXGetScreenCountReq); REQUEST(xPanoramiXGetScreenCountReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetScreenCountReply rep; xPanoramiXGetScreenCountReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -222,12 +224,13 @@ static int ProcPseudoramiXGetScreenSize(ClientPtr client)
REQUEST(xPanoramiXGetScreenSizeReq); REQUEST(xPanoramiXGetScreenSizeReq);
WindowPtr pWin; WindowPtr pWin;
xPanoramiXGetScreenSizeReply rep; xPanoramiXGetScreenSizeReply rep;
register int n; register int n, rc;
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
pWin = LookupWindow (stuff->window, client); rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
if (!pWin) if (rc != Success)
return BadWindow; return rc;
rep.type = X_Reply; rep.type = X_Reply;
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;

View File

@ -213,6 +213,7 @@ ProcAppleDRICreateSurface(
DrawablePtr pDrawable; DrawablePtr pDrawable;
xp_surface_id sid; xp_surface_id sid;
unsigned int key[2]; unsigned int key[2];
int rc;
REQUEST(xAppleDRICreateSurfaceReq); REQUEST(xAppleDRICreateSurfaceReq);
REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq); REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq);
@ -220,12 +221,10 @@ ProcAppleDRICreateSurface(
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
(Drawable)stuff->drawable, DixReadAccess);
client, if (rc != Success)
SecurityReadAccess))) { return rc;
return BadValue;
}
rep.key_0 = rep.key_1 = rep.uid = 0; rep.key_0 = rep.key_1 = rep.uid = 0;
@ -252,13 +251,12 @@ ProcAppleDRIDestroySurface(
REQUEST(xAppleDRIDestroySurfaceReq); REQUEST(xAppleDRIDestroySurfaceReq);
DrawablePtr pDrawable; DrawablePtr pDrawable;
REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq); REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
int rc;
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
(Drawable)stuff->drawable, DixReadAccess);
client, if (rc != Success)
SecurityReadAccess))) { return rc;
return BadValue;
}
if (!DRIDestroySurface( screenInfo.screens[stuff->screen], if (!DRIDestroySurface( screenInfo.screens[stuff->screen],
(Drawable)stuff->drawable, (Drawable)stuff->drawable,

View File

@ -27,7 +27,7 @@ endif
AM_YFLAGS = -d AM_YFLAGS = -d
AM_CFLAGS = \ AM_CFLAGS = \
\ $(DIX_CFLAGS) \
-I$(top_srcdir)/hw/dmx \ -I$(top_srcdir)/hw/dmx \
$(GLX_INCS) \ $(GLX_INCS) \
-DHAVE_DMX_CONFIG_H \ -DHAVE_DMX_CONFIG_H \

View File

@ -282,12 +282,12 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
int i; int i;
if (!(win = SecurityLookupIDByType(client, stuff->window, XRT_WINDOW, if (!(win = SecurityLookupIDByType(client, stuff->window, XRT_WINDOW,
SecurityReadAccess))) DixReadAccess)))
return -1; /* BadWindow */ return -1; /* BadWindow */
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
if (!(pWin = SecurityLookupWindow(win->info[i].id, client, if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
SecurityReadAccess))) DixReadAccess))
return -1; /* BadWindow */ return -1; /* BadWindow */
dmxForceWindowCreation(pWin); dmxForceWindowCreation(pWin);
@ -296,8 +296,8 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
} }
#endif #endif
if (!(pWin = SecurityLookupWindow(stuff->window, client, if (Success != dixLookupWindow(&pWin, stuff->window, client,
SecurityReadAccess))) DixReadAccess))
return -1; /* BadWindow */ return -1; /* BadWindow */
dmxForceWindowCreation(pWin); dmxForceWindowCreation(pWin);
@ -556,12 +556,12 @@ static int dmxPopulatePanoramiX(ClientPtr client, Window window,
DMXWindowAttributesRec attr; DMXWindowAttributesRec attr;
if (!(win = SecurityLookupIDByType(client, window, XRT_WINDOW, if (!(win = SecurityLookupIDByType(client, window, XRT_WINDOW,
SecurityReadAccess))) DixReadAccess)))
return -1; /* BadWindow */ return -1; /* BadWindow */
FOR_NSCREENS(i) { FOR_NSCREENS(i) {
if (!(pWin = SecurityLookupWindow(win->info[i].id, client, if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
SecurityReadAccess))) DixReadAccess))
return -1; /* BadWindow */ return -1; /* BadWindow */
if (dmxGetWindowAttributes(pWin, &attr)) { if (dmxGetWindowAttributes(pWin, &attr)) {
screens[count] = attr.screen; screens[count] = attr.screen;
@ -587,7 +587,7 @@ static int dmxPopulate(ClientPtr client, Window window, CARD32 *screens,
pos, vis); pos, vis);
#endif #endif
if (!(pWin = SecurityLookupWindow(window, client, SecurityReadAccess))) if (Success != dixLookupWindow(&pWin, window, client, DixReadAccess))
return -1; /* BadWindow */ return -1; /* BadWindow */
dmxGetWindowAttributes(pWin, &attr); dmxGetWindowAttributes(pWin, &attr);

View File

@ -1056,6 +1056,116 @@ static Bool dmxCompareScreens(DMXScreenInfo *new, DMXScreenInfo *old)
return TRUE; return TRUE;
} }
#ifdef RENDER
/** Restore Render's picture */
static void dmxBERestoreRenderPict(pointer value, XID id, pointer n)
{
PicturePtr pPicture = value; /* The picture */
DrawablePtr pDraw = pPicture->pDrawable; /* The picture's drawable */
int scrnNum = (int)n;
if (pDraw->pScreen->myNum != scrnNum) {
/* Picture not on the screen we are restoring*/
return;
}
if (pDraw->type == DRAWABLE_PIXMAP) {
PixmapPtr pPixmap = (PixmapPtr)pDraw;
/* Create and restore the pixmap drawable */
dmxBECreatePixmap(pPixmap);
dmxBERestorePixmap(pPixmap);
}
dmxBECreatePicture(pPicture);
}
/** Restore Render's glyphs */
static void dmxBERestoreRenderGlyph(pointer value, XID id, pointer n)
{
GlyphSetPtr glyphSet = value;
int scrnNum = (int)n;
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
DMXScreenInfo *dmxScreen = &dmxScreens[scrnNum];
GlyphRefPtr table;
char *images;
Glyph *gids;
XGlyphInfo *glyphs;
char *pos;
int beret;
int len_images = 0;
int i;
int ctr;
if (glyphPriv->glyphSets[scrnNum]) {
/* Only restore glyphs on the screen we are attaching */
return;
}
/* First we must create the glyph set on the backend. */
if ((beret = dmxBECreateGlyphSet(scrnNum, glyphSet)) != Success) {
dmxLog(dmxWarning,
"\tdmxBERestoreRenderGlyph failed to create glyphset!\n");
return;
}
/* Now for the complex part, restore the glyph data */
table = glyphSet->hash.table;
/* We need to know how much memory to allocate for this part */
for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
GlyphRefPtr gr = &table[i];
GlyphPtr gl = gr->glyph;
if (!gl || gl == DeletedGlyph) continue;
len_images += gl->size - sizeof(gl->info);
}
/* Now allocate the memory we need */
images = ALLOCATE_LOCAL(len_images*sizeof(char));
gids = ALLOCATE_LOCAL(glyphSet->hash.tableEntries*sizeof(Glyph));
glyphs = ALLOCATE_LOCAL(glyphSet->hash.tableEntries*sizeof(XGlyphInfo));
memset(images, 0, len_images * sizeof(char));
pos = images;
ctr = 0;
/* Fill the allocated memory with the proper data */
for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
GlyphRefPtr gr = &table[i];
GlyphPtr gl = gr->glyph;
if (!gl || gl == DeletedGlyph) continue;
/* First lets put the data into gids */
gids[ctr] = gr->signature;
/* Next do the glyphs data structures */
glyphs[ctr].width = gl->info.width;
glyphs[ctr].height = gl->info.height;
glyphs[ctr].x = gl->info.x;
glyphs[ctr].y = gl->info.y;
glyphs[ctr].xOff = gl->info.xOff;
glyphs[ctr].yOff = gl->info.yOff;
/* Copy the images from the DIX's data into the buffer */
memcpy(pos, gl+1, gl->size - sizeof(gl->info));
pos += gl->size - sizeof(gl->info);
ctr++;
}
/* Now restore the glyph data */
XRenderAddGlyphs(dmxScreen->beDisplay, glyphPriv->glyphSets[scrnNum],
gids,glyphs, glyphSet->hash.tableEntries, images,
len_images);
/* Clean up */
DEALLOCATE_LOCAL(len_images);
DEALLOCATE_LOCAL(gids);
DEALLOCATE_LOCAL(glyphs);
}
#endif
/** Reattach previously detached back-end screen. */ /** Reattach previously detached back-end screen. */
int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr) int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
{ {
@ -1174,6 +1284,20 @@ int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
/* Create window hierarchy (top down) */ /* Create window hierarchy (top down) */
dmxBECreateWindowTree(idx); dmxBECreateWindowTree(idx);
#ifdef RENDER
/* Restore the picture state for RENDER */
for (i = currentMaxClients; --i >= 0; )
if (clients[i])
FindClientResourcesByType(clients[i],PictureType,
dmxBERestoreRenderPict,(pointer)idx);
/* Restore the glyph state for RENDER */
for (i = currentMaxClients; --i >= 0; )
if (clients[i])
FindClientResourcesByType(clients[i],GlyphSetType,
dmxBERestoreRenderGlyph,(pointer)idx);
#endif
/* Refresh screen by generating exposure events for all windows */ /* Refresh screen by generating exposure events for all windows */
dmxForceExposures(idx); dmxForceExposures(idx);
@ -1362,8 +1486,15 @@ static void dmxBEDestroyResources(pointer value, XID id, RESTYPE type,
#ifdef RENDER #ifdef RENDER
} else if ((type & TypeMask) == (PictureType & TypeMask)) { } else if ((type & TypeMask) == (PictureType & TypeMask)) {
PicturePtr pPict = value; PicturePtr pPict = value;
if (pPict->pDrawable->pScreen->myNum == scrnNum) if (pPict->pDrawable->pScreen->myNum == scrnNum) {
/* Free the pixmaps on the backend if needed */
if (pPict->pDrawable->type == DRAWABLE_PIXMAP) {
PixmapPtr pPixmap = (PixmapPtr)(pPict->pDrawable);
dmxBESavePixmap(pPixmap);
dmxBEFreePixmap(pPixmap);
}
dmxBEFreePicture((PicturePtr)value); dmxBEFreePicture((PicturePtr)value);
}
} else if ((type & TypeMask) == (GlyphSetType & TypeMask)) { } else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value); dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
#endif #endif

View File

@ -624,7 +624,7 @@ void InitOutput(ScreenInfo *pScreenInfo, int argc, char *argv[])
} }
/* Make sure that the command-line arguments are sane. */ /* Make sure that the command-line arguments are sane. */
if (dmxAddRemoveScreens && (!noRenderExtension || dmxGLXProxy)) { if (dmxAddRemoveScreens && dmxGLXProxy) {
/* Currently it is not possible to support GLX and Render /* Currently it is not possible to support GLX and Render
* extensions with dynamic screen addition/removal due to the * extensions with dynamic screen addition/removal due to the
* state that each extension keeps, which cannot be restored. */ * state that each extension keeps, which cannot be restored. */

View File

@ -223,6 +223,36 @@ Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet)
return FALSE; return FALSE;
} }
/** Create \a glyphSet on the backend screen number \a idx. */
int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet)
{
XRenderPictFormat *pFormat;
DMXScreenInfo *dmxScreen = &dmxScreens[idx];
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
PictFormatPtr pFmt = glyphSet->format;
int (*oldErrorHandler)(Display *, XErrorEvent *);
pFormat = dmxFindFormat(dmxScreen, pFmt);
if (!pFormat) {
return BadMatch;
}
dmxGlyphLastError = 0;
oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
/* Catch when this fails */
glyphPriv->glyphSets[idx]
= XRenderCreateGlyphSet(dmxScreen->beDisplay, pFormat);
XSetErrorHandler(oldErrorHandler);
if (dmxGlyphLastError) {
return dmxGlyphLastError;
}
return Success;
}
/** Create a Glyph Set on each screen. Save the glyphset ID from each /** Create a Glyph Set on each screen. Save the glyphset ID from each
* screen in the Glyph Set's private structure. Fail if the format * screen in the Glyph Set's private structure. Fail if the format
* requested is not available or if the Glyph Set cannot be created on * requested is not available or if the Glyph Set cannot be created on
@ -235,40 +265,32 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
ret = dmxSaveRenderVector[stuff->renderReqType](client); ret = dmxSaveRenderVector[stuff->renderReqType](client);
if (ret == Success) { if (ret == Success) {
int (*oldErrorHandler)(Display *, XErrorEvent *);
GlyphSetPtr glyphSet; GlyphSetPtr glyphSet;
dmxGlyphPrivPtr glyphPriv; dmxGlyphPrivPtr glyphPriv;
int i; int i;
PictFormatPtr pFmt;
XRenderPictFormat *pFormat;
/* Look up glyphSet that was just created ???? */ /* Look up glyphSet that was just created ???? */
/* Store glyphsets from backends in glyphSet->devPrivate ????? */ /* Store glyphsets from backends in glyphSet->devPrivate ????? */
/* Make sure we handle all errors here!! */ /* Make sure we handle all errors here!! */
glyphSet = SecurityLookupIDByType(client, stuff->gsid, GlyphSetType, glyphSet = SecurityLookupIDByType(client, stuff->gsid, GlyphSetType,
SecurityDestroyAccess); DixDestroyAccess);
glyphPriv = xalloc(sizeof(dmxGlyphPrivRec)); glyphPriv = xalloc(sizeof(dmxGlyphPrivRec));
if (!glyphPriv) return BadAlloc; if (!glyphPriv) return BadAlloc;
glyphPriv->glyphSets = NULL; glyphPriv->glyphSets = NULL;
MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc); MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc);
DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv); DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv);
pFmt = SecurityLookupIDByType(client, stuff->format, PictFormatType,
SecurityReadAccess);
oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
for (i = 0; i < dmxNumScreens; i++) { for (i = 0; i < dmxNumScreens; i++) {
DMXScreenInfo *dmxScreen = &dmxScreens[i]; DMXScreenInfo *dmxScreen = &dmxScreens[i];
int beret;
if (!dmxScreen->beDisplay) { if (!dmxScreen->beDisplay) {
glyphPriv->glyphSets[i] = 0; glyphPriv->glyphSets[i] = 0;
continue; continue;
} }
pFormat = dmxFindFormat(dmxScreen, pFmt); if ((beret = dmxBECreateGlyphSet(i, glyphSet)) != Success) {
if (!pFormat) {
int j; int j;
/* Free the glyph sets we've allocated thus far */ /* Free the glyph sets we've allocated thus far */
@ -278,30 +300,9 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
/* Free the resource created by render */ /* Free the resource created by render */
FreeResource(stuff->gsid, RT_NONE); FreeResource(stuff->gsid, RT_NONE);
ret = BadMatch; return beret;
break;
}
/* Catch when this fails */
glyphPriv->glyphSets[i]
= XRenderCreateGlyphSet(dmxScreen->beDisplay, pFormat);
if (dmxGlyphLastError) {
int j;
/* Free the glyph sets we've allocated thus far */
for (j = 0; j < i; j++)
dmxBEFreeGlyphSet(screenInfo.screens[j], glyphSet);
/* Free the resource created by render */
FreeResource(stuff->gsid, RT_NONE);
ret = dmxGlyphLastError;
break;
} }
} }
XSetErrorHandler(oldErrorHandler);
} }
return ret; return ret;
@ -315,7 +316,7 @@ static int dmxProcRenderFreeGlyphSet(ClientPtr client)
REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq); REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType, glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
SecurityDestroyAccess); DixDestroyAccess);
if (glyphSet && glyphSet->refcnt == 1) { if (glyphSet && glyphSet->refcnt == 1) {
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet); dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
@ -358,7 +359,7 @@ static int dmxProcRenderAddGlyphs(ClientPtr client)
int nbytes; int nbytes;
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
GlyphSetType, SecurityReadAccess); GlyphSetType, DixReadAccess);
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet); glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
nglyphs = stuff->nglyphs; nglyphs = stuff->nglyphs;
@ -401,7 +402,7 @@ static int dmxProcRenderFreeGlyphs(ClientPtr client)
REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq); REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType, glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
SecurityWriteAccess); DixWriteAccess);
if (glyphSet) { if (glyphSet) {
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet); dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
@ -473,13 +474,13 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
dmxGlyphPrivPtr glyphPriv; dmxGlyphPrivPtr glyphPriv;
pSrc = SecurityLookupIDByType(client, stuff->src, PictureType, pSrc = SecurityLookupIDByType(client, stuff->src, PictureType,
SecurityReadAccess); DixReadAccess);
pSrcPriv = DMX_GET_PICT_PRIV(pSrc); pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
if (!pSrcPriv->pict) if (!pSrcPriv->pict)
return ret; return ret;
pDst = SecurityLookupIDByType(client, stuff->dst, PictureType, pDst = SecurityLookupIDByType(client, stuff->dst, PictureType,
SecurityWriteAccess); DixWriteAccess);
pDstPriv = DMX_GET_PICT_PRIV(pDst); pDstPriv = DMX_GET_PICT_PRIV(pDst);
if (!pDstPriv->pict) if (!pDstPriv->pict)
return ret; return ret;
@ -496,7 +497,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
if (stuff->maskFormat) if (stuff->maskFormat)
pFmt = SecurityLookupIDByType(client, stuff->maskFormat, pFmt = SecurityLookupIDByType(client, stuff->maskFormat,
PictFormatType, SecurityReadAccess); PictFormatType, DixReadAccess);
else else
pFmt = NULL; pFmt = NULL;
@ -547,7 +548,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
curElt = elts; curElt = elts;
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
GlyphSetType, SecurityReadAccess); GlyphSetType, DixReadAccess);
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet); glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
while (buffer + sizeof(xGlyphElt) < end) { while (buffer + sizeof(xGlyphElt) < end) {
@ -558,7 +559,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
glyphSet = SecurityLookupIDByType(client, glyphSet = SecurityLookupIDByType(client,
*((CARD32 *)buffer), *((CARD32 *)buffer),
GlyphSetType, GlyphSetType,
SecurityReadAccess); DixReadAccess);
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet); glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
buffer += 4; buffer += 4;
} else { } else {
@ -622,7 +623,7 @@ static int dmxProcRenderSetPictureTransform(ClientPtr client)
REQUEST(xRenderSetPictureTransformReq); REQUEST(xRenderSetPictureTransformReq);
REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq); REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess, VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
RenderErrBase + BadPicture); RenderErrBase + BadPicture);
/* For the following to work with PanoramiX, it assumes that Render /* For the following to work with PanoramiX, it assumes that Render
@ -663,7 +664,7 @@ static int dmxProcRenderSetPictureFilter(ClientPtr client)
REQUEST(xRenderSetPictureFilterReq); REQUEST(xRenderSetPictureFilterReq);
REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq); REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess, VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
RenderErrBase + BadPicture); RenderErrBase + BadPicture);
/* For the following to work with PanoramiX, it assumes that Render /* For the following to work with PanoramiX, it assumes that Render
@ -753,6 +754,20 @@ void dmxCreatePictureList(WindowPtr pWindow)
} }
} }
/** Create \a pPicture on the backend. */
int dmxBECreatePicture(PicturePtr pPicture)
{
dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
/* Create picutre on BE */
pPictPriv->pict = dmxDoCreatePicture(pPicture);
/* Flush changes to the backend server */
dmxValidatePicture(pPicture, (1 << (CPLastBit+1)) - 1);
return Success;
}
/** Create a picture. This function handles the CreatePicture /** Create a picture. This function handles the CreatePicture
* unwrapping/wrapping and calls dmxDoCreatePicture to actually create * unwrapping/wrapping and calls dmxDoCreatePicture to actually create
* the picture on the appropriate screen. */ * the picture on the appropriate screen. */
@ -853,7 +868,11 @@ int dmxChangePictureClip(PicturePtr pPicture, int clipType,
/* The clip has already been changed into a region by the mi /* The clip has already been changed into a region by the mi
* routine called above. * routine called above.
*/ */
if (pPicture->clientClip) { if (clipType == CT_NONE) {
/* Disable clipping, show all */
XFixesSetPictureClipRegion(dmxScreen->beDisplay,
pPictPriv->pict, 0, 0, None);
} else if (pPicture->clientClip) {
RegionPtr pClip = pPicture->clientClip; RegionPtr pClip = pPicture->clientClip;
BoxPtr pBox = REGION_RECTS(pClip); BoxPtr pBox = REGION_RECTS(pClip);
int nBox = REGION_NUM_RECTS(pClip); int nBox = REGION_NUM_RECTS(pClip);

View File

@ -112,7 +112,9 @@ extern void dmxTriFan(CARD8 op,
INT16 xSrc, INT16 ySrc, INT16 xSrc, INT16 ySrc,
int npoint, xPointFixed *points); int npoint, xPointFixed *points);
extern int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet);
extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet); extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet);
extern int dmxBECreatePicture(PicturePtr pPicture);
extern Bool dmxBEFreePicture(PicturePtr pPicture); extern Bool dmxBEFreePicture(PicturePtr pPicture);
extern int dmxPictPrivateIndex; /**< Index for picture private data */ extern int dmxPictPrivateIndex; /**< Index for picture private data */

View File

@ -32,7 +32,7 @@ libglxproxy_a_SOURCES = compsize.c \
unpack.h unpack.h
AM_CFLAGS = \ AM_CFLAGS = \
\ $(DIX_CFLAGS) \
-I$(top_srcdir)/hw/dmx \ -I$(top_srcdir)/hw/dmx \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(top_srcdir)/GL/include \ -I$(top_srcdir)/GL/include \

View File

@ -430,9 +430,10 @@ int __glXBindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
DrawablePtr pDraw; DrawablePtr pDraw;
__GLXpixmap *pGlxPixmap = NULL; __GLXpixmap *pGlxPixmap = NULL;
__glXWindow *pGlxWindow = NULL; __glXWindow *pGlxWindow = NULL;
int rc;
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client); rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
if (!pDraw) { if (rc != Success) {
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable, pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
__glXPixmapRes); __glXPixmapRes);
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw; if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
@ -459,9 +460,10 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
DrawablePtr pDraw, pMember = NULL; DrawablePtr pDraw, pMember = NULL;
__GLXpixmap *pGlxPixmap = NULL; __GLXpixmap *pGlxPixmap = NULL;
__glXWindow *pGlxWindow = NULL; __glXWindow *pGlxWindow = NULL;
int rc;
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client); rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
if (!pDraw) { if (rc != Success) {
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable, pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
__glXPixmapRes); __glXPixmapRes);
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw; if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
@ -479,8 +481,9 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
} }
if (req->member != None) { if (req->member != None) {
pMember = (DrawablePtr) LookupDrawable(req->member, client); rc = dixLookupDrawable(&pMember, req->member, client, 0,
if (!pMember) { DixUnknownAccess);
if (rc != Success) {
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->member, pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->member,
__glXPixmapRes); __glXPixmapRes);
if (pGlxPixmap) pMember = pGlxPixmap->pDraw; if (pGlxPixmap) pMember = pGlxPixmap->pDraw;
@ -734,7 +737,7 @@ static int MakeCurrent(__GLXclientState *cl,
#endif #endif
int from_screen = 0; int from_screen = 0;
int to_screen = 0; int to_screen = 0;
int s; int s, rc;
/* /*
** If one is None and the other isn't, it's a bad match. ** If one is None and the other isn't, it's a bad match.
@ -778,8 +781,8 @@ static int MakeCurrent(__GLXclientState *cl,
} }
if (drawId != None) { if (drawId != None) {
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
if (pDraw->type == DRAWABLE_WINDOW) { if (pDraw->type == DRAWABLE_WINDOW) {
/* /*
** Drawable is an X Window. ** Drawable is an X Window.
@ -885,8 +888,8 @@ static int MakeCurrent(__GLXclientState *cl,
} }
if (readId != None && readId != drawId ) { if (readId != None && readId != drawId ) {
pReadDraw = (DrawablePtr) LookupDrawable(readId, client); rc = dixLookupDrawable(&pReadDraw, readId, client, 0,DixUnknownAccess);
if (pReadDraw) { if (rc == Success) {
if (pReadDraw->type == DRAWABLE_WINDOW) { if (pReadDraw->type == DRAWABLE_WINDOW) {
/* /*
** Drawable is an X Window. ** Drawable is an X Window.
@ -1105,13 +1108,13 @@ static int MakeCurrent(__GLXclientState *cl,
if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) { if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) {
pXinDraw = (PanoramiXRes *) pXinDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
} }
if (pReadDraw && pReadDraw != pDraw && if (pReadDraw && pReadDraw != pDraw &&
new_reply.readType != GLX_PBUFFER_TYPE) { new_reply.readType != GLX_PBUFFER_TYPE) {
pXinReadDraw = (PanoramiXRes *) pXinReadDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, DixReadAccess);
} }
else { else {
pXinReadDraw = pXinDraw; pXinReadDraw = pXinDraw;
@ -1137,9 +1140,7 @@ static int MakeCurrent(__GLXclientState *cl,
} }
#ifdef PANORAMIX #ifdef PANORAMIX
else if (pXinDraw) { else if (pXinDraw) {
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id, dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
client,
SecurityReadAccess);
} }
#endif #endif
else if (pGlxWindow) { else if (pGlxWindow) {
@ -1195,9 +1196,8 @@ static int MakeCurrent(__GLXclientState *cl,
} }
#ifdef PANORAMIX #ifdef PANORAMIX
else if (pXinReadDraw) { else if (pXinReadDraw) {
pReadWin = (WindowPtr)SecurityLookupWindow(pXinReadDraw->info[s].id, dixLookupWindow(&pReadWin, pXinReadDraw->info[s].id, client,
client, DixReadAccess);
SecurityReadAccess);
} }
#endif #endif
else if (pGlxReadWindow) { else if (pGlxReadWindow) {
@ -1639,18 +1639,16 @@ static int CreateGLXPixmap(__GLXclientState *cl,
__GLXscreenInfo *pGlxScreen; __GLXscreenInfo *pGlxScreen;
__GLXvisualConfig *pGlxVisual; __GLXvisualConfig *pGlxVisual;
__GLXFBConfig *pFBConfig; __GLXFBConfig *pFBConfig;
int i; int i, s, rc;
int s;
int from_screen, to_screen; int from_screen, to_screen;
#ifdef PANORAMIX #ifdef PANORAMIX
PanoramiXRes *pXinDraw = NULL; PanoramiXRes *pXinDraw = NULL;
#endif #endif
pDraw = (DrawablePtr) LookupDrawable(pixmapId, client); rc = dixLookupDrawable(&pDraw, pixmapId, client, M_DRAWABLE_PIXMAP,
if (!pDraw || pDraw->type != DRAWABLE_PIXMAP) { DixUnknownAccess);
client->errorValue = pixmapId; if (rc != Success)
return BadPixmap; return rc;
}
/* /*
** Check if screen of visual matches screen of pixmap. ** Check if screen of visual matches screen of pixmap.
@ -1768,7 +1766,7 @@ static int CreateGLXPixmap(__GLXclientState *cl,
to_screen = screenInfo.numScreens - 1; to_screen = screenInfo.numScreens - 1;
pXinDraw = (PanoramiXRes *) pXinDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
} }
#endif #endif
@ -1781,7 +1779,8 @@ static int CreateGLXPixmap(__GLXclientState *cl,
#ifdef PANORAMIX #ifdef PANORAMIX
if (pXinDraw) { if (pXinDraw) {
pRealDraw = (DrawablePtr) LookupDrawable(pXinDraw->info[s].id,client); dixLookupDrawable(&pRealDraw, pXinDraw->info[s].id, client, 0,
DixUnknownAccess);
} }
#endif #endif
@ -1947,14 +1946,13 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
__glXWindow *pGlxWindow = NULL; __glXWindow *pGlxWindow = NULL;
int from_screen = 0; int from_screen = 0;
int to_screen = 0; int to_screen = 0;
int s; int s, rc;
/* /*
** Check that the GLX drawable is valid. ** Check that the GLX drawable is valid.
*/ */
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
from_screen = to_screen = pDraw->pScreen->myNum; from_screen = to_screen = pDraw->pScreen->myNum;
if (pDraw->type == DRAWABLE_WINDOW) { if (pDraw->type == DRAWABLE_WINDOW) {
@ -2014,7 +2012,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
from_screen = 0; from_screen = 0;
to_screen = screenInfo.numScreens - 1; to_screen = screenInfo.numScreens - 1;
pXinDraw = (PanoramiXRes *) pXinDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
} }
#endif #endif
@ -2058,9 +2056,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
} }
#ifdef PANORAMIX #ifdef PANORAMIX
else if (pXinDraw) { else if (pXinDraw) {
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id, dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
client,
SecurityReadAccess);
} }
#endif #endif
else if (pGlxWindow) { else if (pGlxWindow) {
@ -2104,12 +2100,13 @@ int __glXSwapBuffers(__GLXclientState *cl, GLbyte *pc)
__GLXpixmap *pGlxPixmap = NULL; __GLXpixmap *pGlxPixmap = NULL;
__GLXcontext *glxc = NULL; __GLXcontext *glxc = NULL;
__glXWindow *pGlxWindow = NULL; __glXWindow *pGlxWindow = NULL;
int rc;
/* /*
** Check that the GLX drawable is valid. ** Check that the GLX drawable is valid.
*/ */
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
if (pDraw->type != DRAWABLE_WINDOW) { if (pDraw->type != DRAWABLE_WINDOW) {
/* /*
** Drawable is an X pixmap, which is not allowed. ** Drawable is an X pixmap, which is not allowed.
@ -2897,16 +2894,15 @@ int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc)
__GLXFBConfig *pGlxFBConfig = NULL; __GLXFBConfig *pGlxFBConfig = NULL;
VisualPtr pVisual; VisualPtr pVisual;
VisualID visId; VisualID visId;
int i; int i, rc;
/* /*
** Check if windowId is valid ** Check if windowId is valid
*/ */
pDraw = (DrawablePtr) LookupDrawable(windowId, client); rc = dixLookupDrawable(&pDraw, windowId, client, M_DRAWABLE_WINDOW,
if (!pDraw || pDraw->type != DRAWABLE_WINDOW) { DixUnknownAccess);
client->errorValue = windowId; if (rc != Success)
return BadWindow; return rc;
}
/* /*
** Check if screen of window matches screen of fbconfig. ** Check if screen of window matches screen of fbconfig.
@ -3069,7 +3065,7 @@ int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
int nReplyBytes; int nReplyBytes;
req = (xGLXQueryContextInfoEXTReq *)pc; req = (xGLXQueryContextInfoEXTReq *)pc;
ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, SecurityReadAccess); ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, DixReadAccess);
if (!ctx) { if (!ctx) {
client->errorValue = req->context; client->errorValue = req->context;
return __glXBadContext; return __glXBadContext;
@ -3279,7 +3275,7 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
GLXDrawable be_drawable = 0; GLXDrawable be_drawable = 0;
DrawablePtr pDraw = NULL; DrawablePtr pDraw = NULL;
Display *dpy; Display *dpy;
int screen; int screen, rc;
DMXScreenInfo *dmxScreen; DMXScreenInfo *dmxScreen;
CARD32 *attribs = NULL; CARD32 *attribs = NULL;
int attribs_size; int attribs_size;
@ -3288,8 +3284,8 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
#endif #endif
if (drawId != None) { if (drawId != None) {
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
if (pDraw->type == DRAWABLE_WINDOW) { if (pDraw->type == DRAWABLE_WINDOW) {
WindowPtr pWin = (WindowPtr)pDraw; WindowPtr pWin = (WindowPtr)pDraw;
be_drawable = 0; be_drawable = 0;
@ -3353,15 +3349,14 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
#ifdef PANORAMIX #ifdef PANORAMIX
if (!noPanoramiXExtension) { if (!noPanoramiXExtension) {
pXinDraw = (PanoramiXRes *) pXinDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
if (!pXinDraw) { if (!pXinDraw) {
client->errorValue = drawId; client->errorValue = drawId;
return __glXBadDrawable; return __glXBadDrawable;
} }
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id, dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
client, DixReadAccess);
SecurityReadAccess);
} }
#endif #endif
@ -3441,7 +3436,7 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
GLXDrawable be_drawable = 0; GLXDrawable be_drawable = 0;
DrawablePtr pDraw = NULL; DrawablePtr pDraw = NULL;
Display *dpy; Display *dpy;
int screen; int screen, rc;
DMXScreenInfo *dmxScreen; DMXScreenInfo *dmxScreen;
char *attrbuf; char *attrbuf;
#ifdef PANORAMIX #ifdef PANORAMIX
@ -3450,8 +3445,8 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
#endif #endif
if (drawId != None) { if (drawId != None) {
pDraw = (DrawablePtr) LookupDrawable(drawId, client); rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
if (pDraw) { if (rc == Success) {
if (pDraw->type == DRAWABLE_WINDOW) { if (pDraw->type == DRAWABLE_WINDOW) {
WindowPtr pWin = (WindowPtr)pDraw; WindowPtr pWin = (WindowPtr)pDraw;
be_drawable = 0; be_drawable = 0;
@ -3515,15 +3510,14 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
#ifdef PANORAMIX #ifdef PANORAMIX
if (!noPanoramiXExtension) { if (!noPanoramiXExtension) {
pXinDraw = (PanoramiXRes *) pXinDraw = (PanoramiXRes *)
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess); SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
if (!pXinDraw) { if (!pXinDraw) {
client->errorValue = drawId; client->errorValue = drawId;
return __glXBadDrawable; return __glXBadDrawable;
} }
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id, dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
client, DixReadAccess);
SecurityReadAccess);
} }
#endif #endif

View File

@ -60,7 +60,7 @@ GLX_DEFS = @GL_CFLAGS@
GLX_INCS = -I@MESA_SOURCE@/include GLX_INCS = -I@MESA_SOURCE@/include
endif endif
AM_CFLAGS = \ AM_CFLAGS = $(DIX_CFLAGS) \
-I$(top_srcdir)/hw/dmx \ -I$(top_srcdir)/hw/dmx \
-I$(top_srcdir)/hw/xfree86/common \ -I$(top_srcdir)/hw/xfree86/common \
$(GLX_INCS) \ $(GLX_INCS) \

View File

@ -745,14 +745,11 @@ LinuxKeyboardEnable (KdKeyboardInfo *ki)
cfsetispeed(&nTty, 9600); cfsetispeed(&nTty, 9600);
cfsetospeed(&nTty, 9600); cfsetospeed(&nTty, 9600);
tcsetattr(fd, TCSANOW, &nTty); tcsetattr(fd, TCSANOW, &nTty);
/* Our kernel cleverly ignores O_NONBLOCK. Sigh. */
#if 0
/* /*
* Flush any pending keystrokes * Flush any pending keystrokes
*/ */
while ((n = read (fd, buf, sizeof (buf))) > 0) while ((n = read (fd, buf, sizeof (buf))) > 0)
; ;
#endif
KdRegisterFd (fd, LinuxKeyboardRead, ki); KdRegisterFd (fd, LinuxKeyboardRead, ki);
return Success; return Success;
} }

View File

@ -75,10 +75,7 @@ TsRead (int fd, void *closure)
while (ts_read(private->tsDev, &event, 1) == 1) { while (ts_read(private->tsDev, &event, 1) == 1) {
if (event.pressure) { if (event.pressure) {
if (event.pressure > pi->dixdev->absolute->button_threshold) flags = KD_BUTTON_1;
flags = KD_BUTTON_8;
else
flags = KD_BUTTON_1;
/* /*
* Here we test for the touch screen driver actually being on the * Here we test for the touch screen driver actually being on the
@ -113,9 +110,8 @@ TsRead (int fd, void *closure)
static Status static Status
TslibEnable (KdPointerInfo *pi) TslibEnable (KdPointerInfo *pi)
{ {
struct TslibPrivate *private = pi->driverPrivate; struct TslibPrivate *private = pi->driverPrivate;
private->holdThumbEvents = 1;
private->raw_event_hook = NULL; private->raw_event_hook = NULL;
private->raw_event_closure = NULL; private->raw_event_closure = NULL;
private->tsDev = ts_open(pi->path, 0); private->tsDev = ts_open(pi->path, 0);
@ -126,9 +122,6 @@ TslibEnable (KdPointerInfo *pi)
close(private->fd); close(private->fd);
return BadAlloc; 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); KdRegisterFd(private->fd, TsRead, pi);
@ -141,12 +134,12 @@ TslibDisable (KdPointerInfo *pi)
{ {
struct TslibPrivate *private = pi->driverPrivate; struct TslibPrivate *private = pi->driverPrivate;
if (private->fd) { if (private->fd)
KdUnregisterFd(pi, private->fd); KdUnregisterFd(pi, private->fd, TRUE);
close(private->fd);
}
if (private->tsDev) if (private->tsDev)
ts_close(private->tsDev); ts_close(private->tsDev);
private->fd = 0; private->fd = 0;
private->tsDev = NULL; private->tsDev = NULL;
} }
@ -156,7 +149,6 @@ static Status
TslibInit (KdPointerInfo *pi) TslibInit (KdPointerInfo *pi)
{ {
int fd = 0, i = 0; int fd = 0, i = 0;
char devpath[PATH_MAX], devname[TS_NAME_SIZE];
DIR *inputdir = NULL; DIR *inputdir = NULL;
struct dirent *inputent = NULL; struct dirent *inputent = NULL;
struct tsdev *tsDev = NULL; struct tsdev *tsDev = NULL;

View File

@ -286,10 +286,8 @@ mgaCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
if (pMaskPicture->componentAlpha) if (pMaskPicture->componentAlpha)
MGA_FALLBACK(("Component alpha unsupported")); MGA_FALLBACK(("Component alpha unsupported"));
switch (pDstPicture->format) { if (pDstPicture->format == PICT_a8)
case PICT_a8:
MGA_FALLBACK(("render to A8 unsupported")); MGA_FALLBACK(("render to A8 unsupported"));
}
return TRUE; return TRUE;
} }

View File

@ -21,8 +21,9 @@ Xvfb_LDFLAGS =
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \ AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
-DNO_HW_ONLY_EXTS \ -DNO_HW_ONLY_EXTS \
-DNO_MODULE_EXTS \ -DNO_MODULE_EXTS \
\ -DXFree86Server \
$(XVFBMODULES_CFLAGS) $(XVFBMODULES_CFLAGS) \
$(DIX_CFLAGS)
# Man page # Man page
include $(top_srcdir)/cpprules.in include $(top_srcdir)/cpprules.in

View File

@ -22,7 +22,7 @@ DIST_SUBDIRS = common ddc dummylib i2c x86emu int10 fbdevhw os-support \
bin_PROGRAMS = Xorg bin_PROGRAMS = Xorg
AM_CFLAGS = @XORG_CFLAGS@ AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
INCLUDES = @XORG_INCS@ INCLUDES = @XORG_INCS@
Xorg_SOURCES = xorg.c Xorg_SOURCES = xorg.c
@ -93,7 +93,6 @@ CPP_FILES_FLAGS = \
-DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \ -DMISCFONTPATH="\"$(BASE_FONT_PATH)/misc\"" \
-DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \ -DT1FONTPATH="\"$(BASE_FONT_PATH)/Type1\"" \
-DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \ -DTRUETYPEFONTPATH="\"$(BASE_FONT_PATH)/TTF\"" \
-DCIDFONTPATH="\"$(BASE_FONT_PATH)/CID\"" \
-DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \ -DDPI75FONTPATH="\"$(BASE_FONT_PATH)/75dpi\"" \
-DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \ -DDPI100FONTPATH="\"$(BASE_FONT_PATH)/100dpi\"" \
-DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\" -DMODULEPATH=\"$(DEFAULT_MODULE_PATH)\"

View File

@ -94,4 +94,4 @@ if LNXACPI
XORG_CFLAGS += -DHAVE_ACPI XORG_CFLAGS += -DHAVE_ACPI
endif endif
AM_CFLAGS = $(XORG_CFLAGS) AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)

View File

@ -118,7 +118,7 @@ extern int ffs(unsigned long);
# if defined(NO_INLINE) || defined(DO_PROTOTYPES) # if defined(NO_INLINE) || defined(DO_PROTOTYPES)
# if !defined(__arm__) # if !defined(__arm__)
# if !defined(__sparc__) && !defined(__arm32__) \ # if !defined(__sparc__) && !defined(__sparc) && !defined(__arm32__) \
&& !(defined(__alpha__) && defined(linux)) \ && !(defined(__alpha__) && defined(linux)) \
&& !(defined(__ia64__) && defined(linux)) \ && !(defined(__ia64__) && defined(linux)) \
@ -1697,7 +1697,7 @@ static __inline__ void ppc_flush_icache(char *addr)
: : "r"(addr) : "memory"); : : "r"(addr) : "memory");
} }
# elif defined(__sparc__) || defined(sparc) # elif defined(__sparc__) || defined(sparc) || defined(__sparc)
/* /*
* Like powerpc, we provide byteswapping and no byteswapping functions * Like powerpc, we provide byteswapping and no byteswapping functions
* here with byteswapping as default, drivers that don't need byteswapping * here with byteswapping as default, drivers that don't need byteswapping

View File

@ -64,7 +64,7 @@ extern ScrnInfoPtr xf86CurrentScreen;
extern Bool pciSlotClaimed; extern Bool pciSlotClaimed;
extern Bool isaSlotClaimed; extern Bool isaSlotClaimed;
extern Bool fbSlotClaimed; extern Bool fbSlotClaimed;
#ifdef __sparc__ #if defined(__sparc__) || defined(__sparc)
extern Bool sbusSlotClaimed; extern Bool sbusSlotClaimed;
#endif #endif
extern confDRIRec xf86ConfigDRI; extern confDRIRec xf86ConfigDRI;
@ -418,6 +418,15 @@ void xf86PruneDriverModes(ScrnInfoPtr scrp);
void xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags); void xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags);
void xf86PrintModes(ScrnInfoPtr scrp); void xf86PrintModes(ScrnInfoPtr scrp);
void xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges); void xf86ShowClockRanges(ScrnInfoPtr scrp, ClockRangePtr clockRanges);
double xf86ModeHSync(DisplayModePtr mode);
double xf86ModeVRefresh(DisplayModePtr mode);
void xf86SetModeDefaultName(DisplayModePtr mode);
void xf86SetModeCrtc(DisplayModePtr p, int adjustFlags);
DisplayModePtr xf86DuplicateMode(DisplayModePtr pMode);
DisplayModePtr xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList);
Bool xf86ModesEqual(DisplayModePtr pMode1, DisplayModePtr pMode2);
void xf86PrintModeline(int scrnIndex,DisplayModePtr mode);
DisplayModePtr xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new);
/* xf86Option.c */ /* xf86Option.c */

View File

@ -113,7 +113,7 @@ void
xf86BusProbe(void) xf86BusProbe(void)
{ {
xf86PciProbe(); xf86PciProbe();
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
xf86SbusProbe(); xf86SbusProbe();
#endif #endif
} }
@ -2373,7 +2373,7 @@ xf86PostProbe(void)
if (fbSlotClaimed) { if (fbSlotClaimed) {
if (pciSlotClaimed || isaSlotClaimed if (pciSlotClaimed || isaSlotClaimed
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
|| sbusSlotClaimed || sbusSlotClaimed
#endif #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 "vgaHW.h"
#include "compiler.h" #include "compiler.h"
#endif #endif
@ -3018,7 +3018,7 @@ static void
CheckGenericGA() CheckGenericGA()
{ {
/* This needs to be changed for multiple domains */ /* 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(); IOADDRESS GenericIOBase = VGAHW_GET_IOBASE();
CARD8 CurrentValue, TestValue; CARD8 CurrentValue, TestValue;

View File

@ -40,7 +40,7 @@
#define _XF86_BUS_H #define _XF86_BUS_H
#include "xf86pciBus.h" #include "xf86pciBus.h"
#ifdef __sparc__ #if defined(__sparc__) || defined(__sparc)
#include "xf86sbusBus.h" #include "xf86sbusBus.h"
#endif #endif

View File

@ -48,7 +48,7 @@
#include "Configint.h" #include "Configint.h"
#include "vbe.h" #include "vbe.h"
#include "xf86DDC.h" #include "xf86DDC.h"
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
#include "xf86Bus.h" #include "xf86Bus.h"
#include "xf86Sbus.h" #include "xf86Sbus.h"
#endif #endif
@ -57,7 +57,7 @@
typedef struct _DevToConfig { typedef struct _DevToConfig {
GDevRec GDev; GDevRec GDev;
pciVideoPtr pVideo; pciVideoPtr pVideo;
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
sbusDevicePtr sVideo; sbusDevicePtr sVideo;
#endif #endif
int iDriver; int iDriver;
@ -134,7 +134,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
if (!DevToConfig[i].pVideo) if (!DevToConfig[i].pVideo)
return NULL; return NULL;
break; break;
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
case BUS_SBUS: case BUS_SBUS:
for (i = 0; i < nDevToConfig; i++) for (i = 0; i < nDevToConfig; i++)
if (DevToConfig[i].sVideo && if (DevToConfig[i].sVideo &&
@ -213,7 +213,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int
NewDevice.GDev.identifier = "ISA Adapter"; NewDevice.GDev.identifier = "ISA Adapter";
NewDevice.GDev.busID = "ISA"; NewDevice.GDev.busID = "ISA";
break; break;
#if defined(__sparc__) && !defined(__OpenBSD__) #if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__)
case BUS_SBUS: { case BUS_SBUS: {
char *promPath = NULL; char *promPath = NULL;
NewDevice.sVideo = (sbusDevicePtr) busData; NewDevice.sVideo = (sbusDevicePtr) busData;

View File

@ -789,8 +789,6 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
xEvent ke; xEvent ke;
int i = 0, j = 0, nevents = 0; int i = 0, j = 0, nevents = 0;
ErrorF("releasekeys: called on device %s (%d)\n", pDev->name, pDev->id);
if (!pDev || !pDev->key) if (!pDev || !pDev->key)
return; return;

View File

@ -100,6 +100,8 @@
static void xf86PrintBanner(void); static void xf86PrintBanner(void);
static void xf86PrintMarkers(void); static void xf86PrintMarkers(void);
static void xf86PrintDefaultModulePath(void);
static void xf86PrintDefaultLibraryPath(void);
static void xf86RunVtInit(void); static void xf86RunVtInit(void);
#ifdef __UNIXOS2__ #ifdef __UNIXOS2__
@ -1376,6 +1378,16 @@ ddxProcessArgument(int argc, char **argv, int i)
xf86PrintBanner(); xf86PrintBanner();
exit(0); exit(0);
} }
if (!strcmp(argv[i],"-showDefaultModulePath"))
{
xf86PrintDefaultModulePath();
exit(0);
}
if (!strcmp(argv[i],"-showDefaultLibPath"))
{
xf86PrintDefaultLibraryPath();
exit(0);
}
/* Notice the -fp flag, but allow it to pass to the dix layer */ /* Notice the -fp flag, but allow it to pass to the dix layer */
if (!strcmp(argv[i], "-fp")) if (!strcmp(argv[i], "-fp"))
{ {
@ -1625,6 +1637,8 @@ ddxUseMsg()
ErrorF("-ignoreABI make module ABI mismatches non-fatal\n"); ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n"); ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
ErrorF("-version show the server version\n"); ErrorF("-version show the server version\n");
ErrorF("-showDefaultModulePath show the server default module path\n");
ErrorF("-showDefaultLibPath show the server default library path\n");
/* OS-specific usage */ /* OS-specific usage */
xf86UseMsg(); xf86UseMsg();
ErrorF("\n"); ErrorF("\n");
@ -1747,6 +1761,18 @@ xf86PrintMarkers()
LogPrintMarkers(); LogPrintMarkers();
} }
static void
xf86PrintDefaultModulePath(void)
{
ErrorF("%s\n", DEFAULT_MODULE_PATH);
}
static void
xf86PrintDefaultLibraryPath(void)
{
ErrorF("%s\n", DEFAULT_LIBRARY_PATH);
}
static void static void
xf86RunVtInit(void) xf86RunVtInit(void)
{ {

View File

@ -368,8 +368,9 @@ xf86HandleBuiltinMode(ScrnInfoPtr scrp,
return MODE_OK; return MODE_OK;
} }
static double /** Calculates the horizontal sync rate of a mode */
ModeHSync(DisplayModePtr mode) _X_EXPORT double
xf86ModeHSync(DisplayModePtr mode)
{ {
double hsync = 0.0; double hsync = 0.0;
@ -381,8 +382,9 @@ ModeHSync(DisplayModePtr mode)
return hsync; return hsync;
} }
static double /** Calculates the vertical refresh rate of a mode */
ModeVRefresh(DisplayModePtr mode) _X_EXPORT double
xf86ModeVRefresh(DisplayModePtr mode)
{ {
double refresh = 0.0; double refresh = 0.0;
@ -400,6 +402,16 @@ ModeVRefresh(DisplayModePtr mode)
return refresh; return refresh;
} }
/** Sets a default mode name of <width>x<height> on a mode. */
_X_EXPORT void
xf86SetModeDefaultName(DisplayModePtr mode)
{
if (mode->name != NULL)
xfree(mode->name);
mode->name = XNFprintf("%dx%d", mode->HDisplay, mode->VDisplay);
}
/* /*
* xf86LookupMode * xf86LookupMode
* *
@ -529,7 +541,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
ModePrivFlags = cp->PrivFlags; ModePrivFlags = cp->PrivFlags;
break; break;
} }
refresh = ModeVRefresh(p); refresh = xf86ModeVRefresh(p);
if (p->Flags & V_INTERLACE) if (p->Flags & V_INTERLACE)
refresh /= INTERLACE_REFRESH_WEIGHT; refresh /= INTERLACE_REFRESH_WEIGHT;
if (refresh > bestRefresh) { if (refresh > bestRefresh) {
@ -570,7 +582,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
found = TRUE; found = TRUE;
if (strategy == LOOKUP_BEST_REFRESH) { if (strategy == LOOKUP_BEST_REFRESH) {
refresh = ModeVRefresh(p); refresh = xf86ModeVRefresh(p);
if (p->Flags & V_INTERLACE) if (p->Flags & V_INTERLACE)
refresh /= INTERLACE_REFRESH_WEIGHT; refresh /= INTERLACE_REFRESH_WEIGHT;
if (refresh > bestRefresh) { if (refresh > bestRefresh) {
@ -674,7 +686,7 @@ xf86LookupMode(ScrnInfoPtr scrp, DisplayModePtr modep,
* Initialises the Crtc parameters for a mode. The initialisation includes * Initialises the Crtc parameters for a mode. The initialisation includes
* adjustments for interlaced and double scan modes. * adjustments for interlaced and double scan modes.
*/ */
static void _X_EXPORT void
xf86SetModeCrtc(DisplayModePtr p, int adjustFlags) xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
{ {
if ((p == NULL) || ((p->type & M_T_CRTC_C) == M_T_BUILTIN)) if ((p == NULL) || ((p->type & M_T_CRTC_C) == M_T_BUILTIN))
@ -756,6 +768,87 @@ xf86SetModeCrtc(DisplayModePtr p, int adjustFlags)
} }
} }
/**
* Allocates and returns a copy of pMode, including pointers within pMode.
*/
_X_EXPORT DisplayModePtr
xf86DuplicateMode(DisplayModePtr pMode)
{
DisplayModePtr pNew;
pNew = xnfalloc(sizeof(DisplayModeRec));
*pNew = *pMode;
pNew->next = NULL;
pNew->prev = NULL;
if (pNew->name == NULL) {
xf86SetModeDefaultName(pMode);
} else {
pNew->name = xnfstrdup(pMode->name);
}
return pNew;
}
/**
* Duplicates every mode in the given list and returns a pointer to the first
* mode.
*
* \param modeList doubly-linked mode list
*/
_X_EXPORT DisplayModePtr
xf86DuplicateModes(ScrnInfoPtr pScrn, DisplayModePtr modeList)
{
DisplayModePtr first = NULL, last = NULL;
DisplayModePtr mode;
for (mode = modeList; mode != NULL; mode = mode->next) {
DisplayModePtr new;
new = xf86DuplicateMode(mode);
/* Insert pNew into modeList */
if (last) {
last->next = new;
new->prev = last;
} else {
first = new;
new->prev = NULL;
}
new->next = NULL;
last = new;
}
return first;
}
/**
* Returns true if the given modes should program to the same timings.
*
* This doesn't use Crtc values, as it might be used on ModeRecs without the
* Crtc values set. So, it's assumed that the other numbers are enough.
*/
_X_EXPORT Bool
xf86ModesEqual(DisplayModePtr pMode1, DisplayModePtr pMode2)
{
if (pMode1->Clock == pMode2->Clock &&
pMode1->HDisplay == pMode2->HDisplay &&
pMode1->HSyncStart == pMode2->HSyncStart &&
pMode1->HSyncEnd == pMode2->HSyncEnd &&
pMode1->HTotal == pMode2->HTotal &&
pMode1->HSkew == pMode2->HSkew &&
pMode1->VDisplay == pMode2->VDisplay &&
pMode1->VSyncStart == pMode2->VSyncStart &&
pMode1->VSyncEnd == pMode2->VSyncEnd &&
pMode1->VTotal == pMode2->VTotal &&
pMode1->VScan == pMode2->VScan &&
pMode1->Flags == pMode2->Flags)
{
return TRUE;
} else {
return FALSE;
}
}
/* /*
* xf86CheckModeForMonitor * xf86CheckModeForMonitor
* *
@ -789,7 +882,7 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor)
if (monitor->nHsync > 0) { if (monitor->nHsync > 0) {
/* Check hsync against the allowed ranges */ /* Check hsync against the allowed ranges */
float hsync = ModeHSync(mode); float hsync = xf86ModeHSync(mode);
for (i = 0; i < monitor->nHsync; i++) for (i = 0; i < monitor->nHsync; i++)
if ((hsync > monitor->hsync[i].lo * (1.0 - SYNC_TOLERANCE)) && if ((hsync > monitor->hsync[i].lo * (1.0 - SYNC_TOLERANCE)) &&
(hsync < monitor->hsync[i].hi * (1.0 + SYNC_TOLERANCE))) (hsync < monitor->hsync[i].hi * (1.0 + SYNC_TOLERANCE)))
@ -802,7 +895,7 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor)
if (monitor->nVrefresh > 0) { if (monitor->nVrefresh > 0) {
/* Check vrefresh against the allowed ranges */ /* Check vrefresh against the allowed ranges */
float vrefrsh = ModeVRefresh(mode); float vrefrsh = xf86ModeVRefresh(mode);
for (i = 0; i < monitor->nVrefresh; i++) for (i = 0; i < monitor->nVrefresh; i++)
if ((vrefrsh > monitor->vrefresh[i].lo * (1.0 - SYNC_TOLERANCE)) && if ((vrefrsh > monitor->vrefresh[i].lo * (1.0 - SYNC_TOLERANCE)) &&
(vrefrsh < monitor->vrefresh[i].hi * (1.0 + SYNC_TOLERANCE))) (vrefrsh < monitor->vrefresh[i].hi * (1.0 + SYNC_TOLERANCE)))
@ -1033,8 +1126,8 @@ xf86InitialCheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode,
/ (mode->CrtcHTotal * mode->CrtcVTotal); / (mode->CrtcHTotal * mode->CrtcVTotal);
} }
mode->HSync = ModeHSync(mode); mode->HSync = xf86ModeHSync(mode);
mode->VRefresh = ModeVRefresh(mode); mode->VRefresh = xf86ModeVRefresh(mode);
/* Assume it is OK */ /* Assume it is OK */
return MODE_OK; return MODE_OK;
@ -1572,7 +1665,7 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
"TargetRefresh", 0.0); "TargetRefresh", 0.0);
if (targetRefresh > 0.0) { if (targetRefresh > 0.0) {
for (p = scrp->modePool; p != NULL; p = p->next) { for (p = scrp->modePool; p != NULL; p = p->next) {
if (ModeVRefresh(p) > targetRefresh * (1.0 - SYNC_TOLERANCE)) if (xf86ModeVRefresh(p) > targetRefresh * (1.0 - SYNC_TOLERANCE))
break; break;
} }
if (!p) if (!p)
@ -1661,7 +1754,7 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes,
* If there is a target refresh rate, skip modes that * If there is a target refresh rate, skip modes that
* don't match up. * don't match up.
*/ */
if (ModeVRefresh(q) < if (xf86ModeVRefresh(q) <
(1.0 - SYNC_TOLERANCE) * targetRefresh) (1.0 - SYNC_TOLERANCE) * targetRefresh)
continue; continue;
@ -1981,8 +2074,8 @@ add(char **p, char *new)
strcat(*p, new); strcat(*p, new);
} }
static void _X_EXPORT void
PrintModeline(int scrnIndex,DisplayModePtr mode) xf86PrintModeline(int scrnIndex,DisplayModePtr mode)
{ {
char tmp[256]; char tmp[256];
char *flags = xnfcalloc(1, 1); char *flags = xnfcalloc(1, 1);
@ -2037,8 +2130,8 @@ xf86PrintModes(ScrnInfoPtr scrp)
do { do {
desc = desc2 = ""; desc = desc2 = "";
hsync = ModeHSync(p); hsync = xf86ModeHSync(p);
refresh = ModeVRefresh(p); refresh = xf86ModeVRefresh(p);
if (p->Flags & V_INTERLACE) { if (p->Flags & V_INTERLACE) {
desc = " (I)"; desc = " (I)";
} }
@ -2081,7 +2174,31 @@ xf86PrintModes(ScrnInfoPtr scrp)
p->SynthClock / 1000.0, hsync, refresh, desc, desc2); p->SynthClock / 1000.0, hsync, refresh, desc, desc2);
} }
if (hsync != 0 && refresh != 0) if (hsync != 0 && refresh != 0)
PrintModeline(scrp->scrnIndex,p); xf86PrintModeline(scrp->scrnIndex,p);
p = p->next; p = p->next;
} while (p != NULL && p != scrp->modes); } while (p != NULL && p != scrp->modes);
} }
/**
* Adds the new mode into the mode list, and returns the new list
*
* \param modes doubly-linked mode list.
*/
_X_EXPORT DisplayModePtr
xf86ModesAdd(DisplayModePtr modes, DisplayModePtr new)
{
if (modes == NULL)
return new;
if (new) {
DisplayModePtr mode = modes;
while (mode->next)
mode = mode->next;
mode->next = new;
new->prev = mode;
}
return modes;
}

View File

@ -90,16 +90,6 @@
#include "mi.h" #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; xEvent *xf86Events = NULL;
static Bool static Bool
@ -140,33 +130,6 @@ xf86ProcessCommonOptions(LocalDevicePtr local,
} }
} }
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 -- * xf86ActivateDevice --
@ -193,8 +156,6 @@ xf86ActivateDevice(LocalDevicePtr local)
dev->public.devicePrivate = (pointer) local; dev->public.devicePrivate = (pointer) local;
local->dev = dev; local->dev = dev;
xf86XinputFinalizeInit(dev);
dev->coreEvents = local->flags & XI86_ALWAYS_CORE; dev->coreEvents = local->flags & XI86_ALWAYS_CORE;
RegisterOtherDevice(dev); RegisterOtherDevice(dev);
@ -434,8 +395,10 @@ xf86PostMotionEvent(DeviceIntPtr device,
{ {
va_list var; va_list var;
int i = 0, nevents = 0; int i = 0, nevents = 0;
Bool drag = xf86SendDragEvents(device);
int *valuators = NULL; int *valuators = NULL;
int flags = 0; int flags = 0;
xEvent *xE = NULL;
if (is_absolute) if (is_absolute)
flags = POINTER_ABSOLUTE; flags = POINTER_ABSOLUTE;
@ -458,8 +421,14 @@ xf86PostMotionEvent(DeviceIntPtr device,
flags, first_valuator, num_valuators, flags, first_valuator, num_valuators,
valuators); valuators);
for (i = 0; i < nevents; i++) for (i = 0; i < nevents; i++) {
mieqEnqueue(device, xf86Events + 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); xfree(valuators);
} }

View File

@ -4,10 +4,11 @@ module_LTLIBRARIES = libddc.la
libddc_la_LDFLAGS = -avoid-version libddc_la_LDFLAGS = -avoid-version
libddc_la_SOURCES = xf86DDC.c edid.c interpret_edid.c print_edid.c \ libddc_la_SOURCES = xf86DDC.c edid.c interpret_edid.c print_edid.c \
interpret_vdif.c print_vdif.c ddcProperty.c interpret_vdif.c print_vdif.c ddcProperty.c \
edid_modes.c
INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c INCLUDES = $(XORG_INCS) -I$(srcdir)/../i2c
AM_CFLAGS = $(XORG_CFLAGS) AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
EXTRA_DIST = ddcPriv.h DDC.HOWTO EXTRA_DIST = ddcPriv.h DDC.HOWTO

View File

@ -32,392 +32,6 @@
#include "propertyst.h" #include "propertyst.h"
#include "xf86DDC.h" #include "xf86DDC.h"
/*
* xf86Mode.c should have a some more DisplayModePtr list handling.
*/
static DisplayModePtr
xf86ModesAdd(DisplayModePtr Modes, DisplayModePtr Additions)
{
if (!Modes) {
if (Additions)
return Additions;
else
return NULL;
}
if (Additions) {
DisplayModePtr Mode = Modes;
while (Mode->next)
Mode = Mode->next;
Mode->next = Additions;
Additions->prev = Mode;
}
return Modes;
}
static DisplayModePtr
xf86ModeCopy(DisplayModePtr Mode)
{
DisplayModePtr New;
if (!Mode)
return NULL;
New = xnfalloc(sizeof(DisplayModeRec));
memcpy(New, Mode, sizeof(DisplayModeRec));
New->name = xnfalloc(strlen(Mode->name) + 1);
memcpy(New->name, Mode->name, strlen(Mode->name) + 1);
/* We ignore privates as DDC code doesn't use it currently */
return New;
}
/*
* Temporary.
*/
static void
add(char **p, char *new)
{
*p = xnfrealloc(*p, strlen(*p) + strlen(new) + 2);
strcat(*p, " ");
strcat(*p, new);
}
static void
PrintModeline(int scrnIndex,DisplayModePtr mode)
{
char tmp[256];
char *flags = xnfcalloc(1, 1);
if (mode->HSkew) {
snprintf(tmp, 256, "hskew %i", mode->HSkew);
add(&flags, tmp);
}
if (mode->VScan) {
snprintf(tmp, 256, "vscan %i", mode->VScan);
add(&flags, tmp);
}
if (mode->Flags & V_INTERLACE) add(&flags, "interlace");
if (mode->Flags & V_CSYNC) add(&flags, "composite");
if (mode->Flags & V_DBLSCAN) add(&flags, "doublescan");
if (mode->Flags & V_BCAST) add(&flags, "bcast");
if (mode->Flags & V_PHSYNC) add(&flags, "+hsync");
if (mode->Flags & V_NHSYNC) add(&flags, "-hsync");
if (mode->Flags & V_PVSYNC) add(&flags, "+vsync");
if (mode->Flags & V_NVSYNC) add(&flags, "-vsync");
if (mode->Flags & V_PCSYNC) add(&flags, "+csync");
if (mode->Flags & V_NCSYNC) add(&flags, "-csync");
#if 0
if (mode->Flags & V_CLKDIV2) add(&flags, "vclk/2");
#endif
xf86DrvMsgVerb(scrnIndex, X_INFO, 3,
"Modeline \"%s\" %6.2f %i %i %i %i %i %i %i %i%s\n",
mode->name, mode->Clock/1000., mode->HDisplay,
mode->HSyncStart, mode->HSyncEnd, mode->HTotal,
mode->VDisplay, mode->VSyncStart, mode->VSyncEnd,
mode->VTotal, flags);
xfree(flags);
}
/*
* TODO:
* - for those with access to the VESA DMT standard; review please.
*/
#define MODEPREFIX(name) NULL, NULL, name, 0,M_T_DRIVER
#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
DisplayModeRec DDCEstablishedModes[17] = {
{ MODEPREFIX("800x600"), 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz */
{ MODEPREFIX("800x600"), 36000, 800, 824, 896, 1024, 0, 600, 601, 603, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@56Hz */
{ MODEPREFIX("640x480"), 31500, 640, 656, 720, 840, 0, 480, 481, 484, 500, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@75Hz */
{ MODEPREFIX("640x480"), 31500, 640, 664, 704, 832, 0, 480, 489, 491, 520, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@72Hz */
{ MODEPREFIX("640x480"), 30240, 640, 704, 768, 864, 0, 480, 483, 486, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@67Hz */
{ MODEPREFIX("640x480"), 25200, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz */
{ MODEPREFIX("720x400"), 35500, 720, 738, 846, 900, 0, 400, 421, 423, 449, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 720x400@88Hz */
{ MODEPREFIX("720x400"), 28320, 720, 738, 846, 900, 0, 400, 412, 414, 449, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x400@70Hz */
{ MODEPREFIX("1280x1024"), 135000, 1280, 1296, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@75Hz */
{ MODEPREFIX("1024x768"), 78800, 1024, 1040, 1136, 1312, 0, 768, 769, 772, 800, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1024x768@75Hz */
{ MODEPREFIX("1024x768"), 75000, 1024, 1048, 1184, 1328, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@70Hz */
{ MODEPREFIX("1024x768"), 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz */
{ MODEPREFIX("1024x768"), 44900, 1024, 1032, 1208, 1264, 0, 768, 768, 776, 817, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* 1024x768@43Hz */
{ MODEPREFIX("832x624"), 57284, 832, 864, 928, 1152, 0, 624, 625, 628, 667, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 832x624@75Hz */
{ MODEPREFIX("800x600"), 49500, 800, 816, 896, 1056, 0, 600, 601, 604, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@75Hz */
{ MODEPREFIX("800x600"), 50000, 800, 856, 976, 1040, 0, 600, 637, 643, 666, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@72Hz */
{ MODEPREFIX("1152x864"), 108000, 1152, 1216, 1344, 1600, 0, 864, 865, 868, 900, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1152x864@75Hz */
};
static DisplayModePtr
DDCModesFromEstablished(int scrnIndex, struct established_timings *timing)
{
DisplayModePtr Modes = NULL, Mode = NULL;
CARD32 bits = (timing->t1) | (timing->t2 << 8) |
((timing->t_manu & 0x80) << 9);
int i;
for (i = 0; i < 17; i++)
if (bits & (0x01 << i)) {
Mode = xf86ModeCopy(&(DDCEstablishedModes[i]));
Modes = xf86ModesAdd(Modes, Mode);
}
return Modes;
}
/*
*
*/
static DisplayModePtr
DDCModesFromStandardTiming(int scrnIndex, struct std_timings *timing)
{
DisplayModePtr Modes = NULL, Mode = NULL;
int i;
for (i = 0; i < STD_TIMINGS; i++)
if (timing[i].hsize && timing[i].vsize && timing[i].refresh) {
Mode = xf86CVTMode(timing[i].hsize, timing[i].vsize,
timing[i].refresh, FALSE, FALSE);
Mode->type = M_T_DRIVER;
Modes = xf86ModesAdd(Modes, Mode);
}
return Modes;
}
/*
*
*/
static DisplayModePtr
DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
int preferred)
{
DisplayModePtr Mode;
/* We don't do stereo */
if (timing->stereo) {
xf86DrvMsg(scrnIndex, X_INFO, "%s: Ignoring: We don't handle stereo.\n",
__func__);
return NULL;
}
/* We only do seperate sync currently */
if (timing->sync != 0x03) {
xf86DrvMsg(scrnIndex, X_INFO, "%s: %dx%d Warning: We only handle seperate"
" sync.\n", __func__, timing->h_active, timing->v_active);
}
Mode = xnfalloc(sizeof(DisplayModeRec));
memset(Mode, 0, sizeof(DisplayModeRec));
Mode->name = xnfalloc(10); /* "1234x1234" */
xf86snprintf(Mode->name, 20, "%dx%d", timing->h_active,
timing->v_active);
Mode->type = M_T_DRIVER;
if (preferred)
Mode->type |= M_T_PREFERRED;
Mode->Clock = timing->clock / 1000.0;
Mode->HDisplay = timing->h_active;
Mode->HSyncStart = timing->h_active + timing->h_sync_off;
Mode->HSyncEnd = Mode->HSyncStart + timing->h_sync_width;
Mode->HTotal = timing->h_active + timing->h_blanking;
Mode->VDisplay = timing->v_active;
Mode->VSyncStart = timing->v_active + timing->v_sync_off;
Mode->VSyncEnd = Mode->VSyncStart + timing->v_sync_width;
Mode->VTotal = timing->v_active + timing->v_blanking;
/* We ignore h/v_size and h/v_border for now. */
if (timing->interlaced)
Mode->Flags |= V_INTERLACE;
if (timing->misc & 0x02)
Mode->Flags |= V_PHSYNC;
else
Mode->Flags |= V_NHSYNC;
if (timing->misc & 0x01)
Mode->Flags |= V_PVSYNC;
else
Mode->Flags |= V_NVSYNC;
return Mode;
}
/*
*
*/
static void
DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
{
DisplayModePtr Mode = Modes;
if (!Monitor || !Modes)
return;
/* set up the ranges for scanning through the modes */
Monitor->nHsync = 1;
Monitor->hsync[0].lo = 1024.0;
Monitor->hsync[0].hi = 0.0;
Monitor->nVrefresh = 1;
Monitor->vrefresh[0].lo = 1024.0;
Monitor->vrefresh[0].hi = 0.0;
while (Mode) {
if (!Mode->HSync)
Mode->HSync = ((float) Mode->Clock ) / ((float) Mode->HTotal);
if (!Mode->VRefresh)
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
((float) (Mode->HTotal * Mode->VTotal));
if (Mode->HSync < Monitor->hsync[0].lo)
Monitor->hsync[0].lo = Mode->HSync;
if (Mode->HSync > Monitor->hsync[0].hi)
Monitor->hsync[0].hi = Mode->HSync;
if (Mode->VRefresh < Monitor->vrefresh[0].lo)
Monitor->vrefresh[0].lo = Mode->VRefresh;
if (Mode->VRefresh > Monitor->vrefresh[0].hi)
Monitor->vrefresh[0].hi = Mode->VRefresh;
Mode = Mode->next;
}
}
/*
* Fill out MonPtr with xf86MonPtr information.
*/
void
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
{
DisplayModePtr Modes = NULL, Mode;
int i, clock;
Bool have_hsync = FALSE, have_vrefresh = FALSE;
int preferred;
if (!Monitor || !DDC)
return;
Monitor->DDC = DDC;
preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
Monitor->widthmm = 10 * DDC->features.hsize;
Monitor->heightmm = 10 * DDC->features.vsize;
/* If this is a digital display, then we can use reduced blanking */
if (DDC->features.input_type)
Monitor->reducedblanking = TRUE;
/* Allow the user to also enable this through config */
/* Add established timings */
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
Modes = xf86ModesAdd(Modes, Mode);
/* Add standard timings */
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
Modes = xf86ModesAdd(Modes, Mode);
/* Skip EDID ranges if they were specified in the config file */
have_hsync = (Monitor->nHsync != 0);
have_vrefresh = (Monitor->nVrefresh != 0);
/* Go through the detailed monitor sections */
for (i = 0; i < DET_TIMINGS; i++)
switch (DDC->det_mon[i].type) {
case DS_RANGES:
if (!have_hsync) {
if (!Monitor->nHsync)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for horizontal sync\n");
Monitor->hsync[Monitor->nHsync].lo =
DDC->det_mon[i].section.ranges.min_h;
Monitor->hsync[Monitor->nHsync].hi =
DDC->det_mon[i].section.ranges.max_h;
Monitor->nHsync++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using hsync ranges from config file\n");
}
if (!have_vrefresh) {
if (!Monitor->nVrefresh)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for vertical refresh\n");
Monitor->vrefresh[Monitor->nVrefresh].lo =
DDC->det_mon[i].section.ranges.min_v;
Monitor->vrefresh[Monitor->nVrefresh].hi =
DDC->det_mon[i].section.ranges.max_v;
Monitor->nVrefresh++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using vrefresh ranges from config file\n");
}
clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
if (clock > Monitor->maxPixClock)
Monitor->maxPixClock = clock;
break;
case DT:
Mode = DDCModeFromDetailedTiming(scrnIndex,
&DDC->det_mon[i].section.d_timings,
preferred);
preferred = 0;
Modes = xf86ModesAdd(Modes, Mode);
break;
case DS_STD_TIMINGS:
Mode = DDCModesFromStandardTiming(scrnIndex,
DDC->det_mon[i].section.std_t);
Modes = xf86ModesAdd(Modes, Mode);
break;
default:
break;
}
if (Modes) {
/* Print Modes */
xf86DrvMsg(scrnIndex, X_INFO, "Printing DDC gathered Modelines:\n");
Mode = Modes;
while (Mode) {
PrintModeline(scrnIndex, Mode);
Mode = Mode->next;
}
/* Do we still need ranges to be filled in? */
if (!Monitor->nHsync || !Monitor->nVrefresh)
DDCGuessRangesFromModes(scrnIndex, Monitor, Modes);
/* look for last Mode */
Mode = Modes;
while (Mode->next)
Mode = Mode->next;
/* add to MonPtr */
if (Monitor->Modes) {
Monitor->Last->next = Modes;
Modes->prev = Monitor->Last;
Monitor->Last = Mode;
} else {
Monitor->Modes = Modes;
Monitor->Last = Mode;
}
}
}
#define EDID1_ATOM_NAME "XFree86_DDC_EDID1_RAWDATA" #define EDID1_ATOM_NAME "XFree86_DDC_EDID1_RAWDATA"
#define EDID2_ATOM_NAME "XFree86_DDC_EDID2_RAWDATA" #define EDID2_ATOM_NAME "XFree86_DDC_EDID2_RAWDATA"
#define VDIF_ATOM_NAME "XFree86_DDC_VDIF_RAWDATA" #define VDIF_ATOM_NAME "XFree86_DDC_VDIF_RAWDATA"

348
hw/xfree86/ddc/edid_modes.c Normal file
View File

@ -0,0 +1,348 @@
/*
* Copyright 2006 Luc Verhaegen.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sub license,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) 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 NON-INFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS 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.
*/
#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf86.h"
#include "xf86DDC.h"
#include <X11/Xatom.h>
#include "property.h"
#include "propertyst.h"
#include "xf86DDC.h"
/*
* TODO:
* - for those with access to the VESA DMT standard; review please.
*/
#define MODEPREFIX(name) NULL, NULL, name, 0,M_T_DRIVER
#define MODESUFFIX 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,FALSE,FALSE,0,NULL,0,0.0,0.0
DisplayModeRec DDCEstablishedModes[17] = {
{ MODEPREFIX("800x600"), 40000, 800, 840, 968, 1056, 0, 600, 601, 605, 628, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@60Hz */
{ MODEPREFIX("800x600"), 36000, 800, 824, 896, 1024, 0, 600, 601, 603, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@56Hz */
{ MODEPREFIX("640x480"), 31500, 640, 656, 720, 840, 0, 480, 481, 484, 500, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@75Hz */
{ MODEPREFIX("640x480"), 31500, 640, 664, 704, 832, 0, 480, 489, 491, 520, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@72Hz */
{ MODEPREFIX("640x480"), 30240, 640, 704, 768, 864, 0, 480, 483, 486, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@67Hz */
{ MODEPREFIX("640x480"), 25200, 640, 656, 752, 800, 0, 480, 490, 492, 525, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 640x480@60Hz */
{ MODEPREFIX("720x400"), 35500, 720, 738, 846, 900, 0, 400, 421, 423, 449, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 720x400@88Hz */
{ MODEPREFIX("720x400"), 28320, 720, 738, 846, 900, 0, 400, 412, 414, 449, 0, V_NHSYNC | V_PVSYNC, MODESUFFIX }, /* 720x400@70Hz */
{ MODEPREFIX("1280x1024"), 135000, 1280, 1296, 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1280x1024@75Hz */
{ MODEPREFIX("1024x768"), 78800, 1024, 1040, 1136, 1312, 0, 768, 769, 772, 800, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1024x768@75Hz */
{ MODEPREFIX("1024x768"), 75000, 1024, 1048, 1184, 1328, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@70Hz */
{ MODEPREFIX("1024x768"), 65000, 1024, 1048, 1184, 1344, 0, 768, 771, 777, 806, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 1024x768@60Hz */
{ MODEPREFIX("1024x768"), 44900, 1024, 1032, 1208, 1264, 0, 768, 768, 776, 817, 0, V_PHSYNC | V_PVSYNC | V_INTERLACE, MODESUFFIX }, /* 1024x768@43Hz */
{ MODEPREFIX("832x624"), 57284, 832, 864, 928, 1152, 0, 624, 625, 628, 667, 0, V_NHSYNC | V_NVSYNC, MODESUFFIX }, /* 832x624@75Hz */
{ MODEPREFIX("800x600"), 49500, 800, 816, 896, 1056, 0, 600, 601, 604, 625, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@75Hz */
{ MODEPREFIX("800x600"), 50000, 800, 856, 976, 1040, 0, 600, 637, 643, 666, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 800x600@72Hz */
{ MODEPREFIX("1152x864"), 108000, 1152, 1216, 1344, 1600, 0, 864, 865, 868, 900, 0, V_PHSYNC | V_PVSYNC, MODESUFFIX }, /* 1152x864@75Hz */
};
static DisplayModePtr
DDCModesFromEstablished(int scrnIndex, struct established_timings *timing)
{
DisplayModePtr Modes = NULL, Mode = NULL;
CARD32 bits = (timing->t1) | (timing->t2 << 8) |
((timing->t_manu & 0x80) << 9);
int i;
for (i = 0; i < 17; i++) {
if (bits & (0x01 << i)) {
Mode = xf86DuplicateMode(&DDCEstablishedModes[i]);
Modes = xf86ModesAdd(Modes, Mode);
}
}
return Modes;
}
/*
*
*/
static DisplayModePtr
DDCModesFromStandardTiming(int scrnIndex, struct std_timings *timing)
{
DisplayModePtr Modes = NULL, Mode = NULL;
int i;
for (i = 0; i < STD_TIMINGS; i++) {
if (timing[i].hsize && timing[i].vsize && timing[i].refresh) {
Mode = xf86CVTMode(timing[i].hsize, timing[i].vsize,
timing[i].refresh, FALSE, FALSE);
Mode->type = M_T_DRIVER;
Modes = xf86ModesAdd(Modes, Mode);
}
}
return Modes;
}
/*
*
*/
static DisplayModePtr
DDCModeFromDetailedTiming(int scrnIndex, struct detailed_timings *timing,
int preferred)
{
DisplayModePtr Mode;
/* We don't do stereo */
if (timing->stereo) {
xf86DrvMsg(scrnIndex, X_INFO,
"%s: Ignoring: We don't handle stereo.\n", __func__);
return NULL;
}
/* We only do seperate sync currently */
if (timing->sync != 0x03) {
xf86DrvMsg(scrnIndex, X_INFO,
"%s: %dx%d Warning: We only handle seperate"
" sync.\n", __func__, timing->h_active, timing->v_active);
}
Mode = xnfalloc(sizeof(DisplayModeRec));
memset(Mode, 0, sizeof(DisplayModeRec));
Mode->type = M_T_DRIVER;
if (preferred)
Mode->type |= M_T_PREFERRED;
Mode->Clock = timing->clock / 1000.0;
Mode->HDisplay = timing->h_active;
Mode->HSyncStart = timing->h_active + timing->h_sync_off;
Mode->HSyncEnd = Mode->HSyncStart + timing->h_sync_width;
Mode->HTotal = timing->h_active + timing->h_blanking;
Mode->VDisplay = timing->v_active;
Mode->VSyncStart = timing->v_active + timing->v_sync_off;
Mode->VSyncEnd = Mode->VSyncStart + timing->v_sync_width;
Mode->VTotal = timing->v_active + timing->v_blanking;
xf86SetModeDefaultName(Mode);
/* We ignore h/v_size and h/v_border for now. */
if (timing->interlaced)
Mode->Flags |= V_INTERLACE;
if (timing->misc & 0x02)
Mode->Flags |= V_PHSYNC;
else
Mode->Flags |= V_NHSYNC;
if (timing->misc & 0x01)
Mode->Flags |= V_PVSYNC;
else
Mode->Flags |= V_NVSYNC;
return Mode;
}
/*
*
*/
static void
DDCGuessRangesFromModes(int scrnIndex, MonPtr Monitor, DisplayModePtr Modes)
{
DisplayModePtr Mode = Modes;
if (!Monitor || !Modes)
return;
/* set up the ranges for scanning through the modes */
Monitor->nHsync = 1;
Monitor->hsync[0].lo = 1024.0;
Monitor->hsync[0].hi = 0.0;
Monitor->nVrefresh = 1;
Monitor->vrefresh[0].lo = 1024.0;
Monitor->vrefresh[0].hi = 0.0;
while (Mode) {
if (!Mode->HSync)
Mode->HSync = ((float) Mode->Clock ) / ((float) Mode->HTotal);
if (!Mode->VRefresh)
Mode->VRefresh = (1000.0 * ((float) Mode->Clock)) /
((float) (Mode->HTotal * Mode->VTotal));
if (Mode->HSync < Monitor->hsync[0].lo)
Monitor->hsync[0].lo = Mode->HSync;
if (Mode->HSync > Monitor->hsync[0].hi)
Monitor->hsync[0].hi = Mode->HSync;
if (Mode->VRefresh < Monitor->vrefresh[0].lo)
Monitor->vrefresh[0].lo = Mode->VRefresh;
if (Mode->VRefresh > Monitor->vrefresh[0].hi)
Monitor->vrefresh[0].hi = Mode->VRefresh;
Mode = Mode->next;
}
}
DisplayModePtr
xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC)
{
int preferred, i;
DisplayModePtr Modes = NULL, Mode;
preferred = PREFERRED_TIMING_MODE(DDC->features.msc);
/* Add established timings */
Mode = DDCModesFromEstablished(scrnIndex, &DDC->timings1);
Modes = xf86ModesAdd(Modes, Mode);
/* Add standard timings */
Mode = DDCModesFromStandardTiming(scrnIndex, DDC->timings2);
Modes = xf86ModesAdd(Modes, Mode);
for (i = 0; i < DET_TIMINGS; i++) {
struct detailed_monitor_section *det_mon = &DDC->det_mon[i];
switch (det_mon->type) {
case DT:
Mode = DDCModeFromDetailedTiming(scrnIndex,
&det_mon->section.d_timings,
preferred);
preferred = 0;
Modes = xf86ModesAdd(Modes, Mode);
break;
case DS_STD_TIMINGS:
Mode = DDCModesFromStandardTiming(scrnIndex,
det_mon->section.std_t);
Modes = xf86ModesAdd(Modes, Mode);
break;
default:
break;
}
}
return Modes;
}
/*
* Fill out MonPtr with xf86MonPtr information.
*/
void
xf86DDCMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
{
DisplayModePtr Modes = NULL, Mode;
int i, clock;
Bool have_hsync = FALSE, have_vrefresh = FALSE;
if (!Monitor || !DDC)
return;
Monitor->DDC = DDC;
Monitor->widthmm = 10 * DDC->features.hsize;
Monitor->heightmm = 10 * DDC->features.vsize;
/* If this is a digital display, then we can use reduced blanking */
if (DDC->features.input_type)
Monitor->reducedblanking = TRUE;
/* Allow the user to also enable this through config */
Modes = xf86DDCGetModes(scrnIndex, DDC);
/* Skip EDID ranges if they were specified in the config file */
have_hsync = (Monitor->nHsync != 0);
have_vrefresh = (Monitor->nVrefresh != 0);
/* Go through the detailed monitor sections */
for (i = 0; i < DET_TIMINGS; i++) {
switch (DDC->det_mon[i].type) {
case DS_RANGES:
if (!have_hsync) {
if (!Monitor->nHsync)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for horizontal sync\n");
Monitor->hsync[Monitor->nHsync].lo =
DDC->det_mon[i].section.ranges.min_h;
Monitor->hsync[Monitor->nHsync].hi =
DDC->det_mon[i].section.ranges.max_h;
Monitor->nHsync++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using hsync ranges from config file\n");
}
if (!have_vrefresh) {
if (!Monitor->nVrefresh)
xf86DrvMsg(scrnIndex, X_INFO,
"Using EDID range info for vertical refresh\n");
Monitor->vrefresh[Monitor->nVrefresh].lo =
DDC->det_mon[i].section.ranges.min_v;
Monitor->vrefresh[Monitor->nVrefresh].hi =
DDC->det_mon[i].section.ranges.max_v;
Monitor->nVrefresh++;
} else {
xf86DrvMsg(scrnIndex, X_INFO,
"Using vrefresh ranges from config file\n");
}
clock = DDC->det_mon[i].section.ranges.max_clock * 1000;
if (clock > Monitor->maxPixClock)
Monitor->maxPixClock = clock;
break;
default:
break;
}
}
if (Modes) {
/* Print Modes */
xf86DrvMsg(scrnIndex, X_INFO, "Printing DDC gathered Modelines:\n");
Mode = Modes;
while (Mode) {
xf86PrintModeline(scrnIndex, Mode);
Mode = Mode->next;
}
/* Do we still need ranges to be filled in? */
if (!Monitor->nHsync || !Monitor->nVrefresh)
DDCGuessRangesFromModes(scrnIndex, Monitor, Modes);
/* look for last Mode */
Mode = Modes;
while (Mode->next)
Mode = Mode->next;
/* add to MonPtr */
if (Monitor->Modes) {
Monitor->Last->next = Modes;
Modes->prev = Monitor->Last;
Monitor->Last = Mode;
} else {
Monitor->Modes = Modes;
Monitor->Last = Mode;
}
}
}

View File

@ -304,16 +304,18 @@ get_detailed_timing_section(Uchar *c, struct detailed_timings *r)
r->misc = MISC; r->misc = MISC;
} }
#define MAX_EDID_MINOR 3
static Bool static Bool
validate_version(int scrnIndex, struct edid_version *r) validate_version(int scrnIndex, struct edid_version *r)
{ {
if (r->version != 1) if (r->version != 1)
return FALSE; return FALSE;
if (r->revision > 3) {
xf86DrvMsg(scrnIndex, X_ERROR,"EDID Version 1.%i not yet supported\n", if (r->revision > MAX_EDID_MINOR)
r->revision); xf86DrvMsg(scrnIndex, X_WARNING,
return FALSE; "Assuming version 1.%d is compatible with 1.%d\n",
} r->revision, MAX_EDID_MINOR);
return TRUE; return TRUE;
} }

View File

@ -59,6 +59,8 @@ extern void xf86print_vdif(
xf86vdifPtr v xf86vdifPtr v
); );
DisplayModePtr xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC);
#endif #endif

View File

@ -11,7 +11,7 @@ if XV
XV_SRCS = xvmod.c xvmodproc.h XV_SRCS = xvmod.c xvmodproc.h
endif endif
AM_CFLAGS = @XORG_CFLAGS@ AM_CFLAGS = @DIX_CFLAGS@ @XORG_CFLAGS@
INCLUDES = @XORG_INCS@ \ INCLUDES = @XORG_INCS@ \
-I$(top_srcdir)/afb \ -I$(top_srcdir)/afb \
-I$(top_srcdir)/mfb \ -I$(top_srcdir)/mfb \

View File

@ -57,9 +57,6 @@ static XF86ModuleVersionInfo VersRec =
_X_EXPORT XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL }; _X_EXPORT XF86ModuleData type1ModuleData = { &VersRec, type1Setup, NULL };
extern void Type1RegisterFontFileFunctions(void); extern void Type1RegisterFontFileFunctions(void);
#ifdef BUILDCID
extern void CIDRegisterFontFileFunctions(void);
#endif
FontModule type1Module = { FontModule type1Module = {
Type1RegisterFontFileFunctions, Type1RegisterFontFileFunctions,
@ -67,23 +64,11 @@ FontModule type1Module = {
NULL NULL
}; };
#ifdef BUILDCID
FontModule CIDModule = {
CIDRegisterFontFileFunctions,
"CID",
NULL
};
#endif
static pointer static pointer
type1Setup(pointer module, pointer opts, int *errmaj, int *errmin) type1Setup(pointer module, pointer opts, int *errmaj, int *errmin)
{ {
type1Module.module = module; type1Module.module = module;
LoadFont(&type1Module); LoadFont(&type1Module);
#ifdef BUILDCID
CIDModule.module = module;
LoadFont(&CIDModule);
#endif
/* Need a non-NULL return */ /* Need a non-NULL return */
return (pointer)1; return (pointer)1;

View File

@ -1,7 +1,7 @@
.\" $XdotOrg: xserver/xorg/hw/xfree86/doc/man/Xorg.man.pre,v 1.3 2005/07/04 18:41:01 ajax Exp $ .\" $XdotOrg: xserver/xorg/hw/xfree86/doc/man/Xorg.man.pre,v 1.3 2005/07/04 18:41:01 ajax Exp $
.TH __xservername__ __appmansuffix__ __vendorversion__ .TH __xservername__ __appmansuffix__ __vendorversion__
.SH NAME .SH NAME
__xservername__ - X11R6 X server __xservername__ - X11R7 X server
.SH SYNOPSIS .SH SYNOPSIS
.B __xservername__ .B __xservername__
.RI [\fB:\fP display ] .RI [\fB:\fP display ]
@ -13,30 +13,26 @@ is a full featured X server that was originally designed for UNIX and
UNIX-like operating systems running on Intel x86 hardware. It now runs UNIX-like operating systems running on Intel x86 hardware. It now runs
on a wider range of hardware and OS platforms. on a wider range of hardware and OS platforms.
.PP .PP
This work was derived from This work was derived by the X.Org Foundation from the XFree86 Project's
.I "XFree86\ 4.4rc2" .I "XFree86\ 4.4rc2"
by the X.Org Foundation. release.
The XFree86 4.4rc2 release was originally derived from The XFree86 release was originally derived from
.I "X386\ 1.2" .I "X386\ 1.2"
by Thomas Roell which was contributed to X11R5 by Snitily Graphics by Thomas Roell which was contributed to X11R5 by Snitily Graphics
Consulting Service. The Consulting Service.
.B __xservername__
server architecture includes
among many other things a loadable module system derived from code
donated by Metro Link, Inc. The current __xservername__ release is compatible
with X11R6.6.
.SH PLATFORMS .SH PLATFORMS
.PP .PP
.B __xservername__ .B __xservername__
operates under a wide range of operating systems and hardware platforms. operates under a wide range of operating systems and hardware platforms.
The Intel x86 (IA32) architecture is the most widely supported hardware The Intel x86 (IA32) architecture is the most widely supported hardware
platform. Other hardware platforms include Compaq Alpha, Intel IA64, platform. Other hardware platforms include Compaq Alpha, Intel IA64, AMD64,
SPARC and PowerPC. The most widely supported operating systems are the SPARC and PowerPC. The most widely supported operating systems are the
free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD and free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD,
OpenBSD. Commercial UNIX operating systems such as Solaris (x86) and OpenBSD, and Solaris. Commercial UNIX operating systems such as
UnixWare are also supported. Other supported operating systems include UnixWare are also supported. Other supported operating systems include
LynxOS, and GNU Hurd. Darwin and Mac OS X are supported with the LynxOS, and GNU Hurd. Darwin and Mac OS X are supported with the
XDarwin(1) X server. Win32/Cygwin is supported with the XWin X server. XDarwin(__appmansuffix__) X server. Win32/Cygwin is supported with the
XWin(__appmansuffix__) X server.
.PP .PP
.SH "NETWORK CONNECTIONS" .SH "NETWORK CONNECTIONS"
.B __xservername__ .B __xservername__
@ -119,13 +115,14 @@ one way, the highest precedence mechanism is used. The list of mechanisms
is ordered from highest precedence to lowest. Note that not all parameters is ordered from highest precedence to lowest. Note that not all parameters
can be supplied via all methods. The available command line options can be supplied via all methods. The available command line options
and environment variables (and some defaults) are described here and in and environment variables (and some defaults) are described here and in
the Xserver(1) manual page. Most configuration file parameters, with the Xserver(__appmansuffix__) manual page. Most configuration file
their defaults, are described in the __xconfigfile__(__filemansuffix__) manual parameters, with their defaults, are described in the
page. Driver and module specific configuration parameters are described __xconfigfile__(__filemansuffix__) manual page. Driver and module specific
in the relevant driver or module manual page. configuration parameters are described in the relevant driver or module
manual page.
.PP .PP
In addition to the normal server options described in the Xserver(1) In addition to the normal server options described in the
manual page, Xserver(__appmansuffix__) manual page,
.B __xservername__ .B __xservername__
accepts the following command line switches: accepts the following command line switches:
.TP 8 .TP 8
@ -385,7 +382,8 @@ options.
When this option is specified, the When this option is specified, the
.B __xservername__ .B __xservername__
server scans the PCI bus, and prints out some information about each server scans the PCI bus, and prints out some information about each
device that was detected. See also scanpci(1) and pcitweak(1). device that was detected. See also scanpci(__appmansuffix__)
and pcitweak(__appmansuffix__).
.TP 8 .TP 8
.BI \-screen " screen-name" .BI \-screen " screen-name"
Use the __xconfigfile__(__filemansuffix__) file Use the __xconfigfile__(__filemansuffix__) file
@ -426,6 +424,12 @@ Print out the server version, patchlevel, release date, the operating
system/platform it was built on, and whether it includes module loader system/platform it was built on, and whether it includes module loader
support. support.
.TP 8 .TP 8
.B \-showDefaultModulePath
Print out the default module path the server was compiled with.
.TP 8
.B \-showDefaultLibPath
Print out the path libraries should be installed to.
.TP 8
.BI \-config " file" .BI \-config " file"
Read the server configuration from Read the server configuration from
.IR file . .IR file .
@ -502,13 +506,12 @@ for its initial setup.
Refer to the __xconfigfile__(__filemansuffix__) manual page for information Refer to the __xconfigfile__(__filemansuffix__) manual page for information
about the format of this file. about the format of this file.
.PP .PP
Starting with version 4.4,
.B __xservername__ .B __xservername__
has a mechanism for automatically generating a built-in configuration has a mechanism for automatically generating a built-in configuration
at run-time when no at run-time when no
.B __xconfigfile__ .B __xconfigfile__
file is present. The current version of this automatic configuration file is present. The current version of this automatic configuration
mechanism works in three ways. mechanism works in two ways.
.PP .PP
The first is via enhancements that have made many components of the The first is via enhancements that have made many components of the
.B __xconfigfile__ .B __xconfigfile__
@ -517,14 +520,7 @@ reasonably deduced doesn't need to be specified explicitly, greatly
reducing the amount of built-in configuration information that needs to reducing the amount of built-in configuration information that needs to
be generated at run-time. be generated at run-time.
.PP .PP
The second is to use an external utility called getconfig(1), when The second is to have "safe" fallbacks for most configuration information.
available, to use meta-configuration information to generate a suitable
configuration for the primary video device. The meta-configuration
information can be updated to allow an existing installation to get the
best out of new hardware or to work around bugs that are found
post-release.
.PP
The third is to have "safe" fallbacks for most configuration information.
This maximises the likelihood that the This maximises the likelihood that the
.B __xservername__ .B __xservername__
server will start up in some usable configuration even when information server will start up in some usable configuration even when information
@ -580,7 +576,7 @@ Client error message database.
.B __projectroot__/lib/X11/app-defaults/\(** .B __projectroot__/lib/X11/app-defaults/\(**
Client resource specifications. Client resource specifications.
.TP 30 .TP 30
.B __projectroot__/man/man?/\(** .B __mandir__/man?/\(**
Manual pages. Manual pages.
.TP 30 .TP 30
.BI /etc/X n .hosts .BI /etc/X n .hosts
@ -638,7 +634,7 @@ __xservername__ was originally based on XFree86 4.4rc2.
That was originally based on \fIX386 1.2\fP by Thomas Roell, which That was originally based on \fIX386 1.2\fP by Thomas Roell, which
was contributed to the then X Consortium's X11R5 distribution by SGCS. was contributed to the then X Consortium's X11R5 distribution by SGCS.
.PP .PP
__xservername__ is released by the X.org Foundation. __xservername__ is released by the X.Org Foundation.
.PP .PP
The project that became XFree86 was originally founded in 1992 by The project that became XFree86 was originally founded in 1992 by
David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat. David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat.
@ -679,9 +675,9 @@ Orest Zborowski \fIorestz@eskimo.com\fP
.RE .RE
.PP .PP
__xservername__ source is available from the FTP server __xservername__ source is available from the FTP server
\fI<ftp://ftp.x.org/>\fP, and from the X.org \fI<ftp://ftp.x.org/>\fP, and from the X.Org
server \fI<http://www.freedesktop.org/cvs/>\fP. Documentation and other server \fI<http://gitweb.freedesktop.org/>\fP. Documentation and other
information can be found from the X.org web site information can be found from the X.Org web site
\fI<http://www.x.org/>\fP. \fI<http://www.x.org/>\fP.
.SH LEGAL .SH LEGAL

View File

@ -311,7 +311,6 @@ font path elements:
.I __projectroot__/lib/X11/fonts/misc/ .I __projectroot__/lib/X11/fonts/misc/
.I __projectroot__/lib/X11/fonts/TTF/ .I __projectroot__/lib/X11/fonts/TTF/
.I __projectroot__/lib/X11/fonts/Type1/ .I __projectroot__/lib/X11/fonts/Type1/
.I __projectroot__/lib/X11/fonts/CID/
.I __projectroot__/lib/X11/fonts/75dpi/ .I __projectroot__/lib/X11/fonts/75dpi/
.I __projectroot__/lib/X11/fonts/100dpi/ .I __projectroot__/lib/X11/fonts/100dpi/
.fi .fi
@ -326,7 +325,6 @@ The recommended font path contains the following font path elements:
.I __projectroot__/lib/X11/fonts/75dpi/:unscaled .I __projectroot__/lib/X11/fonts/75dpi/:unscaled
.I __projectroot__/lib/X11/fonts/100dpi/:unscaled .I __projectroot__/lib/X11/fonts/100dpi/:unscaled
.I __projectroot__/lib/X11/fonts/Type1/ .I __projectroot__/lib/X11/fonts/Type1/
.I __projectroot__/lib/X11/fonts/CID/
.I __projectroot__/lib/X11/fonts/Speedo/ .I __projectroot__/lib/X11/fonts/Speedo/
.I __projectroot__/lib/X11/fonts/75dpi/ .I __projectroot__/lib/X11/fonts/75dpi/
.I __projectroot__/lib/X11/fonts/100dpi/ .I __projectroot__/lib/X11/fonts/100dpi/

View File

@ -7,7 +7,7 @@ libdri_la_CFLAGS = -I$(top_srcdir)/hw/xfree86/common \
-I$(top_builddir)/GL/include \ -I$(top_builddir)/GL/include \
-I@MESA_SOURCE@/include \ -I@MESA_SOURCE@/include \
-DHAVE_XORG_CONFIG_H \ -DHAVE_XORG_CONFIG_H \
@DRIPROTO_CFLAGS@ \ @DIX_CFLAGS@ @DRIPROTO_CFLAGS@ \
@LIBDRM_CFLAGS@ \ @LIBDRM_CFLAGS@ \
@GL_CFLAGS@ @GL_CFLAGS@
libdri_la_LDFLAGS = -module -avoid-version @LIBDRM_LIBS@ libdri_la_LDFLAGS = -module -avoid-version @LIBDRM_LIBS@

View File

@ -84,7 +84,7 @@ static RESTYPE DRIDrawablePrivResType;
static RESTYPE DRIContextPrivResType; static RESTYPE DRIContextPrivResType;
static void DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv); static void DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv);
static drmServerInfo DRIDRMServerInfo; drmServerInfo DRIDRMServerInfo;
/* Wrapper just like xf86DrvMsg, but /* Wrapper just like xf86DrvMsg, but
without the verbosity level checking. without the verbosity level checking.
@ -176,8 +176,6 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
else else
openbusid = NULL; openbusid = NULL;
drmSetServerInfo(&DRIDRMServerInfo);
/* Note that drmOpen will try to load the kernel module, if needed. */ /* Note that drmOpen will try to load the kernel module, if needed. */
fd = drmOpen(pDRIInfo->drmDriverName, openbusid); fd = drmOpen(pDRIInfo->drmDriverName, openbusid);
if (fd < 0) { if (fd < 0) {
@ -593,7 +591,7 @@ static void dri_drm_get_perms(gid_t *group, mode_t *mode)
*mode = xf86ConfigDRI.mode; *mode = xf86ConfigDRI.mode;
} }
static drmServerInfo DRIDRMServerInfo = { drmServerInfo DRIDRMServerInfo = {
dri_drm_debug_print, dri_drm_debug_print,
xf86LoadKernelModule, xf86LoadKernelModule,
dri_drm_get_perms, dri_drm_get_perms,

View File

@ -39,8 +39,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "xf86Module.h" #include "xf86Module.h"
#include "globals.h" #include "globals.h"
#include "xf86drm.h"
static MODULESETUPPROTO(driSetup); static MODULESETUPPROTO(driSetup);
drmServerInfo DRIDRMServerInfo;
static XF86ModuleVersionInfo VersRec = static XF86ModuleVersionInfo VersRec =
{ {
"dri", "dri",
@ -81,6 +84,9 @@ driSetup(pointer module, pointer opts, int *errmaj, int *errmin)
} else { } else {
if (errmaj) *errmaj = LDR_ONCEONLY; if (errmaj) *errmaj = LDR_ONCEONLY;
} }
drmSetServerInfo(&DRIDRMServerInfo);
/* Need a non-NULL return value to indicate success */ /* Need a non-NULL return value to indicate success */
return 1; return 1;
} }

View File

@ -386,6 +386,7 @@ ProcXF86DRICreateDrawable(
{ {
xXF86DRICreateDrawableReply rep; xXF86DRICreateDrawableReply rep;
DrawablePtr pDrawable; DrawablePtr pDrawable;
int rc;
REQUEST(xXF86DRICreateDrawableReq); REQUEST(xXF86DRICreateDrawableReq);
REQUEST_SIZE_MATCH(xXF86DRICreateDrawableReq); REQUEST_SIZE_MATCH(xXF86DRICreateDrawableReq);
@ -398,12 +399,10 @@ ProcXF86DRICreateDrawable(
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
(Drawable)stuff->drawable, DixReadAccess);
client, if (rc != Success)
SecurityReadAccess))) { return rc;
return BadValue;
}
if (!DRICreateDrawable( screenInfo.screens[stuff->screen], if (!DRICreateDrawable( screenInfo.screens[stuff->screen],
(Drawable)stuff->drawable, (Drawable)stuff->drawable,
@ -424,17 +423,17 @@ ProcXF86DRIDestroyDrawable(
REQUEST(xXF86DRIDestroyDrawableReq); REQUEST(xXF86DRIDestroyDrawableReq);
DrawablePtr pDrawable; DrawablePtr pDrawable;
REQUEST_SIZE_MATCH(xXF86DRIDestroyDrawableReq); REQUEST_SIZE_MATCH(xXF86DRIDestroyDrawableReq);
int rc;
if (stuff->screen >= screenInfo.numScreens) { if (stuff->screen >= screenInfo.numScreens) {
client->errorValue = stuff->screen; client->errorValue = stuff->screen;
return BadValue; return BadValue;
} }
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
(Drawable)stuff->drawable, DixReadAccess);
client, if (rc != Success)
SecurityReadAccess))) { return rc;
return BadValue;
}
if (!DRIDestroyDrawable( screenInfo.screens[stuff->screen], if (!DRIDestroyDrawable( screenInfo.screens[stuff->screen],
(Drawable)stuff->drawable, (Drawable)stuff->drawable,
@ -455,7 +454,7 @@ ProcXF86DRIGetDrawableInfo(
int X, Y, W, H; int X, Y, W, H;
drm_clip_rect_t * pClipRects; drm_clip_rect_t * pClipRects;
drm_clip_rect_t * pBackClipRects; drm_clip_rect_t * pBackClipRects;
int backX, backY; int backX, backY, rc;
REQUEST(xXF86DRIGetDrawableInfoReq); REQUEST(xXF86DRIGetDrawableInfoReq);
REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq); REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq);
@ -468,12 +467,10 @@ ProcXF86DRIGetDrawableInfo(
rep.length = 0; rep.length = 0;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable( rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
(Drawable)stuff->drawable, DixReadAccess);
client, if (rc != Success)
SecurityReadAccess))) { return rc;
return BadValue;
}
if (!DRIGetDrawableInfo( screenInfo.screens[stuff->screen], if (!DRIGetDrawableInfo( screenInfo.screens[stuff->screen],
pDrawable, pDrawable,

View File

@ -6,7 +6,7 @@ noinst_LIBRARIES = libdummy-nonserver.a
INCLUDES = $(XORG_INCS) INCLUDES = $(XORG_INCS)
AM_CFLAGS = $(XORG_CFLAGS) AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
if NEED_STRLCAT if NEED_STRLCAT
STRL_SRCS = $(top_srcdir)/os/strlcat.c $(top_srcdir)/os/strlcpy.c STRL_SRCS = $(top_srcdir)/os/strlcat.c $(top_srcdir)/os/strlcpy.c

View File

@ -7,7 +7,7 @@ INCLUDES = \
-I$(srcdir)/../../../exa \ -I$(srcdir)/../../../exa \
-I$(srcdir)/../../../miext/cw -I$(srcdir)/../../../miext/cw
AM_CFLAGS = $(XORG_CFLAGS) AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
libexa_la_SOURCES = \ libexa_la_SOURCES = \
examodule.c examodule.c

Some files were not shown because too many files have changed in this diff Show More