Merge branch 'master' into my-XACE-SELINUX
This commit is contained in:
commit
a81dbaae05
|
@ -441,6 +441,7 @@ static int GetDrawableOrPixmap( __GLXcontext *glxc, GLXDrawable drawId,
|
|||
__GLcontextModes *modes;
|
||||
__GLXdrawable *pGlxDraw;
|
||||
__GLXpixmap *drawPixmap = NULL;
|
||||
int rc;
|
||||
|
||||
/* This is the GLX 1.3 case - the client passes in a GLXWindow and
|
||||
* 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
|
||||
* resource ID clashes. Effectively, the X Window is now also a
|
||||
* GLXWindow. */
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||
VisualID vid = wVisual((WindowPtr)pDraw);
|
||||
|
||||
|
@ -1199,12 +1200,12 @@ static int ValidateCreateDrawable(ClientPtr client,
|
|||
ScreenPtr pScreen;
|
||||
VisualPtr pVisual;
|
||||
__GLXscreen *pGlxScreen;
|
||||
int i;
|
||||
int i, rc;
|
||||
|
||||
LEGAL_NEW_RESOURCE(glxDrawableId, client);
|
||||
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawablId, client);
|
||||
if (!pDraw || pDraw->type != type) {
|
||||
rc = dixLookupDrawable(&pDraw, drawablId, client, 0, DixUnknownAccess);
|
||||
if (rc != Success || pDraw->type != type) {
|
||||
client->errorValue = drawablId;
|
||||
return type == DRAWABLE_WINDOW ? BadWindow : BadPixmap;
|
||||
}
|
||||
|
@ -2034,10 +2035,11 @@ int __glXDisp_BindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
|
|||
xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *) pc;
|
||||
XID drawable = req->drawable;
|
||||
int barrier = req->barrier;
|
||||
DrawablePtr pDraw = (DrawablePtr) LookupDrawable(drawable, client);
|
||||
int screen;
|
||||
DrawablePtr pDraw;
|
||||
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;
|
||||
if (__glXSwapBarrierFuncs &&
|
||||
__glXSwapBarrierFuncs[screen].bindSwapBarrierFunc) {
|
||||
|
|
|
@ -1092,8 +1092,8 @@ int XETrapRequestVector(ClientPtr client)
|
|||
pdata->hdr.client = client->index; /* stuff client index in hdr */
|
||||
if (BitIsTrue(penv->cur.data_config_flags_data,XETrapWinXY))
|
||||
{
|
||||
window_ptr = (WindowPtr) LookupDrawable(stuff->id, client);
|
||||
if (window_ptr == 0L)
|
||||
if (Success != dixLookupDrawable(&window_ptr, stuff->id,
|
||||
client, 0, DixUnknownAccess))
|
||||
{ /* Failed...invalidate the X and Y coordinate data. */
|
||||
pdata->hdr.win_x = -1L;
|
||||
pdata->hdr.win_y = -1L;
|
||||
|
|
|
@ -355,13 +355,15 @@ int AttrValidate(
|
|||
AppGroupPtr pAppGrp)
|
||||
{
|
||||
WindowPtr pWin;
|
||||
int idepth, ivids, found;
|
||||
int idepth, ivids, found, rc;
|
||||
ScreenPtr pScreen;
|
||||
DepthPtr pDepth;
|
||||
ColormapPtr pColormap;
|
||||
|
||||
pWin = LookupWindow (pAppGrp->default_root, client);
|
||||
/* XXX check that pWin is not NULL */
|
||||
rc = dixLookupWindow(&pWin, pAppGrp->default_root, client,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
if (WindowTable[pScreen->myNum]->drawable.id != pAppGrp->default_root)
|
||||
return BadWindow;
|
||||
|
@ -432,7 +434,7 @@ int ProcXagDestroy(
|
|||
|
||||
REQUEST_SIZE_MATCH (xXagDestroyReq);
|
||||
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
||||
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess);
|
||||
(XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
|
||||
if (!pAppGrp) return XagBadAppGroup;
|
||||
FreeResource ((XID)stuff->app_group, RT_NONE);
|
||||
if (--XagCallbackRefCount == 0)
|
||||
|
@ -451,7 +453,7 @@ int ProcXagGetAttr(
|
|||
|
||||
REQUEST_SIZE_MATCH (xXagGetAttrReq);
|
||||
pAppGrp = (AppGroupPtr)SecurityLookupIDByType (client,
|
||||
(XID)stuff->app_group, RT_APPGROUP, SecurityReadAccess);
|
||||
(XID)stuff->app_group, RT_APPGROUP, DixReadAccess);
|
||||
if (!pAppGrp) return XagBadAppGroup;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
|
@ -483,10 +485,13 @@ int ProcXagQuery(
|
|||
ClientPtr pClient;
|
||||
AppGroupPtr pAppGrp;
|
||||
REQUEST (xXagQueryReq);
|
||||
int n;
|
||||
int n, rc;
|
||||
|
||||
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 (n = 0; n < pAppGrp->nclients; n++)
|
||||
if (pAppGrp->clients[n] == pClient) {
|
||||
|
|
|
@ -227,7 +227,7 @@ int ProcStoreColors(
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xXcupStoreColorsReq);
|
||||
pcmp = (ColormapPtr) SecurityLookupIDByType (client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
|
||||
if (pcmp) {
|
||||
int ncolors, n;
|
||||
|
|
41
Xext/mbuf.c
41
Xext/mbuf.c
|
@ -448,16 +448,15 @@ ProcCreateImageBuffers (client)
|
|||
register int n;
|
||||
WindowPtr pWin;
|
||||
XID *ids;
|
||||
int len, nbuf;
|
||||
int i;
|
||||
int err;
|
||||
int len, nbuf, i, err, rc;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xMbufCreateImageBuffersReq);
|
||||
len = stuff->length - (sizeof(xMbufCreateImageBuffersReq) >> 2);
|
||||
if (len == 0)
|
||||
return BadLength;
|
||||
if (!(pWin = LookupWindow (stuff->window, client)))
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (pWin->drawable.class == InputOnly)
|
||||
return BadMatch;
|
||||
switch (stuff->updateAction)
|
||||
|
@ -584,10 +583,12 @@ ProcDestroyImageBuffers (client)
|
|||
{
|
||||
REQUEST (xMbufDestroyImageBuffersReq);
|
||||
WindowPtr pWin;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xMbufDestroyImageBuffersReq);
|
||||
if (!(pWin = LookupWindow (stuff->window, client)))
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
DestroyImageBuffers (pWin);
|
||||
return Success;
|
||||
}
|
||||
|
@ -599,16 +600,16 @@ ProcSetMBufferAttributes (client)
|
|||
REQUEST (xMbufSetMBufferAttributesReq);
|
||||
WindowPtr pWin;
|
||||
MultibuffersPtr pMultibuffers;
|
||||
int len;
|
||||
int len, rc;
|
||||
Mask vmask;
|
||||
Mask index2;
|
||||
CARD32 updateHint;
|
||||
XID *vlist;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xMbufSetMBufferAttributesReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
||||
if (!pMultibuffers)
|
||||
return BadMatch;
|
||||
|
@ -655,12 +656,12 @@ ProcGetMBufferAttributes (client)
|
|||
MultibuffersPtr pMultibuffers;
|
||||
XID *ids;
|
||||
xMbufGetMBufferAttributesReply rep;
|
||||
int i, n;
|
||||
int i, n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xMbufGetMBufferAttributesReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pMultibuffers = (MultibuffersPtr)LookupIDByType (pWin->drawable.id, MultibuffersResType);
|
||||
if (!pMultibuffers)
|
||||
return BadAccess;
|
||||
|
@ -785,15 +786,15 @@ ProcGetBufferInfo (client)
|
|||
DrawablePtr pDrawable;
|
||||
xMbufGetBufferInfoReply rep;
|
||||
ScreenPtr pScreen;
|
||||
int i, j, k;
|
||||
int n;
|
||||
int i, j, k, n, rc;
|
||||
xMbufBufferInfo *pInfo;
|
||||
int nInfo;
|
||||
DepthPtr pDepth;
|
||||
|
||||
pDrawable = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
||||
if (!pDrawable)
|
||||
return BadDrawable;
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pScreen = pDrawable->pScreen;
|
||||
nInfo = 0;
|
||||
for (i = 0; i < pScreen->numDepths; i++)
|
||||
|
|
|
@ -958,12 +958,13 @@ ProcPanoramiXGetState(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetStateReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetStateReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -984,12 +985,13 @@ ProcPanoramiXGetScreenCount(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetScreenCountReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetScreenCountReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -1009,12 +1011,13 @@ ProcPanoramiXGetScreenSize(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetScreenSizeReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetScreenSizeReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
|
|
@ -91,7 +91,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
|||
return BadLength;
|
||||
|
||||
if (!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if(stuff->class == CopyFromParent)
|
||||
|
@ -105,7 +105,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||
if (tmp != CopyFromParent) {
|
||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -123,7 +123,7 @@ int PanoramiXCreateWindow(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||
return BadColor;
|
||||
}
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
|||
return BadLength;
|
||||
|
||||
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if((win->u.win.class == InputOnly) &&
|
||||
|
@ -204,7 +204,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||
if (tmp != CopyFromParent) {
|
||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||
return BadColor;
|
||||
}
|
||||
}
|
||||
|
@ -251,7 +251,7 @@ int PanoramiXDestroyWindow(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -276,7 +276,7 @@ int PanoramiXDestroySubwindows(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityDestroyAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixDestroyAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -301,7 +301,7 @@ int PanoramiXChangeSaveSet(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xChangeSaveSetReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -325,11 +325,11 @@ int PanoramiXReparentWindow(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xReparentWindowReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if(!(parent = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->parent, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->parent, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
x = stuff->x;
|
||||
|
@ -360,7 +360,7 @@ int PanoramiXMapWindow(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_FORWARD(j) {
|
||||
|
@ -382,7 +382,7 @@ int PanoramiXMapSubwindows(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_FORWARD(j) {
|
||||
|
@ -404,7 +404,7 @@ int PanoramiXUnmapWindow(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_FORWARD(j) {
|
||||
|
@ -426,7 +426,7 @@ int PanoramiXUnmapSubwindows(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_FORWARD(j) {
|
||||
|
@ -457,11 +457,11 @@ int PanoramiXConfigureWindow(ClientPtr client)
|
|||
|
||||
/* because we need the parent */
|
||||
if (!(pWin = (WindowPtr)SecurityLookupIDByType(
|
||||
client, stuff->window, RT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, RT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if (!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if ((Mask)stuff->mask & CWSibling) {
|
||||
|
@ -469,7 +469,7 @@ int PanoramiXConfigureWindow(ClientPtr client)
|
|||
sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) {
|
||||
if(!(sib = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, tmp, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
}
|
||||
}
|
||||
|
@ -514,7 +514,7 @@ int PanoramiXCirculateWindow(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xCirculateWindowReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS_FORWARD(j) {
|
||||
|
@ -531,10 +531,14 @@ int PanoramiXGetGeometry(ClientPtr client)
|
|||
{
|
||||
xGetGeometryReply rep;
|
||||
DrawablePtr pDraw;
|
||||
int rc;
|
||||
REQUEST(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.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -573,19 +577,17 @@ int PanoramiXTranslateCoords(ClientPtr client)
|
|||
{
|
||||
INT16 x, y;
|
||||
REQUEST(xTranslateCoordsReq);
|
||||
|
||||
register WindowPtr pWin, pDst;
|
||||
int rc;
|
||||
WindowPtr pWin, pDst;
|
||||
xTranslateCoordsReply rep;
|
||||
|
||||
REQUEST_SIZE_MATCH(xTranslateCoordsReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->srcWid, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
pDst = (WindowPtr)SecurityLookupWindow(stuff->dstWid, client,
|
||||
SecurityReadAccess);
|
||||
if (!pDst)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->srcWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rc = dixLookupWindow(&pDst, stuff->dstWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -655,7 +657,7 @@ int PanoramiXCreatePixmap(ClientPtr client)
|
|||
client->errorValue = stuff->pid;
|
||||
|
||||
if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(newPix = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
||||
|
@ -694,7 +696,7 @@ int PanoramiXFreePixmap(ClientPtr client)
|
|||
client->errorValue = stuff->id;
|
||||
|
||||
if(!(pix = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_PIXMAP, SecurityDestroyAccess)))
|
||||
client, stuff->id, XRT_PIXMAP, DixDestroyAccess)))
|
||||
return BadPixmap;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -730,14 +732,14 @@ int PanoramiXCreateGC(ClientPtr client)
|
|||
return BadLength;
|
||||
|
||||
if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityReadAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixReadAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if ((Mask)stuff->mask & GCTile) {
|
||||
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
||||
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -745,7 +747,7 @@ int PanoramiXCreateGC(ClientPtr client)
|
|||
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
||||
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -753,7 +755,7 @@ int PanoramiXCreateGC(ClientPtr client)
|
|||
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
||||
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -805,14 +807,14 @@ int PanoramiXChangeGC(ClientPtr client)
|
|||
return BadLength;
|
||||
|
||||
if (!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if ((Mask)stuff->mask & GCTile) {
|
||||
tile_offset = Ones((Mask)stuff->mask & (GCTile - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) {
|
||||
if(!(tile = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -820,7 +822,7 @@ int PanoramiXChangeGC(ClientPtr client)
|
|||
stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) {
|
||||
if(!(stip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -828,7 +830,7 @@ int PanoramiXChangeGC(ClientPtr client)
|
|||
clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1));
|
||||
if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) {
|
||||
if(!(clip = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -859,11 +861,11 @@ int PanoramiXCopyGC(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xCopyGCReq);
|
||||
|
||||
if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->srcGC, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->srcGC, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->dstGC, XRT_GC, SecurityWriteAccess)))
|
||||
client, stuff->dstGC, XRT_GC, DixWriteAccess)))
|
||||
return BadGC;
|
||||
|
||||
FOR_NSCREENS(j) {
|
||||
|
@ -886,7 +888,7 @@ int PanoramiXSetDashes(ClientPtr client)
|
|||
REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityWriteAccess)))
|
||||
client, stuff->gc, XRT_GC, DixWriteAccess)))
|
||||
return BadGC;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -908,7 +910,7 @@ int PanoramiXSetClipRectangles(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityWriteAccess)))
|
||||
client, stuff->gc, XRT_GC, DixWriteAccess)))
|
||||
return BadGC;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -930,7 +932,7 @@ int PanoramiXFreeGC(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_GC, SecurityDestroyAccess)))
|
||||
client, stuff->id, XRT_GC, DixDestroyAccess)))
|
||||
return BadGC;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -956,7 +958,7 @@ int PanoramiXClearToBackground(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xClearAreaReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
x = stuff->x;
|
||||
|
@ -998,13 +1000,13 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xCopyAreaReq);
|
||||
|
||||
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess)))
|
||||
client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
srcShared = IS_SHARED_PIXMAP(src);
|
||||
|
||||
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
dstShared = IS_SHARED_PIXMAP(dst);
|
||||
|
@ -1013,7 +1015,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
return (* SavedProcVector[X_CopyArea])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if((dst->type == XRT_WINDOW) && dst->u.win.root)
|
||||
|
@ -1028,10 +1030,14 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
DrawablePtr pDst;
|
||||
GCPtr pGC;
|
||||
char *data;
|
||||
int pitch;
|
||||
int pitch, rc;
|
||||
|
||||
FOR_NSCREENS(j)
|
||||
VERIFY_DRAWABLE(drawables[j], src->info[j].id, client);
|
||||
FOR_NSCREENS(j) {
|
||||
rc = dixLookupDrawable(drawables+j, src->info[j].id, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
|
||||
pitch = PixmapBytePad(stuff->width, drawables[0]->depth);
|
||||
if(!(data = xcalloc(1, stuff->height * pitch)))
|
||||
|
@ -1065,6 +1071,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
DrawablePtr pDst = NULL, pSrc = NULL;
|
||||
GCPtr pGC = NULL;
|
||||
RegionPtr pRgn[MAXSCREENS];
|
||||
int rc;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
stuff->dstDrawable = dst->info[j].id;
|
||||
|
@ -1081,8 +1088,11 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
|
||||
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
|
||||
if (stuff->dstDrawable != stuff->srcDrawable) {
|
||||
SECURITY_VERIFY_DRAWABLE(pSrc, stuff->srcDrawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pSrc, stuff->srcDrawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if ((pDst->pScreen != pSrc->pScreen) ||
|
||||
(pDst->depth != pSrc->depth)) {
|
||||
client->errorValue = stuff->dstDrawable;
|
||||
|
@ -1133,7 +1143,7 @@ int PanoramiXCopyArea(ClientPtr client)
|
|||
|
||||
int PanoramiXCopyPlane(ClientPtr client)
|
||||
{
|
||||
int j, srcx, srcy, dstx, dsty;
|
||||
int j, srcx, srcy, dstx, dsty, rc;
|
||||
PanoramiXRes *gc, *src, *dst;
|
||||
Bool srcIsRoot = FALSE;
|
||||
Bool dstIsRoot = FALSE;
|
||||
|
@ -1146,13 +1156,13 @@ int PanoramiXCopyPlane(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xCopyPlaneReq);
|
||||
|
||||
if(!(src = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->srcDrawable, XRC_DRAWABLE, SecurityReadAccess)))
|
||||
client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
srcShared = IS_SHARED_PIXMAP(src);
|
||||
|
||||
if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->dstDrawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
dstShared = IS_SHARED_PIXMAP(dst);
|
||||
|
@ -1161,7 +1171,7 @@ int PanoramiXCopyPlane(ClientPtr client)
|
|||
return (* SavedProcVector[X_CopyPlane])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
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);
|
||||
if (stuff->dstDrawable != stuff->srcDrawable) {
|
||||
SECURITY_VERIFY_DRAWABLE(psrcDraw, stuff->srcDrawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&psrcDraw, stuff->srcDrawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (pdstDraw->pScreen != psrcDraw->pScreen) {
|
||||
client->errorValue = stuff->dstDrawable;
|
||||
return (BadMatch);
|
||||
|
@ -1246,14 +1259,14 @@ int PanoramiXPolyPoint(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyPointReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyPoint])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1304,14 +1317,14 @@ int PanoramiXPolyLine(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyLineReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyLine])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1362,14 +1375,14 @@ int PanoramiXPolySegment(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolySegment])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1424,14 +1437,14 @@ int PanoramiXPolyRectangle(ClientPtr client)
|
|||
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyRectangle])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1484,14 +1497,14 @@ int PanoramiXPolyArc(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyArcReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyArc])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1542,14 +1555,14 @@ int PanoramiXFillPoly(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xFillPolyReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_FillPoly])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1601,14 +1614,14 @@ int PanoramiXPolyFillRectangle(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyFillRectangle])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1660,14 +1673,14 @@ int PanoramiXPolyFillArc(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyFillArc])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1718,14 +1731,14 @@ int PanoramiXPutImage(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPutImageReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PutImage])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1754,7 +1767,7 @@ int PanoramiXGetImage(ClientPtr client)
|
|||
xGetImageReply xgi;
|
||||
Bool isRoot;
|
||||
char *pBuf;
|
||||
int i, x, y, w, h, format;
|
||||
int i, x, y, w, h, format, rc;
|
||||
Mask plane = 0, planemask;
|
||||
int linesDone, nlines, linesPerBuf;
|
||||
long widthBytesLine, length;
|
||||
|
@ -1769,13 +1782,16 @@ int PanoramiXGetImage(ClientPtr client)
|
|||
}
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(draw->type == XRT_PIXMAP)
|
||||
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)
|
||||
return(BadMatch);
|
||||
|
@ -1809,8 +1825,12 @@ int PanoramiXGetImage(ClientPtr client)
|
|||
}
|
||||
|
||||
drawables[0] = pDraw;
|
||||
for(i = 1; i < PanoramiXNumScreens; i++)
|
||||
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client);
|
||||
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
|
||||
xgi.visual = wVisual (((WindowPtr) pDraw));
|
||||
xgi.type = X_Reply;
|
||||
|
@ -1909,14 +1929,14 @@ PanoramiXPolyText8(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyText8])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1948,14 +1968,14 @@ PanoramiXPolyText16(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xPolyTextReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_PolyText16])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1987,14 +2007,14 @@ int PanoramiXImageText8(ClientPtr client)
|
|||
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_ImageText8])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -2026,14 +2046,14 @@ int PanoramiXImageText16(ClientPtr client)
|
|||
REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(IS_SHARED_PIXMAP(draw))
|
||||
return (*SavedProcVector[X_ImageText16])(client);
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -2064,7 +2084,7 @@ int PanoramiXCreateColormap(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xCreateColormapReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->window, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->window, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if(!stuff->visual || (stuff->visual > 255))
|
||||
|
@ -2107,7 +2127,7 @@ int PanoramiXFreeColormap(ClientPtr client)
|
|||
client->errorValue = stuff->id;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_COLORMAP, SecurityDestroyAccess)))
|
||||
client, stuff->id, XRT_COLORMAP, DixDestroyAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2136,7 +2156,7 @@ PanoramiXCopyColormapAndFree(ClientPtr client)
|
|||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->srcCmap, XRT_COLORMAP,
|
||||
SecurityReadAccess | SecurityWriteAccess)))
|
||||
DixReadAccess | DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
if(!(newCmap = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
||||
|
@ -2174,7 +2194,7 @@ int PanoramiXInstallColormap(ClientPtr client)
|
|||
client->errorValue = stuff->id;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_COLORMAP, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_COLORMAP, DixReadAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2197,7 +2217,7 @@ int PanoramiXUninstallColormap(ClientPtr client)
|
|||
client->errorValue = stuff->id;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->id, XRT_COLORMAP, SecurityReadAccess)))
|
||||
client, stuff->id, XRT_COLORMAP, DixReadAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2220,7 +2240,7 @@ int PanoramiXAllocColor(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2243,7 +2263,7 @@ int PanoramiXAllocNamedColor(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2266,7 +2286,7 @@ int PanoramiXAllocColorCells(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2289,7 +2309,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2313,7 +2333,7 @@ int PanoramiXFreeColors(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2335,7 +2355,7 @@ int PanoramiXStoreColors(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
@ -2358,7 +2378,7 @@ int PanoramiXStoreNamedColor(ClientPtr client)
|
|||
client->errorValue = stuff->cmap;
|
||||
|
||||
if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->cmap, XRT_COLORMAP, SecurityWriteAccess)))
|
||||
client, stuff->cmap, XRT_COLORMAP, DixWriteAccess)))
|
||||
return BadColor;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j){
|
||||
|
|
46
Xext/saver.c
46
Xext/saver.c
|
@ -780,16 +780,17 @@ ProcScreenSaverQueryInfo (client)
|
|||
{
|
||||
REQUEST(xScreenSaverQueryInfoReq);
|
||||
xScreenSaverQueryInfoReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
ScreenSaverStuffPtr pSaver;
|
||||
DrawablePtr pDraw;
|
||||
CARD32 lastInput;
|
||||
ScreenSaverScreenPrivatePtr pPriv;
|
||||
|
||||
REQUEST_SIZE_MATCH (xScreenSaverQueryInfoReq);
|
||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
||||
if (!pDraw)
|
||||
return BadDrawable;
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pSaver = &savedScreenInfo[pDraw->pScreen->myNum];
|
||||
pPriv = GetScreenPrivate (pDraw->pScreen);
|
||||
|
@ -852,11 +853,13 @@ ProcScreenSaverSelectInput (client)
|
|||
{
|
||||
REQUEST(xScreenSaverSelectInputReq);
|
||||
DrawablePtr pDraw;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xScreenSaverSelectInputReq);
|
||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
||||
if (!pDraw)
|
||||
return BadDrawable;
|
||||
rc = dixLookupDrawable (&pDraw, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (!setEventMask (pDraw->pScreen, client, stuff->eventMask))
|
||||
return BadAlloc;
|
||||
return Success;
|
||||
|
@ -871,9 +874,7 @@ ScreenSaverSetAttributes (ClientPtr client)
|
|||
ScreenPtr pScreen;
|
||||
ScreenSaverScreenPrivatePtr pPriv = 0;
|
||||
ScreenSaverAttrPtr pAttr = 0;
|
||||
int ret;
|
||||
int len;
|
||||
int class, bw, depth;
|
||||
int ret, len, class, bw, depth;
|
||||
unsigned long visual;
|
||||
int idepth, ivisual;
|
||||
Bool fOK;
|
||||
|
@ -891,9 +892,10 @@ ScreenSaverSetAttributes (ClientPtr client)
|
|||
ColormapPtr pCmap;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
||||
if (!pDraw)
|
||||
return BadDrawable;
|
||||
ret = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (ret != Success)
|
||||
return ret;
|
||||
pScreen = pDraw->pScreen;
|
||||
pParent = WindowTable[pScreen->myNum];
|
||||
|
||||
|
@ -1246,11 +1248,13 @@ ScreenSaverUnsetAttributes (ClientPtr client)
|
|||
REQUEST(xScreenSaverSetAttributesReq);
|
||||
DrawablePtr pDraw;
|
||||
ScreenSaverScreenPrivatePtr pPriv;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xScreenSaverUnsetAttributesReq);
|
||||
pDraw = (DrawablePtr) LookupDrawable (stuff->drawable, client);
|
||||
if (!pDraw)
|
||||
return BadDrawable;
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pPriv = GetScreenPrivate (pDraw->pScreen);
|
||||
if (pPriv && pPriv->attr && pPriv->attr->client == client)
|
||||
{
|
||||
|
@ -1279,7 +1283,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2);
|
||||
|
@ -1291,7 +1295,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pback_offset);
|
||||
if ((tmp != None) && (tmp != ParentRelative)) {
|
||||
if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -1301,7 +1305,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + pbord_offset);
|
||||
if (tmp != CopyFromParent) {
|
||||
if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
}
|
||||
}
|
||||
|
@ -1311,7 +1315,7 @@ ProcScreenSaverSetAttributes (ClientPtr client)
|
|||
tmp = *((CARD32 *) &stuff[1] + cmap_offset);
|
||||
if ((tmp != CopyFromParent) && (tmp != None)) {
|
||||
if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType(
|
||||
client, tmp, XRT_COLORMAP, SecurityReadAccess)))
|
||||
client, tmp, XRT_COLORMAP, DixReadAccess)))
|
||||
return BadColor;
|
||||
}
|
||||
}
|
||||
|
@ -1351,7 +1355,7 @@ ProcScreenSaverUnsetAttributes (ClientPtr client)
|
|||
int i;
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
for(i = PanoramiXNumScreens - 1; i > 0; i--) {
|
||||
|
|
|
@ -600,7 +600,7 @@ ProcSecurityRevokeAuthorization(
|
|||
REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq);
|
||||
|
||||
pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client,
|
||||
stuff->authId, SecurityAuthorizationResType, SecurityDestroyAccess);
|
||||
stuff->authId, SecurityAuthorizationResType, DixDestroyAccess);
|
||||
if (!pAuth)
|
||||
return SecurityErrorBase + XSecurityBadAuthorization;
|
||||
|
||||
|
@ -966,7 +966,7 @@ CALLBACK(SecurityCheckResourceIDAccess)
|
|||
int cid, reqtype;
|
||||
|
||||
if (TRUSTLEVEL(client) == XSecurityClientTrusted ||
|
||||
SecurityUnknownAccess == access_mode)
|
||||
DixUnknownAccess == access_mode)
|
||||
return; /* for compatibility, we have to allow access */
|
||||
|
||||
cid = CLIENT_ID(id);
|
||||
|
@ -1217,7 +1217,7 @@ CALLBACK(SecurityCheckHostlistAccess)
|
|||
if (TRUSTLEVEL(rec->client) != XSecurityClientTrusted)
|
||||
{
|
||||
rec->rval = FALSE;
|
||||
if (rec->access_mode == SecurityWriteAccess)
|
||||
if (rec->access_mode == DixWriteAccess)
|
||||
SecurityAudit("client %d attempted to change host access\n",
|
||||
rec->client->index);
|
||||
else
|
||||
|
@ -1798,11 +1798,11 @@ CALLBACK(SecurityCheckPropertyAccess)
|
|||
* executed a continue, which will skip the follwing code.
|
||||
*/
|
||||
action = XaceAllowOperation;
|
||||
if (access_mode & SecurityReadAccess)
|
||||
if (access_mode & DixReadAccess)
|
||||
action = max(action, pacl->readAction);
|
||||
if (access_mode & SecurityWriteAccess)
|
||||
if (access_mode & DixWriteAccess)
|
||||
action = max(action, pacl->writeAction);
|
||||
if (access_mode & SecurityDestroyAccess)
|
||||
if (access_mode & DixDestroyAccess)
|
||||
action = max(action, pacl->destroyAction);
|
||||
break;
|
||||
} /* end for each pacl */
|
||||
|
|
84
Xext/shape.c
84
Xext/shape.c
|
@ -316,16 +316,16 @@ ProcShapeRectangles (client)
|
|||
ScreenPtr pScreen;
|
||||
REQUEST(xShapeRectanglesReq);
|
||||
xRectangle *prects;
|
||||
int nrects, ctype;
|
||||
int nrects, ctype, rc;
|
||||
RegionPtr srcRgn;
|
||||
RegionPtr *destRgn;
|
||||
CreateDftPtr createDefault;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
||||
UpdateCurrentTime();
|
||||
pWin = LookupWindow (stuff->dest, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
switch (stuff->destKind) {
|
||||
case ShapeBounding:
|
||||
createDefault = CreateBoundingShape;
|
||||
|
@ -390,7 +390,7 @@ ProcPanoramiXShapeRectangles(
|
|||
REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS(j) {
|
||||
|
@ -419,12 +419,13 @@ ProcShapeMask (client)
|
|||
RegionPtr *destRgn;
|
||||
PixmapPtr pPixmap;
|
||||
CreateDftPtr createDefault;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
||||
UpdateCurrentTime();
|
||||
pWin = SecurityLookupWindow (stuff->dest, client, SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->dest, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
switch (stuff->destKind) {
|
||||
case ShapeBounding:
|
||||
createDefault = CreateBoundingShape;
|
||||
|
@ -444,7 +445,7 @@ ProcShapeMask (client)
|
|||
srcRgn = 0;
|
||||
else {
|
||||
pPixmap = (PixmapPtr) SecurityLookupIDByType(client, stuff->src,
|
||||
RT_PIXMAP, SecurityReadAccess);
|
||||
RT_PIXMAP, DixReadAccess);
|
||||
if (!pPixmap)
|
||||
return BadPixmap;
|
||||
if (pPixmap->drawable.pScreen != pScreen ||
|
||||
|
@ -488,12 +489,12 @@ ProcPanoramiXShapeMask(
|
|||
REQUEST_SIZE_MATCH (xShapeMaskReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if(stuff->src != None) {
|
||||
if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->src, XRT_PIXMAP, SecurityReadAccess)))
|
||||
client, stuff->src, XRT_PIXMAP, DixReadAccess)))
|
||||
return BadPixmap;
|
||||
} else
|
||||
pmap = NULL;
|
||||
|
@ -526,12 +527,13 @@ ProcShapeCombine (client)
|
|||
CreateDftPtr createDefault;
|
||||
CreateDftPtr createSrc;
|
||||
RegionPtr tmp;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeCombineReq);
|
||||
UpdateCurrentTime();
|
||||
pDestWin = LookupWindow (stuff->dest, client);
|
||||
if (!pDestWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pDestWin, stuff->dest, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (!pDestWin->optional)
|
||||
MakeWindowOptional (pDestWin);
|
||||
switch (stuff->destKind) {
|
||||
|
@ -550,9 +552,9 @@ ProcShapeCombine (client)
|
|||
}
|
||||
pScreen = pDestWin->drawable.pScreen;
|
||||
|
||||
pSrcWin = LookupWindow (stuff->src, client);
|
||||
if (!pSrcWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pSrcWin, stuff->src, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
switch (stuff->srcKind) {
|
||||
case ShapeBounding:
|
||||
srcRgn = wBoundingShape (pSrcWin);
|
||||
|
@ -616,11 +618,11 @@ ProcPanoramiXShapeCombine(
|
|||
REQUEST_AT_LEAST_SIZE (xShapeCombineReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->src, XRT_WINDOW, SecurityReadAccess)))
|
||||
client, stuff->src, XRT_WINDOW, DixReadAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS(j) {
|
||||
|
@ -645,12 +647,13 @@ ProcShapeOffset (client)
|
|||
ScreenPtr pScreen;
|
||||
REQUEST(xShapeOffsetReq);
|
||||
RegionPtr srcRgn;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeOffsetReq);
|
||||
UpdateCurrentTime();
|
||||
pWin = LookupWindow (stuff->dest, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->dest, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
switch (stuff->destKind) {
|
||||
case ShapeBounding:
|
||||
srcRgn = wBoundingShape (pWin);
|
||||
|
@ -688,7 +691,7 @@ ProcPanoramiXShapeOffset(
|
|||
REQUEST_AT_LEAST_SIZE (xShapeOffsetReq);
|
||||
|
||||
if(!(win = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->dest, XRT_WINDOW, SecurityWriteAccess)))
|
||||
client, stuff->dest, XRT_WINDOW, DixWriteAccess)))
|
||||
return BadWindow;
|
||||
|
||||
FOR_NSCREENS(j) {
|
||||
|
@ -709,13 +712,13 @@ ProcShapeQueryExtents (client)
|
|||
WindowPtr pWin;
|
||||
xShapeQueryExtentsReply rep;
|
||||
BoxRec extents, *pExtents;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
RegionPtr region;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeQueryExtentsReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -820,13 +823,14 @@ ProcShapeSelectInput (client)
|
|||
WindowPtr pWin;
|
||||
ShapeEventPtr pShapeEvent, pNewShapeEvent, *pHead;
|
||||
XID clientResource;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeSelectInputReq);
|
||||
pWin = SecurityLookupWindow (stuff->window, client, SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pHead = (ShapeEventPtr *)SecurityLookupIDByType(client,
|
||||
pWin->drawable.id, EventType, SecurityWriteAccess);
|
||||
pWin->drawable.id, EventType, DixWriteAccess);
|
||||
switch (stuff->enable) {
|
||||
case xTrue:
|
||||
if (pHead) {
|
||||
|
@ -990,16 +994,16 @@ ProcShapeInputSelected (client)
|
|||
REQUEST(xShapeInputSelectedReq);
|
||||
WindowPtr pWin;
|
||||
ShapeEventPtr pShapeEvent, *pHead;
|
||||
int enabled;
|
||||
int enabled, rc;
|
||||
xShapeInputSelectedReply rep;
|
||||
register int n;
|
||||
|
||||
REQUEST_SIZE_MATCH (xShapeInputSelectedReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pHead = (ShapeEventPtr *) SecurityLookupIDByType(client,
|
||||
pWin->drawable.id, EventType, SecurityReadAccess);
|
||||
pWin->drawable.id, EventType, DixReadAccess);
|
||||
enabled = xFalse;
|
||||
if (pHead) {
|
||||
for (pShapeEvent = *pHead;
|
||||
|
@ -1032,14 +1036,14 @@ ProcShapeGetRectangles (client)
|
|||
WindowPtr pWin;
|
||||
xShapeGetRectanglesReply rep;
|
||||
xRectangle *rects;
|
||||
int nrects, i;
|
||||
int nrects, i, rc;
|
||||
RegionPtr region;
|
||||
register int n;
|
||||
|
||||
REQUEST_SIZE_MATCH(xShapeGetRectanglesReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
switch (stuff->kind) {
|
||||
case ShapeBounding:
|
||||
region = wBoundingShape(pWin);
|
||||
|
|
52
Xext/shm.c
52
Xext/shm.c
|
@ -571,11 +571,11 @@ ProcPanoramiXShmPutImage(register ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xShmPutImageReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -606,7 +606,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
DrawablePtr pDraw;
|
||||
xShmGetImageReply xgi;
|
||||
ShmDescPtr shmdesc;
|
||||
int i, x, y, w, h, format;
|
||||
int i, x, y, w, h, format, rc;
|
||||
Mask plane = 0, planemask;
|
||||
long lenPer = 0, length, widthBytesLine;
|
||||
Bool isRoot;
|
||||
|
@ -621,13 +621,16 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
}
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if (draw->type == XRT_PIXMAP)
|
||||
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);
|
||||
|
||||
|
@ -660,8 +663,12 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
}
|
||||
|
||||
drawables[0] = pDraw;
|
||||
for(i = 1; i < PanoramiXNumScreens; i++)
|
||||
VERIFY_DRAWABLE(drawables[i], draw->info[i].id, client);
|
||||
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
|
||||
xgi.visual = wVisual(((WindowPtr)pDraw));
|
||||
xgi.type = X_Reply;
|
||||
|
@ -720,7 +727,7 @@ ProcPanoramiXShmCreatePixmap(
|
|||
PixmapPtr pMap = NULL;
|
||||
DrawablePtr pDraw;
|
||||
DepthPtr pDepth;
|
||||
int i, j, result;
|
||||
int i, j, result, rc;
|
||||
ShmDescPtr shmdesc;
|
||||
REQUEST(xShmCreatePixmapReq);
|
||||
PanoramiXRes *newPix;
|
||||
|
@ -730,7 +737,11 @@ ProcPanoramiXShmCreatePixmap(
|
|||
if (!sharedPixmaps)
|
||||
return BadImplementation;
|
||||
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);
|
||||
if (!stuff->width || !stuff->height)
|
||||
{
|
||||
|
@ -805,8 +816,8 @@ static int
|
|||
ProcShmPutImage(client)
|
||||
register ClientPtr client;
|
||||
{
|
||||
register GCPtr pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GCPtr pGC;
|
||||
DrawablePtr pDraw;
|
||||
long length;
|
||||
ShmDescPtr shmdesc;
|
||||
REQUEST(xShmPutImageReq);
|
||||
|
@ -909,12 +920,12 @@ static int
|
|||
ProcShmGetImage(client)
|
||||
register ClientPtr client;
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
long lenPer = 0, length;
|
||||
Mask plane = 0;
|
||||
xShmGetImageReply xgi;
|
||||
ShmDescPtr shmdesc;
|
||||
int n;
|
||||
int n, rc;
|
||||
|
||||
REQUEST(xShmGetImageReq);
|
||||
|
||||
|
@ -924,7 +935,10 @@ ProcShmGetImage(client)
|
|||
client->errorValue = stuff->format;
|
||||
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);
|
||||
if (pDraw->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
|
@ -1042,9 +1056,9 @@ ProcShmCreatePixmap(client)
|
|||
register ClientPtr client;
|
||||
{
|
||||
PixmapPtr pMap;
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
DepthPtr pDepth;
|
||||
register int i;
|
||||
register int i, rc;
|
||||
ShmDescPtr shmdesc;
|
||||
REQUEST(xShmCreatePixmapReq);
|
||||
|
||||
|
@ -1053,7 +1067,11 @@ ProcShmCreatePixmap(client)
|
|||
if (!sharedPixmaps)
|
||||
return BadImplementation;
|
||||
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);
|
||||
if (!stuff->width || !stuff->height)
|
||||
{
|
||||
|
|
36
Xext/sync.c
36
Xext/sync.c
|
@ -436,7 +436,7 @@ SyncInitTrigger(client, pTrigger, counter, changes)
|
|||
if (counter == None)
|
||||
pCounter = NULL;
|
||||
else if (!(pCounter = (SyncCounter *)SecurityLookupIDByType(
|
||||
client, counter, RTCounter, SecurityReadAccess)))
|
||||
client, counter, RTCounter, DixReadAccess)))
|
||||
{
|
||||
client->errorValue = counter;
|
||||
return SyncErrorBase + XSyncBadCounter;
|
||||
|
@ -1452,15 +1452,17 @@ ProcSyncSetPriority(client)
|
|||
{
|
||||
REQUEST(xSyncSetPriorityReq);
|
||||
ClientPtr priorityclient;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xSyncSetPriorityReq);
|
||||
|
||||
if (stuff->id == None)
|
||||
priorityclient = client;
|
||||
else if (!(priorityclient = LookupClient(stuff->id, client)))
|
||||
{
|
||||
client->errorValue = stuff->id;
|
||||
return BadMatch;
|
||||
else {
|
||||
rc = dixLookupClient(&priorityclient, stuff->id, client,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (priorityclient->priority != stuff->priority)
|
||||
|
@ -1487,15 +1489,17 @@ ProcSyncGetPriority(client)
|
|||
REQUEST(xSyncGetPriorityReq);
|
||||
xSyncGetPriorityReply rep;
|
||||
ClientPtr priorityclient;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xSyncGetPriorityReq);
|
||||
|
||||
if (stuff->id == None)
|
||||
priorityclient = client;
|
||||
else if (!(priorityclient = LookupClient(stuff->id, client)))
|
||||
{
|
||||
client->errorValue = stuff->id;
|
||||
return BadMatch;
|
||||
else {
|
||||
rc = dixLookupClient(&priorityclient, stuff->id, client,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
|
||||
rep.type = X_Reply;
|
||||
|
@ -1550,7 +1554,7 @@ ProcSyncSetCounter(client)
|
|||
REQUEST_SIZE_MATCH(xSyncSetCounterReq);
|
||||
|
||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->cid,
|
||||
RTCounter, SecurityWriteAccess);
|
||||
RTCounter, DixWriteAccess);
|
||||
if (pCounter == NULL)
|
||||
{
|
||||
client->errorValue = stuff->cid;
|
||||
|
@ -1583,7 +1587,7 @@ ProcSyncChangeCounter(client)
|
|||
REQUEST_SIZE_MATCH(xSyncChangeCounterReq);
|
||||
|
||||
pCounter = (SyncCounter *) SecurityLookupIDByType(client, stuff->cid,
|
||||
RTCounter, SecurityWriteAccess);
|
||||
RTCounter, DixWriteAccess);
|
||||
if (pCounter == NULL)
|
||||
{
|
||||
client->errorValue = stuff->cid;
|
||||
|
@ -1621,7 +1625,7 @@ ProcSyncDestroyCounter(client)
|
|||
REQUEST_SIZE_MATCH(xSyncDestroyCounterReq);
|
||||
|
||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
||||
RTCounter, SecurityDestroyAccess);
|
||||
RTCounter, DixDestroyAccess);
|
||||
if (pCounter == NULL)
|
||||
{
|
||||
client->errorValue = stuff->counter;
|
||||
|
@ -1767,7 +1771,7 @@ ProcSyncQueryCounter(client)
|
|||
REQUEST_SIZE_MATCH(xSyncQueryCounterReq);
|
||||
|
||||
pCounter = (SyncCounter *)SecurityLookupIDByType(client, stuff->counter,
|
||||
RTCounter, SecurityReadAccess);
|
||||
RTCounter, DixReadAccess);
|
||||
if (pCounter == NULL)
|
||||
{
|
||||
client->errorValue = stuff->counter;
|
||||
|
@ -1896,7 +1900,7 @@ ProcSyncChangeAlarm(client)
|
|||
REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq);
|
||||
|
||||
if (!(pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||
RTAlarm, SecurityWriteAccess)))
|
||||
RTAlarm, DixWriteAccess)))
|
||||
{
|
||||
client->errorValue = stuff->alarm;
|
||||
return SyncErrorBase + XSyncBadAlarm;
|
||||
|
@ -1937,7 +1941,7 @@ ProcSyncQueryAlarm(client)
|
|||
REQUEST_SIZE_MATCH(xSyncQueryAlarmReq);
|
||||
|
||||
pAlarm = (SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||
RTAlarm, SecurityReadAccess);
|
||||
RTAlarm, DixReadAccess);
|
||||
if (!pAlarm)
|
||||
{
|
||||
client->errorValue = stuff->alarm;
|
||||
|
@ -1997,7 +2001,7 @@ ProcSyncDestroyAlarm(client)
|
|||
REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq);
|
||||
|
||||
if (!((SyncAlarm *)SecurityLookupIDByType(client, stuff->alarm,
|
||||
RTAlarm, SecurityDestroyAccess)))
|
||||
RTAlarm, DixDestroyAccess)))
|
||||
{
|
||||
client->errorValue = stuff->alarm;
|
||||
return SyncErrorBase + XSyncBadAlarm;
|
||||
|
|
|
@ -445,11 +445,10 @@ ProcXF86BigfontQueryFont(
|
|||
#endif
|
||||
client->errorValue = stuff->id; /* EITHER font or gc */
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFont) {
|
||||
/* can't use VERIFY_GC because it might return BadGC */
|
||||
GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pGC) {
|
||||
client->errorValue = stuff->id;
|
||||
return BadFont; /* procotol spec says only error is BadFont */
|
||||
|
|
|
@ -749,7 +749,7 @@ ProcXpGetPageDimensions(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -811,7 +811,7 @@ ProcXpSetImageResolution(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -859,7 +859,7 @@ ProcXpGetImageResolution(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -1068,7 +1068,7 @@ ProcXpSetContext(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -1141,7 +1141,7 @@ ProcXpDestroyContext(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityDestroyAccess))
|
||||
DixDestroyAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -1167,7 +1167,7 @@ ProcXpGetContextScreen(ClientPtr client)
|
|||
if((pContext =(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
return XpErrorBase+XPBadContext;
|
||||
|
||||
|
@ -1852,9 +1852,10 @@ ProcXpStartPage(ClientPtr client)
|
|||
if(pContext->state & PAGE_STARTED)
|
||||
return XpErrorBase+XPBadSequence;
|
||||
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin || pWin->drawable.pScreen->myNum != pContext->screenNum)
|
||||
result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
if (pWin->drawable.pScreen->myNum != pContext->screenNum)
|
||||
return BadWindow;
|
||||
|
||||
if((c = (XpStPagePtr)xalloc(sizeof(XpStPageRec))) == (XpStPagePtr)NULL)
|
||||
|
@ -1943,8 +1944,11 @@ ProcXpPutDocumentData(ClientPtr client)
|
|||
if (stuff->drawable) {
|
||||
if (pContext->state & DOC_RAW_STARTED)
|
||||
return BadDrawable;
|
||||
pDraw = (DrawablePtr)LookupDrawable(stuff->drawable, client);
|
||||
if (!pDraw || pDraw->pScreen->myNum != pContext->screenNum)
|
||||
result = dixLookupDrawable(&pDraw, stuff->drawable, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
if (pDraw->pScreen->myNum != pContext->screenNum)
|
||||
return BadDrawable;
|
||||
} else {
|
||||
if (pContext->state & DOC_COOKED_STARTED)
|
||||
|
@ -1994,7 +1998,7 @@ ProcXpGetDocumentData(ClientPtr client)
|
|||
if((pContext = (XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -2077,7 +2081,7 @@ ProcXpGetAttributes(ClientPtr client)
|
|||
client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -2149,7 +2153,7 @@ ProcXpSetAttributes(ClientPtr client)
|
|||
client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -2229,7 +2233,7 @@ ProcXpGetOneAttribute(ClientPtr client)
|
|||
client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -2300,7 +2304,7 @@ ProcXpSelectInput(ClientPtr client)
|
|||
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
@ -2336,7 +2340,7 @@ ProcXpInputSelected(ClientPtr client)
|
|||
if((pContext=(XpContextPtr)SecurityLookupIDByType(client,
|
||||
stuff->printContext,
|
||||
RTcontext,
|
||||
SecurityReadAccess))
|
||||
DixReadAccess))
|
||||
== (XpContextPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->printContext;
|
||||
|
|
19
Xext/xtest.c
19
Xext/xtest.c
|
@ -139,12 +139,12 @@ ProcXTestCompareCursor(client)
|
|||
xXTestCompareCursorReply rep;
|
||||
WindowPtr pWin;
|
||||
CursorPtr pCursor;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
|
||||
pWin = (WindowPtr)LookupWindow(stuff->window, client);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->cursor == None)
|
||||
pCursor = NullCursor;
|
||||
else if (stuff->cursor == XTestCurrentCursor)
|
||||
|
@ -173,12 +173,10 @@ ProcXTestFakeInput(client)
|
|||
register ClientPtr client;
|
||||
{
|
||||
REQUEST(xXTestFakeInputReq);
|
||||
int nev;
|
||||
int n;
|
||||
int nev, n, type, rc;
|
||||
xEvent *ev;
|
||||
DeviceIntPtr dev = NULL;
|
||||
WindowPtr root;
|
||||
int type;
|
||||
#ifdef XINPUT
|
||||
Bool extension = FALSE;
|
||||
deviceValuator *dv = NULL;
|
||||
|
@ -367,9 +365,10 @@ ProcXTestFakeInput(client)
|
|||
root = GetCurrentRootWindow();
|
||||
else
|
||||
{
|
||||
root = LookupWindow(ev->u.keyButtonPointer.root, client);
|
||||
if (!root)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (root->parent)
|
||||
{
|
||||
client->errorValue = ev->u.keyButtonPointer.root;
|
||||
|
|
|
@ -373,10 +373,8 @@ ProcXvQueryAdaptors(ClientPtr client)
|
|||
xvFormat format;
|
||||
xvAdaptorInfo ainfo;
|
||||
xvQueryAdaptorsReply rep;
|
||||
int totalSize;
|
||||
int na;
|
||||
int totalSize, na, nf, rc;
|
||||
XvAdaptorPtr pa;
|
||||
int nf;
|
||||
XvFormatPtr pf;
|
||||
WindowPtr pWin;
|
||||
ScreenPtr pScreen;
|
||||
|
@ -385,11 +383,9 @@ ProcXvQueryAdaptors(ClientPtr client)
|
|||
REQUEST(xvQueryAdaptorsReq);
|
||||
REQUEST_SIZE_MATCH(xvQueryAdaptorsReq);
|
||||
|
||||
if(!(pWin = (WindowPtr)LookupWindow(stuff->window, client) ))
|
||||
{
|
||||
client->errorValue = stuff->window;
|
||||
return (BadWindow);
|
||||
}
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pxvs = (XvScreenPtr)pScreen->devPrivates[XvScreenIndex].ptr;
|
||||
|
@ -531,9 +527,9 @@ ProcXvQueryEncodings(ClientPtr client)
|
|||
static int
|
||||
ProcXvPutVideo(ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
XvPortPtr pPort;
|
||||
register GCPtr pGC;
|
||||
GCPtr pGC;
|
||||
int status;
|
||||
|
||||
REQUEST(xvPutVideoReq);
|
||||
|
@ -577,9 +573,9 @@ ProcXvPutVideo(ClientPtr client)
|
|||
static int
|
||||
ProcXvPutStill(ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
XvPortPtr pPort;
|
||||
register GCPtr pGC;
|
||||
GCPtr pGC;
|
||||
int status;
|
||||
|
||||
REQUEST(xvPutStillReq);
|
||||
|
@ -624,9 +620,9 @@ ProcXvPutStill(ClientPtr client)
|
|||
static int
|
||||
ProcXvGetVideo(ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
XvPortPtr pPort;
|
||||
register GCPtr pGC;
|
||||
GCPtr pGC;
|
||||
int status;
|
||||
|
||||
REQUEST(xvGetVideoReq);
|
||||
|
@ -671,9 +667,9 @@ ProcXvGetVideo(ClientPtr client)
|
|||
static int
|
||||
ProcXvGetStill(ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
XvPortPtr pPort;
|
||||
register GCPtr pGC;
|
||||
GCPtr pGC;
|
||||
int status;
|
||||
|
||||
REQUEST(xvGetStillReq);
|
||||
|
@ -717,15 +713,14 @@ ProcXvGetStill(ClientPtr client)
|
|||
static int
|
||||
ProcXvSelectVideoNotify(ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
int rc;
|
||||
REQUEST(xvSelectVideoNotifyReq);
|
||||
REQUEST_SIZE_MATCH(xvSelectVideoNotifyReq);
|
||||
|
||||
if(!(pDraw = (DrawablePtr)LOOKUP_DRAWABLE(stuff->drawable, client) ))
|
||||
{
|
||||
client->errorValue = stuff->drawable;
|
||||
return (BadWindow);
|
||||
}
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
return XVCALL(diSelectVideoNotify)(client, pDraw, stuff->onoff);
|
||||
|
||||
|
@ -822,8 +817,8 @@ ProcXvUngrabPort(ClientPtr client)
|
|||
static int
|
||||
ProcXvStopVideo(ClientPtr client)
|
||||
{
|
||||
int status;
|
||||
register DrawablePtr pDraw;
|
||||
int status, rc;
|
||||
DrawablePtr pDraw;
|
||||
XvPortPtr pPort;
|
||||
REQUEST(xvStopVideoReq);
|
||||
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
||||
|
@ -840,11 +835,9 @@ ProcXvStopVideo(ClientPtr client)
|
|||
return (status);
|
||||
}
|
||||
|
||||
if(!(pDraw = LOOKUP_DRAWABLE(stuff->drawable, client) ))
|
||||
{
|
||||
client->errorValue = stuff->drawable;
|
||||
return (BadDrawable);
|
||||
}
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
return XVCALL(diStopVideo)(client, pPort, pDraw);
|
||||
|
||||
|
@ -1877,11 +1870,11 @@ XineramaXvStopVideo(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xvStopVideoReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(i) {
|
||||
|
@ -1905,7 +1898,7 @@ XineramaXvSetPortAttribute(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xvSetPortAttributeReq);
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
FOR_NSCREENS_BACKWARD(i) {
|
||||
|
@ -1931,15 +1924,15 @@ XineramaXvShmPutImage(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xvShmPutImageReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -1978,15 +1971,15 @@ XineramaXvPutImage(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -2023,15 +2016,15 @@ XineramaXvPutVideo(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xvPutVideoReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
@ -2068,15 +2061,15 @@ XineramaXvPutStill(ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xvPutImageReq);
|
||||
|
||||
if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
|
||||
if(!(gc = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->gc, XRT_GC, SecurityReadAccess)))
|
||||
client, stuff->gc, XRT_GC, DixReadAccess)))
|
||||
return BadGC;
|
||||
|
||||
if(!(port = (PanoramiXRes *)SecurityLookupIDByType(
|
||||
client, stuff->port, XvXRTPort, SecurityReadAccess)))
|
||||
client, stuff->port, XvXRTPort, DixReadAccess)))
|
||||
return _XvBadPort;
|
||||
|
||||
isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root;
|
||||
|
|
|
@ -106,7 +106,7 @@ SProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
|||
int
|
||||
ProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
||||
{
|
||||
int i;
|
||||
int i, rc;
|
||||
WindowPtr pWin;
|
||||
struct tmask tmp[EMASKSIZE];
|
||||
OtherInputMasks *others;
|
||||
|
@ -121,11 +121,10 @@ ProcXChangeDeviceDontPropagateList(register ClientPtr client)
|
|||
return Success;
|
||||
}
|
||||
|
||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
||||
if (!pWin) {
|
||||
client->errorValue = stuff->window;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
SendErrorToClient(client, IReqCode, X_ChangeDeviceDontPropagateList, 0,
|
||||
BadWindow);
|
||||
rc);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
|
|
@ -505,6 +505,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
|||
WindowPtr pWin, confineTo;
|
||||
CursorPtr cursor;
|
||||
GrabPtr grab;
|
||||
int rc;
|
||||
|
||||
if ((this_device_mode != GrabModeSync) &&
|
||||
(this_device_mode != GrabModeAsync)) {
|
||||
|
@ -524,15 +525,15 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
|||
client->errorValue = ownerEvents;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = LookupWindow(grabWindow, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (rconfineTo == None)
|
||||
confineTo = NullWindow;
|
||||
else {
|
||||
confineTo = LookupWindow(rconfineTo, client);
|
||||
if (!confineTo)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&confineTo, rconfineTo, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
if (rcursor == None)
|
||||
cursor = NullCursor;
|
||||
|
@ -562,6 +563,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
|||
WindowPtr pWin;
|
||||
GrabPtr grab;
|
||||
KeyClassPtr k = dev->key;
|
||||
int rc;
|
||||
|
||||
if (k == NULL)
|
||||
return BadMatch;
|
||||
|
@ -588,9 +590,9 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
|||
client->errorValue = ownerEvents;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = LookupWindow(grabWindow, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, grabWindow, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
grab = CreateGrab(client->index, dev, pWin,
|
||||
mask, ownerEvents, this_device_mode, other_devices_mode,
|
||||
|
@ -810,7 +812,7 @@ SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
|
|||
} else
|
||||
effectiveFocus = pWin = inputFocus;
|
||||
} else
|
||||
pWin = LookupWindow(dest, client);
|
||||
dixLookupWindow(&pWin, dest, client, DixUnknownAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
if ((propagate != xFalse) && (propagate != xTrue)) {
|
||||
|
|
|
@ -100,7 +100,7 @@ int
|
|||
ProcXGetDeviceDontPropagateList(register ClientPtr client)
|
||||
{
|
||||
CARD16 count = 0;
|
||||
int i;
|
||||
int i, rc;
|
||||
XEventClass *buf = NULL, *tbuf;
|
||||
WindowPtr pWin;
|
||||
xGetDeviceDontPropagateListReply rep;
|
||||
|
@ -115,11 +115,10 @@ ProcXGetDeviceDontPropagateList(register ClientPtr client)
|
|||
rep.length = 0;
|
||||
rep.count = 0;
|
||||
|
||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
||||
if (!pWin) {
|
||||
client->errorValue = stuff->window;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
SendErrorToClient(client, IReqCode, X_GetDeviceDontPropagateList, 0,
|
||||
BadWindow);
|
||||
rc);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
|
|
@ -98,8 +98,7 @@ SProcXGetSelectedExtensionEvents(register ClientPtr client)
|
|||
int
|
||||
ProcXGetSelectedExtensionEvents(register ClientPtr client)
|
||||
{
|
||||
int i;
|
||||
int total_length = 0;
|
||||
int i, rc, total_length = 0;
|
||||
xGetSelectedExtensionEventsReply rep;
|
||||
WindowPtr pWin;
|
||||
XEventClass *buf = NULL;
|
||||
|
@ -118,9 +117,10 @@ ProcXGetSelectedExtensionEvents(register ClientPtr client)
|
|||
rep.this_client_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,
|
||||
BadWindow);
|
||||
rc);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
|
|
@ -170,11 +170,9 @@ ProcXSelectExtensionEvent(register ClientPtr client)
|
|||
return Success;
|
||||
}
|
||||
|
||||
pWin = (WindowPtr) LookupWindow(stuff->window, client);
|
||||
if (!pWin) {
|
||||
client->errorValue = stuff->window;
|
||||
SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0,
|
||||
BadWindow);
|
||||
ret = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (ret != Success) {
|
||||
SendErrorToClient(client, IReqCode, X_SelectExtensionEvent, 0, ret);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ ProcXUngrabDeviceButton(ClientPtr client)
|
|||
DeviceIntPtr mdev;
|
||||
WindowPtr pWin;
|
||||
GrabRec temporaryGrab;
|
||||
int rc;
|
||||
|
||||
REQUEST(xUngrabDeviceButtonReq);
|
||||
REQUEST_SIZE_MATCH(xUngrabDeviceButtonReq);
|
||||
|
@ -134,9 +135,9 @@ ProcXUngrabDeviceButton(ClientPtr client)
|
|||
} else
|
||||
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
||||
|
||||
pWin = LookupWindow(stuff->grabWindow, client);
|
||||
if (!pWin) {
|
||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceButton, 0, rc);
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ ProcXUngrabDeviceKey(ClientPtr client)
|
|||
DeviceIntPtr mdev;
|
||||
WindowPtr pWin;
|
||||
GrabRec temporaryGrab;
|
||||
int rc;
|
||||
|
||||
REQUEST(xUngrabDeviceKeyReq);
|
||||
REQUEST_SIZE_MATCH(xUngrabDeviceKeyReq);
|
||||
|
@ -133,9 +134,9 @@ ProcXUngrabDeviceKey(ClientPtr client)
|
|||
} else
|
||||
mdev = (DeviceIntPtr) LookupKeyboardDevice();
|
||||
|
||||
pWin = LookupWindow(stuff->grabWindow, client);
|
||||
if (!pWin) {
|
||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
SendErrorToClient(client, IReqCode, X_UngrabDeviceKey, 0, rc);
|
||||
return Success;
|
||||
}
|
||||
if (((stuff->key > dev->key->curKeySyms.maxKeyCode) ||
|
||||
|
|
|
@ -93,10 +93,10 @@ typedef struct _compPixmapVisit {
|
|||
static Bool
|
||||
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;
|
||||
|
||||
REGION_NULL(pScreen, &exposed);
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#define DBUS_API_SUBJECT_TO_CHANGE
|
||||
#include <dbus/dbus.h>
|
||||
#include <string.h>
|
||||
#include <sys/select.h>
|
||||
|
||||
#include <X11/X.h>
|
||||
|
||||
|
|
|
@ -1021,7 +1021,7 @@ dnl ---------------------------------------------------------------------------
|
|||
dnl DMX 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
|
||||
DMX="$have_dmx"
|
||||
fi
|
||||
|
|
|
@ -173,13 +173,17 @@ ProcDamageCreate (ClientPtr client)
|
|||
DamageExtPtr pDamageExt;
|
||||
DamageReportLevel level;
|
||||
RegionPtr pRegion;
|
||||
int rc;
|
||||
|
||||
REQUEST(xDamageCreateReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xDamageCreateReq);
|
||||
LEGAL_NEW_RESOURCE(stuff->damage, client);
|
||||
SECURITY_VERIFY_DRAWABLE (pDrawable, stuff->drawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
switch (stuff->level) {
|
||||
case XDamageReportRawRectangles:
|
||||
level = DamageReportRawRegion;
|
||||
|
@ -237,7 +241,7 @@ ProcDamageDestroy (ClientPtr client)
|
|||
DamageExtPtr pDamageExt;
|
||||
|
||||
REQUEST_SIZE_MATCH(xDamageDestroyReq);
|
||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess);
|
||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
|
||||
FreeResource (stuff->damage, RT_NONE);
|
||||
return (client->noClientException);
|
||||
}
|
||||
|
@ -251,9 +255,9 @@ ProcDamageSubtract (ClientPtr client)
|
|||
RegionPtr pParts;
|
||||
|
||||
REQUEST_SIZE_MATCH(xDamageSubtractReq);
|
||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, SecurityWriteAccess);
|
||||
VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, SecurityWriteAccess);
|
||||
VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, SecurityWriteAccess);
|
||||
VERIFY_DAMAGEEXT(pDamageExt, stuff->damage, client, DixWriteAccess);
|
||||
VERIFY_REGION_OR_NONE(pRepair, stuff->repair, client, DixWriteAccess);
|
||||
VERIFY_REGION_OR_NONE(pParts, stuff->parts, client, DixWriteAccess);
|
||||
|
||||
if (pDamageExt->level != DamageReportRawRegion)
|
||||
{
|
||||
|
|
32
dbe/dbe.c
32
dbe/dbe.c
|
@ -405,11 +405,9 @@ ProcDbeAllocateBackBufferName(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xDbeAllocateBackBufferNameReq);
|
||||
|
||||
/* The window must be valid. */
|
||||
if (!(pWin = SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess)))
|
||||
{
|
||||
return(BadWindow);
|
||||
}
|
||||
status = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (status != Success)
|
||||
return status;
|
||||
|
||||
/* The window must be InputOutput. */
|
||||
if (pWin->drawable.class != InputOutput)
|
||||
|
@ -633,9 +631,9 @@ ProcDbeDeallocateBackBufferName(ClientPtr client)
|
|||
|
||||
/* Buffer name must be valid */
|
||||
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
||||
stuff->buffer, dbeWindowPrivResType, SecurityDestroyAccess)) ||
|
||||
stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) ||
|
||||
!(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType,
|
||||
SecurityDestroyAccess)))
|
||||
DixDestroyAccess)))
|
||||
{
|
||||
client->errorValue = stuff->buffer;
|
||||
return(dbeErrorBase + DbeBadBuffer);
|
||||
|
@ -729,11 +727,11 @@ ProcDbeSwapBuffers(ClientPtr client)
|
|||
/* Check all windows to swap. */
|
||||
|
||||
/* Each window must be a valid window - BadWindow. */
|
||||
if (!(pWin = SecurityLookupWindow(dbeSwapInfo[i].window, client,
|
||||
SecurityWriteAccess)))
|
||||
{
|
||||
error = dixLookupWindow(&pWin, dbeSwapInfo[i].window, client,
|
||||
DixWriteAccess);
|
||||
if (error != Success) {
|
||||
DEALLOCATE_LOCAL(swapInfo);
|
||||
return(BadWindow);
|
||||
return error;
|
||||
}
|
||||
|
||||
/* Each window must be double-buffered - BadMatch. */
|
||||
|
@ -867,7 +865,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
|||
xDbeGetVisualInfoReply rep;
|
||||
Drawable *drawables;
|
||||
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 length; /* length of reply */
|
||||
ScreenPtr pScreen;
|
||||
|
@ -889,11 +887,11 @@ ProcDbeGetVisualInfo(ClientPtr client)
|
|||
|
||||
for (i = 0; i < stuff->n; i++)
|
||||
{
|
||||
if (!(pDrawables[i] = (DrawablePtr)SecurityLookupDrawable(
|
||||
drawables[i], client, SecurityReadAccess)))
|
||||
{
|
||||
rc = dixLookupDrawable(pDrawables+i, drawables[i], client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success) {
|
||||
DEALLOCATE_LOCAL(pDrawables);
|
||||
return(BadDrawable);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1047,7 +1045,7 @@ ProcDbeGetBackBufferAttributes(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq);
|
||||
|
||||
if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client,
|
||||
stuff->buffer, dbeWindowPrivResType, SecurityReadAccess)))
|
||||
stuff->buffer, dbeWindowPrivResType, DixReadAccess)))
|
||||
{
|
||||
rep.attributes = None;
|
||||
}
|
||||
|
|
|
@ -903,7 +903,7 @@ AllocColor (ColormapPtr pmap,
|
|||
{
|
||||
ColormapPtr prootmap = (ColormapPtr)
|
||||
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
|
||||
if (pmap->class == prootmap->class)
|
||||
FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
|
||||
|
@ -920,7 +920,7 @@ AllocColor (ColormapPtr pmap,
|
|||
{
|
||||
ColormapPtr prootmap = (ColormapPtr)
|
||||
SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
|
||||
if (pmap->class == prootmap->class)
|
||||
{
|
||||
|
|
|
@ -262,9 +262,9 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
|
|||
GlyphSharePtr pShare;
|
||||
|
||||
sourcefont = (FontPtr) SecurityLookupIDByType(client, source, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
maskfont = (FontPtr) SecurityLookupIDByType(client, mask, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
|
||||
if (!sourcefont)
|
||||
{
|
||||
|
|
|
@ -1840,16 +1840,16 @@ ProcGetMotionEvents(ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
xTimecoord * coords = (xTimecoord *) NULL;
|
||||
xGetMotionEventsReply rep;
|
||||
int i, count, xmin, xmax, ymin, ymax;
|
||||
int i, count, xmin, xmax, ymin, ymax, rc;
|
||||
unsigned long nEvents;
|
||||
DeviceIntPtr mouse = inputInfo.pointer;
|
||||
TimeStamp start, stop;
|
||||
REQUEST(xGetMotionEventsReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xGetMotionEventsReq);
|
||||
pWin = SecurityLookupWindow(stuff->window, client, TRUE);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (mouse->valuator->motionHintWindow)
|
||||
MaybeStopHint(mouse, client);
|
||||
rep.type = X_Reply;
|
||||
|
|
445
dix/dispatch.c
445
dix/dispatch.c
|
@ -554,17 +554,16 @@ ProcBadRequest(ClientPtr client)
|
|||
int
|
||||
ProcCreateWindow(ClientPtr client)
|
||||
{
|
||||
register WindowPtr pParent, pWin;
|
||||
WindowPtr pParent, pWin;
|
||||
REQUEST(xCreateWindowReq);
|
||||
int result;
|
||||
int len;
|
||||
int result, len, rc;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xCreateWindowReq);
|
||||
|
||||
LEGAL_NEW_RESOURCE(stuff->wid, client);
|
||||
if (!(pParent = (WindowPtr)SecurityLookupWindow(stuff->parent, client,
|
||||
SecurityWriteAccess)))
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pParent, stuff->parent, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
len = client->req_len - (sizeof(xCreateWindowReq) >> 2);
|
||||
if (Ones(stuff->mask) != len)
|
||||
return BadLength;
|
||||
|
@ -597,16 +596,15 @@ ProcCreateWindow(ClientPtr client)
|
|||
int
|
||||
ProcChangeWindowAttributes(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xChangeWindowAttributesReq);
|
||||
register int result;
|
||||
int len;
|
||||
int len, rc;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
len = client->req_len - (sizeof(xChangeWindowAttributesReq) >> 2);
|
||||
if (len != Ones(stuff->valueMask))
|
||||
return BadLength;
|
||||
|
@ -623,15 +621,15 @@ ProcChangeWindowAttributes(register ClientPtr client)
|
|||
int
|
||||
ProcGetWindowAttributes(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
xGetWindowAttributesReply wa;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
GetWindowAttributes(pWin, client, &wa);
|
||||
WriteReplyToClient(client, sizeof(xGetWindowAttributesReply), &wa);
|
||||
return(client->noClientException);
|
||||
|
@ -640,14 +638,14 @@ ProcGetWindowAttributes(register ClientPtr client)
|
|||
int
|
||||
ProcDestroyWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityDestroyAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (pWin->parent)
|
||||
FreeResource(stuff->id, RT_NONE);
|
||||
return(client->noClientException);
|
||||
|
@ -656,14 +654,14 @@ ProcDestroyWindow(register ClientPtr client)
|
|||
int
|
||||
ProcDestroySubwindows(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityDestroyAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
DestroySubwindows(pWin, client);
|
||||
return(client->noClientException);
|
||||
}
|
||||
|
@ -671,15 +669,14 @@ ProcDestroySubwindows(register ClientPtr client)
|
|||
int
|
||||
ProcChangeSaveSet(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xChangeSaveSetReq);
|
||||
register int result;
|
||||
register int result, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xChangeSaveSetReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (client->clientAsMask == (CLIENT_BITS(pWin->drawable.id)))
|
||||
return BadMatch;
|
||||
if ((stuff->mode == SetModeInsert) || (stuff->mode == SetModeDelete))
|
||||
|
@ -700,19 +697,17 @@ ProcChangeSaveSet(register ClientPtr client)
|
|||
int
|
||||
ProcReparentWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin, pParent;
|
||||
WindowPtr pWin, pParent;
|
||||
REQUEST(xReparentWindowReq);
|
||||
register int result;
|
||||
register int result, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xReparentWindowReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
pParent = (WindowPtr)SecurityLookupWindow(stuff->parent, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pParent)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rc = dixLookupWindow(&pParent, stuff->parent, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (SAME_SCREENS(pWin->drawable, pParent->drawable))
|
||||
{
|
||||
if ((pWin->backgroundState == ParentRelative) &&
|
||||
|
@ -735,14 +730,14 @@ ProcReparentWindow(register ClientPtr client)
|
|||
int
|
||||
ProcMapWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
MapWindow(pWin, client);
|
||||
/* update cache to say it is mapped */
|
||||
return(client->noClientException);
|
||||
|
@ -751,14 +746,14 @@ ProcMapWindow(register ClientPtr client)
|
|||
int
|
||||
ProcMapSubwindows(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow( stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
MapSubwindows(pWin, client);
|
||||
/* update cache to say it is mapped */
|
||||
return(client->noClientException);
|
||||
|
@ -767,14 +762,14 @@ ProcMapSubwindows(register ClientPtr client)
|
|||
int
|
||||
ProcUnmapWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow( stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
UnmapWindow(pWin, FALSE);
|
||||
/* update cache to say it is mapped */
|
||||
return(client->noClientException);
|
||||
|
@ -783,14 +778,14 @@ ProcUnmapWindow(register ClientPtr client)
|
|||
int
|
||||
ProcUnmapSubwindows(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow( stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
UnmapSubwindows(pWin);
|
||||
return(client->noClientException);
|
||||
}
|
||||
|
@ -798,16 +793,15 @@ ProcUnmapSubwindows(register ClientPtr client)
|
|||
int
|
||||
ProcConfigureWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xConfigureWindowReq);
|
||||
register int result;
|
||||
int len;
|
||||
int len, rc;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xConfigureWindowReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow( stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
len = client->req_len - (sizeof(xConfigureWindowReq) >> 2);
|
||||
if (Ones((Mask)stuff->mask) != len)
|
||||
return BadLength;
|
||||
|
@ -822,8 +816,9 @@ ProcConfigureWindow(register ClientPtr client)
|
|||
int
|
||||
ProcCirculateWindow(register ClientPtr client)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xCirculateWindowReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xCirculateWindowReq);
|
||||
if ((stuff->direction != RaiseLowest) &&
|
||||
|
@ -832,10 +827,9 @@ ProcCirculateWindow(register ClientPtr client)
|
|||
client->errorValue = stuff->direction;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
CirculateWindow(pWin, (int)stuff->direction, client);
|
||||
return(client->noClientException);
|
||||
}
|
||||
|
@ -843,11 +837,15 @@ ProcCirculateWindow(register ClientPtr client)
|
|||
int
|
||||
GetGeometry(register ClientPtr client, xGetGeometryReply *rep)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
int rc;
|
||||
REQUEST(xResourceReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
SECURITY_VERIFY_GEOMETRABLE (pDraw, stuff->id, client, SecurityReadAccess);
|
||||
|
||||
rc = dixLookupDrawable(&pDraw, stuff->id, client, M_ANY, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep->type = X_Reply;
|
||||
rep->length = 0;
|
||||
rep->sequenceNumber = client->sequence;
|
||||
|
@ -899,16 +897,15 @@ int
|
|||
ProcQueryTree(register ClientPtr client)
|
||||
{
|
||||
xQueryTreeReply reply;
|
||||
int numChildren = 0;
|
||||
register WindowPtr pChild, pWin, pHead;
|
||||
int rc, numChildren = 0;
|
||||
WindowPtr pChild, pWin, pHead;
|
||||
Window *childIDs = (Window *)NULL;
|
||||
REQUEST(xResourceReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
reply.type = X_Reply;
|
||||
reply.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id;
|
||||
reply.sequenceNumber = client->sequence;
|
||||
|
@ -1021,10 +1018,9 @@ ProcSetSelectionOwner(register ClientPtr client)
|
|||
return Success;
|
||||
if (stuff->window != None)
|
||||
{
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
int rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
else
|
||||
pWin = (WindowPtr)None;
|
||||
|
@ -1138,12 +1134,12 @@ ProcConvertSelection(register ClientPtr client)
|
|||
xEvent event;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xConvertSelectionReq);
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xConvertSelectionReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->requestor, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->requestor, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
paramsOkay = (ValidAtom(stuff->selection) && ValidAtom(stuff->target));
|
||||
if (stuff->property != None)
|
||||
|
@ -1159,7 +1155,7 @@ ProcConvertSelection(register ClientPtr client)
|
|||
(CurrentSelections[i].window != None) &&
|
||||
XaceHook(XACE_RESOURCE_ACCESS, client,
|
||||
CurrentSelections[i].window, RT_WINDOW,
|
||||
SecurityReadAccess, CurrentSelections[i].pWin))
|
||||
DixReadAccess, CurrentSelections[i].pWin))
|
||||
{
|
||||
event.u.u.type = SelectionRequest;
|
||||
event.u.selectionRequest.time = stuff->time;
|
||||
|
@ -1258,18 +1254,17 @@ ProcTranslateCoords(register ClientPtr client)
|
|||
{
|
||||
REQUEST(xTranslateCoordsReq);
|
||||
|
||||
register WindowPtr pWin, pDst;
|
||||
WindowPtr pWin, pDst;
|
||||
xTranslateCoordsReply rep;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xTranslateCoordsReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->srcWid, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
pDst = (WindowPtr)SecurityLookupWindow(stuff->dstWid, client,
|
||||
SecurityReadAccess);
|
||||
if (!pDst)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->srcWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rc = dixLookupWindow(&pDst, stuff->dstWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -1358,7 +1353,7 @@ ProcCloseFont(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
if ( pFont != (FontPtr)NULL) /* id was valid */
|
||||
{
|
||||
FreeResource(stuff->id, RT_NONE);
|
||||
|
@ -1382,12 +1377,11 @@ ProcQueryFont(register ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
client->errorValue = stuff->id; /* EITHER font or gc */
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFont)
|
||||
{
|
||||
/* can't use VERIFY_GC because it might return BadGC */
|
||||
pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pGC)
|
||||
{
|
||||
client->errorValue = stuff->id;
|
||||
|
@ -1443,11 +1437,11 @@ ProcQueryTextExtents(register ClientPtr client)
|
|||
REQUEST_AT_LEAST_SIZE(xQueryTextExtentsReq);
|
||||
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, stuff->fid, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFont)
|
||||
{
|
||||
pGC = (GC *)SecurityLookupIDByType(client, stuff->fid, RT_GC,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pGC)
|
||||
{
|
||||
client->errorValue = stuff->fid;
|
||||
|
@ -1517,16 +1511,20 @@ int
|
|||
ProcCreatePixmap(register ClientPtr client)
|
||||
{
|
||||
PixmapPtr pMap;
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xCreatePixmapReq);
|
||||
DepthPtr pDepth;
|
||||
register int i;
|
||||
register int i, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xCreatePixmapReq);
|
||||
client->errorValue = stuff->pid;
|
||||
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
||||
SECURITY_VERIFY_GEOMETRABLE (pDraw, stuff->drawable, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!stuff->width || !stuff->height)
|
||||
{
|
||||
client->errorValue = 0;
|
||||
|
@ -1581,7 +1579,7 @@ ProcFreePixmap(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pMap = (PixmapPtr)SecurityLookupIDByType(client, stuff->id, RT_PIXMAP,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
if (pMap)
|
||||
{
|
||||
FreeResource(stuff->id, RT_NONE);
|
||||
|
@ -1597,17 +1595,19 @@ ProcFreePixmap(register ClientPtr client)
|
|||
int
|
||||
ProcCreateGC(register ClientPtr client)
|
||||
{
|
||||
int error;
|
||||
int error, rc;
|
||||
GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
unsigned len;
|
||||
REQUEST(xCreateGCReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xCreateGCReq);
|
||||
client->errorValue = stuff->gc;
|
||||
LEGAL_NEW_RESOURCE(stuff->gc, client);
|
||||
SECURITY_VERIFY_DRAWABLE (pDraw, stuff->drawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
len = client->req_len - (sizeof(xCreateGCReq) >> 2);
|
||||
if (len != Ones(stuff->mask))
|
||||
return BadLength;
|
||||
|
@ -1624,12 +1624,15 @@ int
|
|||
ProcChangeGC(register ClientPtr client)
|
||||
{
|
||||
GC *pGC;
|
||||
REQUEST(xChangeGCReq);
|
||||
int result;
|
||||
unsigned len;
|
||||
|
||||
REQUEST(xChangeGCReq);
|
||||
REQUEST_AT_LEAST_SIZE(xChangeGCReq);
|
||||
SECURITY_VERIFY_GC(pGC, stuff->gc, client, SecurityWriteAccess);
|
||||
|
||||
result = dixLookupGC(&pGC, stuff->gc, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
len = client->req_len - (sizeof(xChangeGCReq) >> 2);
|
||||
if (len != Ones(stuff->mask))
|
||||
return BadLength;
|
||||
|
@ -1647,14 +1650,18 @@ ProcChangeGC(register ClientPtr client)
|
|||
int
|
||||
ProcCopyGC(register ClientPtr client)
|
||||
{
|
||||
register GC *dstGC;
|
||||
register GC *pGC;
|
||||
GC *dstGC;
|
||||
GC *pGC;
|
||||
int result;
|
||||
REQUEST(xCopyGCReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xCopyGCReq);
|
||||
SECURITY_VERIFY_GC( pGC, stuff->srcGC, client, SecurityReadAccess);
|
||||
SECURITY_VERIFY_GC( dstGC, stuff->dstGC, client, SecurityWriteAccess);
|
||||
|
||||
result = dixLookupGC(&pGC, stuff->srcGC, client, DixReadAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
result = dixLookupGC(&dstGC, stuff->dstGC, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
if ((dstGC->pScreen != pGC->pScreen) || (dstGC->depth != pGC->depth))
|
||||
return (BadMatch);
|
||||
result = CopyGC(pGC, dstGC, stuff->mask);
|
||||
|
@ -1670,7 +1677,7 @@ ProcCopyGC(register ClientPtr client)
|
|||
int
|
||||
ProcSetDashes(register ClientPtr client)
|
||||
{
|
||||
register GC *pGC;
|
||||
GC *pGC;
|
||||
int result;
|
||||
REQUEST(xSetDashesReq);
|
||||
|
||||
|
@ -1681,7 +1688,9 @@ ProcSetDashes(register ClientPtr client)
|
|||
return BadValue;
|
||||
}
|
||||
|
||||
SECURITY_VERIFY_GC(pGC,stuff->gc, client, SecurityWriteAccess);
|
||||
result = dixLookupGC(&pGC,stuff->gc, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
result = SetDashes(pGC, stuff->dashOffset, stuff->nDashes,
|
||||
(unsigned char *)&stuff[1]);
|
||||
|
@ -1697,9 +1706,8 @@ ProcSetDashes(register ClientPtr client)
|
|||
int
|
||||
ProcSetClipRectangles(register ClientPtr client)
|
||||
{
|
||||
int nr;
|
||||
int result;
|
||||
register GC *pGC;
|
||||
int nr, result;
|
||||
GC *pGC;
|
||||
REQUEST(xSetClipRectanglesReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
|
||||
|
@ -1709,7 +1717,9 @@ ProcSetClipRectangles(register ClientPtr client)
|
|||
client->errorValue = stuff->ordering;
|
||||
return BadValue;
|
||||
}
|
||||
SECURITY_VERIFY_GC(pGC,stuff->gc, client, SecurityWriteAccess);
|
||||
result = dixLookupGC(&pGC,stuff->gc, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
nr = (client->req_len << 2) - sizeof(xSetClipRectanglesReq);
|
||||
if (nr & 4)
|
||||
|
@ -1726,11 +1736,15 @@ ProcSetClipRectangles(register ClientPtr client)
|
|||
int
|
||||
ProcFreeGC(register ClientPtr client)
|
||||
{
|
||||
register GC *pGC;
|
||||
GC *pGC;
|
||||
int rc;
|
||||
REQUEST(xResourceReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
SECURITY_VERIFY_GC(pGC, stuff->id, client, SecurityDestroyAccess);
|
||||
|
||||
rc = dixLookupGC(&pGC, stuff->id, client, DixDestroyAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
FreeResource(stuff->id, RT_NONE);
|
||||
return(client->noClientException);
|
||||
}
|
||||
|
@ -1739,13 +1753,13 @@ int
|
|||
ProcClearToBackground(register ClientPtr client)
|
||||
{
|
||||
REQUEST(xClearAreaReq);
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xClearAreaReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (pWin->drawable.class == InputOnly)
|
||||
{
|
||||
client->errorValue = stuff->window;
|
||||
|
@ -1765,19 +1779,22 @@ ProcClearToBackground(register ClientPtr client)
|
|||
int
|
||||
ProcCopyArea(register ClientPtr client)
|
||||
{
|
||||
register DrawablePtr pDst;
|
||||
register DrawablePtr pSrc;
|
||||
register GC *pGC;
|
||||
DrawablePtr pDst;
|
||||
DrawablePtr pSrc;
|
||||
GC *pGC;
|
||||
REQUEST(xCopyAreaReq);
|
||||
RegionPtr pRgn;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xCopyAreaReq);
|
||||
|
||||
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pDst, pGC, client);
|
||||
if (stuff->dstDrawable != stuff->srcDrawable)
|
||||
{
|
||||
SECURITY_VERIFY_DRAWABLE(pSrc, stuff->srcDrawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pSrc, stuff->srcDrawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if ((pDst->pScreen != pSrc->pScreen) || (pDst->depth != pSrc->depth))
|
||||
{
|
||||
client->errorValue = stuff->dstDrawable;
|
||||
|
@ -1806,18 +1823,22 @@ ProcCopyArea(register ClientPtr client)
|
|||
int
|
||||
ProcCopyPlane(register ClientPtr client)
|
||||
{
|
||||
register DrawablePtr psrcDraw, pdstDraw;
|
||||
register GC *pGC;
|
||||
DrawablePtr psrcDraw, pdstDraw;
|
||||
GC *pGC;
|
||||
REQUEST(xCopyPlaneReq);
|
||||
RegionPtr pRgn;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xCopyPlaneReq);
|
||||
|
||||
VALIDATE_DRAWABLE_AND_GC(stuff->dstDrawable, pdstDraw, pGC, client);
|
||||
if (stuff->dstDrawable != stuff->srcDrawable)
|
||||
{
|
||||
SECURITY_VERIFY_DRAWABLE(psrcDraw, stuff->srcDrawable, client,
|
||||
SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&psrcDraw, stuff->srcDrawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (pdstDraw->pScreen != psrcDraw->pScreen)
|
||||
{
|
||||
client->errorValue = stuff->dstDrawable;
|
||||
|
@ -1854,8 +1875,8 @@ int
|
|||
ProcPolyPoint(register ClientPtr client)
|
||||
{
|
||||
int npoint;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyPointReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyPointReq);
|
||||
|
@ -1877,8 +1898,8 @@ int
|
|||
ProcPolyLine(register ClientPtr client)
|
||||
{
|
||||
int npoint;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyLineReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyLineReq);
|
||||
|
@ -1900,8 +1921,8 @@ int
|
|||
ProcPolySegment(register ClientPtr client)
|
||||
{
|
||||
int nsegs;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolySegmentReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolySegmentReq);
|
||||
|
@ -1919,8 +1940,8 @@ int
|
|||
ProcPolyRectangle (register ClientPtr client)
|
||||
{
|
||||
int nrects;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyRectangleReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyRectangleReq);
|
||||
|
@ -1939,8 +1960,8 @@ int
|
|||
ProcPolyArc(register ClientPtr client)
|
||||
{
|
||||
int narcs;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyArcReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyArcReq);
|
||||
|
@ -1958,8 +1979,8 @@ int
|
|||
ProcFillPoly(register ClientPtr client)
|
||||
{
|
||||
int things;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xFillPolyReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xFillPolyReq);
|
||||
|
@ -1989,8 +2010,8 @@ int
|
|||
ProcPolyFillRectangle(register ClientPtr client)
|
||||
{
|
||||
int things;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyFillRectangleReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq);
|
||||
|
@ -2010,8 +2031,8 @@ int
|
|||
ProcPolyFillArc(register ClientPtr client)
|
||||
{
|
||||
int narcs;
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
REQUEST(xPolyFillArcReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xPolyFillArcReq);
|
||||
|
@ -2082,8 +2103,8 @@ ReformatImage (char *base, int nbytes, int bpp, int order)
|
|||
int
|
||||
ProcPutImage(register ClientPtr client)
|
||||
{
|
||||
register GC *pGC;
|
||||
register DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
long length; /* length of scanline server padded */
|
||||
long lengthProto; /* length of scanline protocol padded */
|
||||
char *tmpImage;
|
||||
|
@ -2142,8 +2163,8 @@ DoGetImage(register ClientPtr client, int format, Drawable drawable,
|
|||
int x, int y, int width, int height,
|
||||
Mask planemask, xGetImageReply **im_return)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
int nlines, linesPerBuf;
|
||||
DrawablePtr pDraw;
|
||||
int nlines, linesPerBuf, rc;
|
||||
register int linesDone;
|
||||
long widthBytesLine, length;
|
||||
Mask plane = 0;
|
||||
|
@ -2156,7 +2177,10 @@ DoGetImage(register ClientPtr client, int format, Drawable drawable,
|
|||
client->errorValue = format;
|
||||
return(BadValue);
|
||||
}
|
||||
SECURITY_VERIFY_DRAWABLE(pDraw, drawable, client, SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pDraw, drawable, client, 0, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if(pDraw->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
if( /* check for being viewable */
|
||||
|
@ -2400,8 +2424,8 @@ int
|
|||
ProcImageText8(register ClientPtr client)
|
||||
{
|
||||
int err;
|
||||
register DrawablePtr pDraw;
|
||||
register GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
|
||||
REQUEST(xImageTextReq);
|
||||
|
||||
|
@ -2430,8 +2454,8 @@ int
|
|||
ProcImageText16(register ClientPtr client)
|
||||
{
|
||||
int err;
|
||||
register DrawablePtr pDraw;
|
||||
register GC *pGC;
|
||||
DrawablePtr pDraw;
|
||||
GC *pGC;
|
||||
|
||||
REQUEST(xImageTextReq);
|
||||
|
||||
|
@ -2463,7 +2487,7 @@ ProcCreateColormap(register ClientPtr client)
|
|||
VisualPtr pVisual;
|
||||
ColormapPtr pmap;
|
||||
Colormap mid;
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
ScreenPtr pScreen;
|
||||
REQUEST(xCreateColormapReq);
|
||||
int i, result;
|
||||
|
@ -2477,10 +2501,9 @@ ProcCreateColormap(register ClientPtr client)
|
|||
}
|
||||
mid = stuff->mid;
|
||||
LEGAL_NEW_RESOURCE(mid, client);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
result = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
for (i = 0, pVisual = pScreen->visuals;
|
||||
|
@ -2508,7 +2531,7 @@ ProcFreeColormap(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pmap = (ColormapPtr )SecurityLookupIDByType(client, stuff->id, RT_COLORMAP,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
if (pmap)
|
||||
{
|
||||
/* Freeing a default colormap is a no-op */
|
||||
|
@ -2536,7 +2559,7 @@ ProcCopyColormapAndFree(register ClientPtr client)
|
|||
mid = stuff->mid;
|
||||
LEGAL_NEW_RESOURCE(mid, client);
|
||||
if( (pSrcMap = (ColormapPtr )SecurityLookupIDByType(client, stuff->srcCmap,
|
||||
RT_COLORMAP, SecurityReadAccess|SecurityWriteAccess)) )
|
||||
RT_COLORMAP, DixReadAccess|DixWriteAccess)) )
|
||||
{
|
||||
result = CopyColormapAndFree(mid, pSrcMap, client->index);
|
||||
if (client->noClientException != Success)
|
||||
|
@ -2559,7 +2582,7 @@ ProcInstallColormap(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->id,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
(*(pcmp->pScreen->InstallColormap)) (pcmp);
|
||||
|
@ -2580,7 +2603,7 @@ ProcUninstallColormap(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->id,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
if(pcmp->mid != pcmp->pScreen->defColormap)
|
||||
|
@ -2598,16 +2621,14 @@ int
|
|||
ProcListInstalledColormaps(register ClientPtr client)
|
||||
{
|
||||
xListInstalledColormapsReply *preply;
|
||||
int nummaps;
|
||||
int nummaps, rc;
|
||||
WindowPtr pWin;
|
||||
REQUEST(xResourceReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
preply = (xListInstalledColormapsReply *)
|
||||
ALLOCATE_LOCAL(sizeof(xListInstalledColormapsReply) +
|
||||
|
@ -2639,7 +2660,7 @@ ProcAllocColor (register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xAllocColorReq);
|
||||
pmap = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pmap)
|
||||
{
|
||||
acr.type = X_Reply;
|
||||
|
@ -2679,7 +2700,7 @@ ProcAllocNamedColor (register ClientPtr client)
|
|||
|
||||
REQUEST_FIXED_SIZE(xAllocNamedColorReq, stuff->nbytes);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
int retval;
|
||||
|
@ -2731,7 +2752,7 @@ ProcAllocColorCells (register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xAllocColorCellsReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
xAllocColorCellsReply accr;
|
||||
|
@ -2797,7 +2818,7 @@ ProcAllocColorPlanes(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xAllocColorPlanesReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
xAllocColorPlanesReply acpr;
|
||||
|
@ -2861,7 +2882,7 @@ ProcFreeColors(register ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xFreeColorsReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
int count;
|
||||
|
@ -2896,7 +2917,7 @@ ProcStoreColors (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xStoreColorsReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
int count;
|
||||
|
@ -2930,7 +2951,7 @@ ProcStoreNamedColor (register ClientPtr client)
|
|||
|
||||
REQUEST_FIXED_SIZE(xStoreNamedColorReq, stuff->nbytes);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityWriteAccess);
|
||||
RT_COLORMAP, DixWriteAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
xColorItem def;
|
||||
|
@ -2964,7 +2985,7 @@ ProcQueryColors(register ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xQueryColorsReq);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
int count, retval;
|
||||
|
@ -3015,7 +3036,7 @@ ProcLookupColor(register ClientPtr client)
|
|||
|
||||
REQUEST_FIXED_SIZE(xLookupColorReq, stuff->nbytes);
|
||||
pcmp = (ColormapPtr)SecurityLookupIDByType(client, stuff->cmap,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
if (pcmp)
|
||||
{
|
||||
xLookupColorReply lcr;
|
||||
|
@ -3065,9 +3086,9 @@ ProcCreateCursor (register ClientPtr client)
|
|||
LEGAL_NEW_RESOURCE(stuff->cid, client);
|
||||
|
||||
src = (PixmapPtr)SecurityLookupIDByType(client, stuff->source,
|
||||
RT_PIXMAP, SecurityReadAccess);
|
||||
RT_PIXMAP, DixReadAccess);
|
||||
msk = (PixmapPtr)SecurityLookupIDByType(client, stuff->mask,
|
||||
RT_PIXMAP, SecurityReadAccess);
|
||||
RT_PIXMAP, DixReadAccess);
|
||||
if ( src == (PixmapPtr)NULL)
|
||||
{
|
||||
client->errorValue = stuff->source;
|
||||
|
@ -3167,7 +3188,7 @@ ProcFreeCursor (register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->id,
|
||||
RT_CURSOR, SecurityDestroyAccess);
|
||||
RT_CURSOR, DixDestroyAccess);
|
||||
if (pCursor)
|
||||
{
|
||||
FreeResource(stuff->id, RT_NONE);
|
||||
|
@ -3184,11 +3205,12 @@ int
|
|||
ProcQueryBestSize (register ClientPtr client)
|
||||
{
|
||||
xQueryBestSizeReply reply;
|
||||
register DrawablePtr pDraw;
|
||||
DrawablePtr pDraw;
|
||||
ScreenPtr pScreen;
|
||||
int rc;
|
||||
REQUEST(xQueryBestSizeReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xQueryBestSizeReq);
|
||||
|
||||
if ((stuff->class != CursorShape) &&
|
||||
(stuff->class != TileShape) &&
|
||||
(stuff->class != StippleShape))
|
||||
|
@ -3196,8 +3218,11 @@ ProcQueryBestSize (register ClientPtr client)
|
|||
client->errorValue = stuff->class;
|
||||
return(BadValue);
|
||||
}
|
||||
SECURITY_VERIFY_GEOMETRABLE (pDraw, stuff->drawable, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->class != CursorShape && pDraw->type == UNDRAWABLE_WINDOW)
|
||||
return (BadMatch);
|
||||
pScreen = pDraw->pScreen;
|
||||
|
@ -3321,7 +3346,7 @@ ProcListHosts(register ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xListHostsReq);
|
||||
|
||||
/* untrusted clients can't list hosts */
|
||||
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, SecurityReadAccess))
|
||||
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, DixReadAccess))
|
||||
return BadAccess;
|
||||
|
||||
result = GetHosts(&pdata, &nHosts, &len, &reply.enabled);
|
||||
|
@ -3363,7 +3388,8 @@ int
|
|||
ProcKillClient(register ClientPtr client)
|
||||
{
|
||||
REQUEST(xResourceReq);
|
||||
ClientPtr killclient;
|
||||
ClientPtr killclient;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
if (stuff->id == AllTemporary)
|
||||
|
@ -3372,8 +3398,8 @@ ProcKillClient(register ClientPtr client)
|
|||
return (client->noClientException);
|
||||
}
|
||||
|
||||
if ((killclient = LookupClient(stuff->id, client)))
|
||||
{
|
||||
rc = dixLookupClient(&killclient, stuff->id, client, DixDestroyAccess);
|
||||
if (rc == Success) {
|
||||
CloseDownClient(killclient);
|
||||
/* if an LBX proxy gets killed, isItTimeToYield will be set */
|
||||
if (isItTimeToYield || (client == killclient))
|
||||
|
@ -3387,10 +3413,7 @@ ProcKillClient(register ClientPtr client)
|
|||
return (client->noClientException);
|
||||
}
|
||||
else
|
||||
{
|
||||
client->errorValue = stuff->id;
|
||||
return (BadValue);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -1178,7 +1178,7 @@ doPolyText(ClientPtr client, register PTclosurePtr c)
|
|||
if (c->slept &&
|
||||
c->pDraw &&
|
||||
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
||||
RC_DRAWABLE, SecurityWriteAccess))
|
||||
RC_DRAWABLE, DixWriteAccess))
|
||||
{
|
||||
/* Our drawable has disappeared. Treat like client died... ask
|
||||
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+1)) << 24;
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFont)
|
||||
{
|
||||
client->errorValue = fid;
|
||||
|
@ -1463,7 +1463,7 @@ doImageText(ClientPtr client, register ITclosurePtr c)
|
|||
if (c->slept &&
|
||||
c->pDraw &&
|
||||
c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did,
|
||||
RC_DRAWABLE, SecurityWriteAccess))
|
||||
RC_DRAWABLE, DixWriteAccess))
|
||||
{
|
||||
/* Our drawable has disappeared. Treat like client died... ask
|
||||
the FPE code to clean up after client. */
|
||||
|
@ -2016,7 +2016,7 @@ FontPtr
|
|||
find_old_font(XID id)
|
||||
{
|
||||
return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE,
|
||||
SecurityUnknownAccess);
|
||||
DixUnknownAccess);
|
||||
}
|
||||
|
||||
Font
|
||||
|
|
203
dix/dixutils.c
203
dix/dixutils.c
|
@ -194,115 +194,144 @@ CompareISOLatin1Lowered(unsigned char *s1, int s1len,
|
|||
return (int) c1 - (int) c2;
|
||||
}
|
||||
|
||||
#ifdef XACE
|
||||
|
||||
/* SecurityLookupWindow and SecurityLookupDrawable:
|
||||
* Look up the window/drawable taking into account the client doing
|
||||
* the lookup and the type of access desired. Return the window/drawable
|
||||
* if it exists and the client is allowed access, else return NULL.
|
||||
* Most Proc* functions should be calling these instead of
|
||||
* LookupWindow and LookupDrawable, which do no access checks.
|
||||
* XACE note: need to see if client->lastDrawableID can still be used here.
|
||||
/*
|
||||
* dixLookupWindow and dixLookupDrawable:
|
||||
* Look up the window/drawable taking into account the client doing the
|
||||
* lookup, the type of drawable desired, and the type of access desired.
|
||||
* Return Success with *pDraw set if the window/drawable exists and the client
|
||||
* is allowed access, else return an error code with *pDraw set to NULL. The
|
||||
* access mask values are defined in resource.h. The type mask values are
|
||||
* defined in pixmap.h, with zero equivalent to M_DRAWABLE.
|
||||
*/
|
||||
|
||||
_X_EXPORT WindowPtr
|
||||
SecurityLookupWindow(XID rid, ClientPtr client, Mask access_mode)
|
||||
_X_EXPORT int
|
||||
dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client,
|
||||
Mask type, Mask access)
|
||||
{
|
||||
client->errorValue = rid;
|
||||
if(rid == INVALID)
|
||||
return NULL;
|
||||
return (WindowPtr)SecurityLookupIDByType(client, rid, RT_WINDOW, access_mode);
|
||||
}
|
||||
DrawablePtr pTmp;
|
||||
RESTYPE rtype;
|
||||
*pDraw = NULL;
|
||||
client->errorValue = id;
|
||||
|
||||
if (id == INVALID)
|
||||
return BadDrawable;
|
||||
|
||||
_X_EXPORT pointer
|
||||
SecurityLookupDrawable(XID rid, ClientPtr client, Mask access_mode)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
if (id == client->lastDrawableID) {
|
||||
pTmp = client->lastDrawable;
|
||||
|
||||
if(rid == INVALID)
|
||||
return (pointer) NULL;
|
||||
pDraw = (DrawablePtr)SecurityLookupIDByClass(client, rid, RC_DRAWABLE,
|
||||
access_mode);
|
||||
if (pDraw && (pDraw->type != UNDRAWABLE_WINDOW))
|
||||
return (pointer)pDraw;
|
||||
return (pointer)NULL;
|
||||
}
|
||||
/* an access check is required for cached drawables */
|
||||
rtype = (pTmp->type | M_WINDOW) ? RT_WINDOW : RT_PIXMAP;
|
||||
if (!XaceHook(XACE_RESOURCE_ACCESS, client, id, rtype, access, pTmp))
|
||||
return BadDrawable;
|
||||
} else
|
||||
pTmp = (DrawablePtr)SecurityLookupIDByClass(client, id, RC_DRAWABLE,
|
||||
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
|
||||
* macros because of compatibility with loadable servers.
|
||||
*/
|
||||
|
||||
_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;
|
||||
if (pTmp->type | M_DRAWABLE) {
|
||||
client->lastDrawable = pTmp;
|
||||
client->lastDrawableID = id;
|
||||
client->lastGCID = INVALID;
|
||||
client->lastGC = (GCPtr)NULL;
|
||||
}
|
||||
return pWin;
|
||||
*pDraw = pTmp;
|
||||
return Success;
|
||||
}
|
||||
|
||||
|
||||
pointer
|
||||
LookupDrawable(XID rid, ClientPtr client)
|
||||
_X_EXPORT int
|
||||
dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access)
|
||||
{
|
||||
register DrawablePtr pDraw;
|
||||
|
||||
if(rid == INVALID)
|
||||
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;
|
||||
int rc;
|
||||
rc = dixLookupDrawable((DrawablePtr*)pWin, id, client, M_WINDOW, access);
|
||||
return (rc == BadDrawable) ? BadWindow : rc;
|
||||
}
|
||||
|
||||
#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
|
||||
LookupClient(XID rid, ClientPtr client)
|
||||
_X_EXPORT int
|
||||
dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
|
||||
{
|
||||
pointer pRes = (pointer)SecurityLookupIDByClass(client, rid, RC_ANY,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
int clientIndex = CLIENT_ID(rid);
|
||||
client->errorValue = rid;
|
||||
|
||||
if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT))
|
||||
{
|
||||
return clients[clientIndex];
|
||||
if (clientIndex && pRes && clients[clientIndex] && !(rid & SERVER_BIT)) {
|
||||
*pClient = 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
|
||||
AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
|
||||
|
|
125
dix/events.c
125
dix/events.c
|
@ -2228,16 +2228,15 @@ static int
|
|||
XineramaWarpPointer(ClientPtr client)
|
||||
{
|
||||
WindowPtr dest = NULL;
|
||||
int x, y;
|
||||
int x, y, rc;
|
||||
|
||||
REQUEST(xWarpPointerReq);
|
||||
|
||||
|
||||
if (stuff->dstWid != None)
|
||||
{
|
||||
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess);
|
||||
if (!dest)
|
||||
return BadWindow;
|
||||
if (stuff->dstWid != None) {
|
||||
rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
x = sprite.hotPhys.x;
|
||||
y = sprite.hotPhys.y;
|
||||
|
@ -2248,8 +2247,9 @@ XineramaWarpPointer(ClientPtr client)
|
|||
XID winID = stuff->srcWid;
|
||||
WindowPtr source;
|
||||
|
||||
source = SecurityLookupWindow(winID, client, SecurityReadAccess);
|
||||
if (!source) return BadWindow;
|
||||
rc = dixLookupWindow(&source, winID, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
winX = source->drawable.x;
|
||||
winY = source->drawable.y;
|
||||
|
@ -2301,7 +2301,7 @@ int
|
|||
ProcWarpPointer(ClientPtr client)
|
||||
{
|
||||
WindowPtr dest = NULL;
|
||||
int x, y;
|
||||
int x, y, rc;
|
||||
ScreenPtr newScreen;
|
||||
|
||||
REQUEST(xWarpPointerReq);
|
||||
|
@ -2313,11 +2313,10 @@ ProcWarpPointer(ClientPtr client)
|
|||
return XineramaWarpPointer(client);
|
||||
#endif
|
||||
|
||||
if (stuff->dstWid != None)
|
||||
{
|
||||
dest = SecurityLookupWindow(stuff->dstWid, client, SecurityReadAccess);
|
||||
if (!dest)
|
||||
return BadWindow;
|
||||
if (stuff->dstWid != None) {
|
||||
rc = dixLookupWindow(&dest, stuff->dstWid, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
x = sprite.hotPhys.x;
|
||||
y = sprite.hotPhys.y;
|
||||
|
@ -2328,8 +2327,9 @@ ProcWarpPointer(ClientPtr client)
|
|||
XID winID = stuff->srcWid;
|
||||
WindowPtr source;
|
||||
|
||||
source = SecurityLookupWindow(winID, client, SecurityReadAccess);
|
||||
if (!source) return BadWindow;
|
||||
rc = dixLookupWindow(&source, winID, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
winX = source->drawable.x;
|
||||
winY = source->drawable.y;
|
||||
|
@ -3532,8 +3532,8 @@ SetInputFocus(
|
|||
Bool followOK)
|
||||
{
|
||||
register FocusClassPtr focus;
|
||||
register WindowPtr focusWin;
|
||||
int mode;
|
||||
WindowPtr focusWin;
|
||||
int mode, rc;
|
||||
TimeStamp time;
|
||||
|
||||
UpdateCurrentTime();
|
||||
|
@ -3550,14 +3550,12 @@ SetInputFocus(
|
|||
focusWin = (WindowPtr)(long)focusID;
|
||||
else if ((focusID == FollowKeyboard) && followOK)
|
||||
focusWin = inputInfo.keyboard->focus->win;
|
||||
else if (!(focusWin = SecurityLookupWindow(focusID, client,
|
||||
SecurityReadAccess)))
|
||||
return BadWindow;
|
||||
else
|
||||
{
|
||||
else {
|
||||
rc = dixLookupWindow(&focusWin, focusID, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
/* It is a match error to try to set the input focus to an
|
||||
unviewable window. */
|
||||
|
||||
if(!focusWin->realized)
|
||||
return(BadMatch);
|
||||
}
|
||||
|
@ -3646,6 +3644,7 @@ ProcGrabPointer(ClientPtr client)
|
|||
CursorPtr cursor, oldCursor;
|
||||
REQUEST(xGrabPointerReq);
|
||||
TimeStamp time;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xGrabPointerReq);
|
||||
UpdateCurrentTime();
|
||||
|
@ -3671,24 +3670,24 @@ ProcGrabPointer(ClientPtr client)
|
|||
client->errorValue = stuff->eventMask;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->confineTo == None)
|
||||
confineTo = NullWindow;
|
||||
else
|
||||
{
|
||||
confineTo = SecurityLookupWindow(stuff->confineTo, client,
|
||||
SecurityReadAccess);
|
||||
if (!confineTo)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
if (stuff->cursor == None)
|
||||
cursor = NullCursor;
|
||||
else
|
||||
{
|
||||
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||
RT_CURSOR, SecurityReadAccess);
|
||||
RT_CURSOR, DixReadAccess);
|
||||
if (!cursor)
|
||||
{
|
||||
client->errorValue = stuff->cursor;
|
||||
|
@ -3762,7 +3761,7 @@ ProcChangeActivePointerGrab(ClientPtr client)
|
|||
else
|
||||
{
|
||||
newCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||
RT_CURSOR, SecurityReadAccess);
|
||||
RT_CURSOR, DixReadAccess);
|
||||
if (!newCursor)
|
||||
{
|
||||
client->errorValue = stuff->cursor;
|
||||
|
@ -3812,9 +3811,10 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
|
|||
unsigned this_mode, unsigned other_mode, Window grabWindow,
|
||||
unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status)
|
||||
{
|
||||
register WindowPtr pWin;
|
||||
WindowPtr pWin;
|
||||
register GrabPtr grab;
|
||||
TimeStamp time;
|
||||
int rc;
|
||||
|
||||
UpdateCurrentTime();
|
||||
if ((this_mode != GrabModeSync) && (this_mode != GrabModeAsync))
|
||||
|
@ -3832,9 +3832,9 @@ GrabDevice(register ClientPtr client, register DeviceIntPtr dev,
|
|||
client->errorValue = ownerEvents;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = SecurityLookupWindow(grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
time = ClientTimeToServerTime(ctime);
|
||||
grab = dev->grab;
|
||||
if (grab && !SameClient(grab, client))
|
||||
|
@ -3918,11 +3918,12 @@ ProcQueryPointer(ClientPtr client)
|
|||
WindowPtr pWin, t;
|
||||
REQUEST(xResourceReq);
|
||||
DeviceIntPtr mouse = inputInfo.pointer;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = SecurityLookupWindow(stuff->id, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (mouse->valuator->motionHintWindow)
|
||||
MaybeStopHint(mouse, client);
|
||||
rep.type = X_Reply;
|
||||
|
@ -4086,8 +4087,8 @@ ProcSendEvent(ClientPtr client)
|
|||
effectiveFocus = pWin = inputFocus;
|
||||
}
|
||||
else
|
||||
pWin = SecurityLookupWindow(stuff->destination, client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pWin, stuff->destination, client, DixReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
if ((stuff->propagate != xFalse) && (stuff->propagate != xTrue))
|
||||
|
@ -4123,11 +4124,12 @@ ProcUngrabKey(ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
GrabRec tempGrab;
|
||||
DeviceIntPtr keybd = inputInfo.keyboard;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xUngrabKeyReq);
|
||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (((stuff->key > keybd->key->curKeySyms.maxKeyCode) ||
|
||||
(stuff->key < keybd->key->curKeySyms.minKeyCode))
|
||||
|
@ -4164,6 +4166,7 @@ ProcGrabKey(ClientPtr client)
|
|||
REQUEST(xGrabKeyReq);
|
||||
GrabPtr grab;
|
||||
DeviceIntPtr keybd = inputInfo.keyboard;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xGrabKeyReq);
|
||||
if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse))
|
||||
|
@ -4196,9 +4199,9 @@ ProcGrabKey(ClientPtr client)
|
|||
client->errorValue = stuff->modifiers;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
grab = CreateGrab(client->index, keybd, pWin,
|
||||
(Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents,
|
||||
|
@ -4218,6 +4221,7 @@ ProcGrabButton(ClientPtr client)
|
|||
REQUEST(xGrabButtonReq);
|
||||
CursorPtr cursor;
|
||||
GrabPtr grab;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xGrabButtonReq);
|
||||
if ((stuff->pointerMode != GrabModeSync) &&
|
||||
|
@ -4248,23 +4252,23 @@ ProcGrabButton(ClientPtr client)
|
|||
client->errorValue = stuff->eventMask;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->confineTo == None)
|
||||
confineTo = NullWindow;
|
||||
else {
|
||||
confineTo = SecurityLookupWindow(stuff->confineTo, client,
|
||||
SecurityReadAccess);
|
||||
if (!confineTo)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&confineTo, stuff->confineTo, client,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
}
|
||||
if (stuff->cursor == None)
|
||||
cursor = NullCursor;
|
||||
else
|
||||
{
|
||||
cursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||
RT_CURSOR, SecurityReadAccess);
|
||||
RT_CURSOR, DixReadAccess);
|
||||
if (!cursor)
|
||||
{
|
||||
client->errorValue = stuff->cursor;
|
||||
|
@ -4289,6 +4293,7 @@ ProcUngrabButton(ClientPtr client)
|
|||
REQUEST(xUngrabButtonReq);
|
||||
WindowPtr pWin;
|
||||
GrabRec tempGrab;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xUngrabButtonReq);
|
||||
if ((stuff->modifiers != AnyModifier) &&
|
||||
|
@ -4297,9 +4302,9 @@ ProcUngrabButton(ClientPtr client)
|
|||
client->errorValue = stuff->modifiers;
|
||||
return BadValue;
|
||||
}
|
||||
pWin = SecurityLookupWindow(stuff->grabWindow, client, SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
tempGrab.resource = client->clientAsMask;
|
||||
tempGrab.device = inputInfo.pointer;
|
||||
tempGrab.window = pWin;
|
||||
|
@ -4451,7 +4456,7 @@ ProcRecolorCursor(ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRecolorCursorReq);
|
||||
pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor,
|
||||
RT_CURSOR, SecurityWriteAccess);
|
||||
RT_CURSOR, DixWriteAccess);
|
||||
if ( !pCursor)
|
||||
{
|
||||
client->errorValue = stuff->cursor;
|
||||
|
|
8
dix/gc.c
8
dix/gc.c
|
@ -271,7 +271,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
|||
{
|
||||
NEXTVAL(XID, newpix);
|
||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||
newpix, RT_PIXMAP, SecurityReadAccess);
|
||||
newpix, RT_PIXMAP, DixReadAccess);
|
||||
}
|
||||
if (pPixmap)
|
||||
{
|
||||
|
@ -307,7 +307,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
|||
{
|
||||
NEXTVAL(XID, newstipple)
|
||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||
newstipple, RT_PIXMAP, SecurityReadAccess);
|
||||
newstipple, RT_PIXMAP, DixReadAccess);
|
||||
}
|
||||
if (pPixmap)
|
||||
{
|
||||
|
@ -349,7 +349,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
|||
{
|
||||
NEXTVAL(XID, newfont)
|
||||
pFont = (FontPtr)SecurityLookupIDByType(client, newfont,
|
||||
RT_FONT, SecurityReadAccess);
|
||||
RT_FONT, DixReadAccess);
|
||||
}
|
||||
if (pFont)
|
||||
{
|
||||
|
@ -416,7 +416,7 @@ dixChangeGC(ClientPtr client, register GC *pGC, register BITS32 mask, CARD32 *pC
|
|||
}
|
||||
else
|
||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||
pid, RT_PIXMAP, SecurityReadAccess);
|
||||
pid, RT_PIXMAP, DixReadAccess);
|
||||
}
|
||||
|
||||
if (pPixmap)
|
||||
|
|
|
@ -94,7 +94,7 @@ PrintPropertys(WindowPtr pWin)
|
|||
int
|
||||
ProcRotateProperties(ClientPtr client)
|
||||
{
|
||||
int i, j, delta;
|
||||
int i, j, delta, rc;
|
||||
REQUEST(xRotatePropertiesReq);
|
||||
WindowPtr pWin;
|
||||
register Atom * atoms;
|
||||
|
@ -104,10 +104,9 @@ ProcRotateProperties(ClientPtr client)
|
|||
|
||||
REQUEST_FIXED_SIZE(xRotatePropertiesReq, stuff->nAtoms << 2);
|
||||
UpdateCurrentTime();
|
||||
pWin = (WindowPtr) SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (!stuff->nAtoms)
|
||||
return(Success);
|
||||
atoms = (Atom *) & stuff[1];
|
||||
|
@ -117,7 +116,7 @@ ProcRotateProperties(ClientPtr client)
|
|||
for (i = 0; i < stuff->nAtoms; i++)
|
||||
{
|
||||
char action = XaceHook(XACE_PROPERTY_ACCESS, client, pWin, atoms[i],
|
||||
SecurityReadAccess|SecurityWriteAccess);
|
||||
DixReadAccess|DixWriteAccess);
|
||||
|
||||
if (!ValidAtom(atoms[i]) || (XaceErrorOperation == action)) {
|
||||
DEALLOCATE_LOCAL(props);
|
||||
|
@ -181,9 +180,7 @@ ProcChangeProperty(ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
char format, mode;
|
||||
unsigned long len;
|
||||
int sizeInBytes;
|
||||
int totalSize;
|
||||
int err;
|
||||
int sizeInBytes, totalSize, err;
|
||||
REQUEST(xChangePropertyReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xChangePropertyReq);
|
||||
|
@ -208,10 +205,9 @@ ProcChangeProperty(ClientPtr client)
|
|||
totalSize = len * sizeInBytes;
|
||||
REQUEST_FIXED_SIZE(xChangePropertyReq, totalSize);
|
||||
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
err = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (err != Success)
|
||||
return err;
|
||||
if (!ValidAtom(stuff->property))
|
||||
{
|
||||
client->errorValue = stuff->property;
|
||||
|
@ -224,7 +220,7 @@ ProcChangeProperty(ClientPtr client)
|
|||
}
|
||||
|
||||
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||
SecurityWriteAccess))
|
||||
DixWriteAccess))
|
||||
{
|
||||
case XaceErrorOperation:
|
||||
client->errorValue = stuff->property;
|
||||
|
@ -445,19 +441,18 @@ int
|
|||
ProcGetProperty(ClientPtr client)
|
||||
{
|
||||
PropertyPtr pProp, prevProp;
|
||||
unsigned long n, len, ind;
|
||||
unsigned long n, len, ind, rc;
|
||||
WindowPtr pWin;
|
||||
xGetPropertyReply reply;
|
||||
Mask access_mode = SecurityReadAccess;
|
||||
Mask access_mode = DixReadAccess;
|
||||
REQUEST(xGetPropertyReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xGetPropertyReq);
|
||||
if (stuff->delete)
|
||||
UpdateCurrentTime();
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!ValidAtom(stuff->property))
|
||||
{
|
||||
|
@ -491,7 +486,7 @@ ProcGetProperty(ClientPtr client)
|
|||
return NullPropertyReply(client, None, 0, &reply);
|
||||
|
||||
if (stuff->delete)
|
||||
access_mode |= SecurityDestroyAccess;
|
||||
access_mode |= DixDestroyAccess;
|
||||
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||
access_mode))
|
||||
{
|
||||
|
@ -585,16 +580,15 @@ ProcListProperties(ClientPtr client)
|
|||
{
|
||||
Atom *pAtoms = NULL, *temppAtoms;
|
||||
xListPropertiesReply xlpr;
|
||||
int numProps = 0;
|
||||
int rc, numProps = 0;
|
||||
WindowPtr pWin;
|
||||
PropertyPtr pProp;
|
||||
REQUEST(xResourceReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xResourceReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->id, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pProp = wUserProps (pWin);
|
||||
while (pProp)
|
||||
|
@ -636,10 +630,9 @@ ProcDeleteProperty(register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xDeletePropertyReq);
|
||||
UpdateCurrentTime();
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
result = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
if (!ValidAtom(stuff->property))
|
||||
{
|
||||
client->errorValue = stuff->property;
|
||||
|
@ -647,7 +640,7 @@ ProcDeleteProperty(register ClientPtr client)
|
|||
}
|
||||
|
||||
switch (XaceHook(XACE_PROPERTY_ACCESS, client, pWin, stuff->property,
|
||||
SecurityDestroyAccess))
|
||||
DixDestroyAccess))
|
||||
{
|
||||
case XaceErrorOperation:
|
||||
client->errorValue = stuff->property;
|
||||
|
|
|
@ -944,12 +944,12 @@ _X_EXPORT pointer
|
|||
LookupIDByType(XID id, RESTYPE rtype)
|
||||
{
|
||||
return SecurityLookupIDByType(NullClient, id, rtype,
|
||||
SecurityUnknownAccess);
|
||||
DixUnknownAccess);
|
||||
}
|
||||
|
||||
_X_EXPORT pointer
|
||||
LookupIDByClass(XID id, RESTYPE classes)
|
||||
{
|
||||
return SecurityLookupIDByClass(NullClient, id, classes,
|
||||
SecurityUnknownAccess);
|
||||
DixUnknownAccess);
|
||||
}
|
||||
|
|
10
dix/window.c
10
dix/window.c
|
@ -1062,7 +1062,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
|||
else
|
||||
{
|
||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
||||
RT_PIXMAP, SecurityReadAccess);
|
||||
RT_PIXMAP, DixReadAccess);
|
||||
if (pPixmap != (PixmapPtr) NULL)
|
||||
{
|
||||
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
||||
|
@ -1123,7 +1123,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
|||
else
|
||||
{
|
||||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client, pixID,
|
||||
RT_PIXMAP, SecurityReadAccess);
|
||||
RT_PIXMAP, DixReadAccess);
|
||||
if (pPixmap)
|
||||
{
|
||||
if ((pPixmap->drawable.depth != pWin->drawable.depth) ||
|
||||
|
@ -1333,7 +1333,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
|||
goto PatchUp;
|
||||
}
|
||||
pCmap = (ColormapPtr)SecurityLookupIDByType(client, cmap,
|
||||
RT_COLORMAP, SecurityReadAccess);
|
||||
RT_COLORMAP, DixReadAccess);
|
||||
if (!pCmap)
|
||||
{
|
||||
error = BadColor;
|
||||
|
@ -1409,7 +1409,7 @@ ChangeWindowAttributes(register WindowPtr pWin, Mask vmask, XID *vlist, ClientPt
|
|||
else
|
||||
{
|
||||
pCursor = (CursorPtr)SecurityLookupIDByType(client, cursorID,
|
||||
RT_CURSOR, SecurityReadAccess);
|
||||
RT_CURSOR, DixReadAccess);
|
||||
if (!pCursor)
|
||||
{
|
||||
error = BadCursor;
|
||||
|
@ -2299,7 +2299,7 @@ ConfigureWindow(register WindowPtr pWin, register Mask mask, XID *vlist, ClientP
|
|||
sibwid = (Window ) *pVlist;
|
||||
pVlist++;
|
||||
pSib = (WindowPtr )SecurityLookupIDByType(client, sibwid,
|
||||
RT_WINDOW, SecurityReadAccess);
|
||||
RT_WINDOW, DixReadAccess);
|
||||
if (!pSib)
|
||||
{
|
||||
client->errorValue = sibwid;
|
||||
|
|
|
@ -159,6 +159,14 @@ default state is platform and configuration specific.
|
|||
disables DPMS (display power management services). The default state
|
||||
is platform and configuration specific.
|
||||
.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
|
||||
sets feep (bell) volume (allowable range: 0-100).
|
||||
.TP 8
|
||||
|
|
11
exa/exa.c
11
exa/exa.c
|
@ -32,6 +32,10 @@
|
|||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#ifdef MITSHM
|
||||
#include "shmint.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "exa_priv.h"
|
||||
|
@ -610,6 +614,13 @@ exaDriverInit (ScreenPtr pScreen,
|
|||
miDisableCompositeWrapper(pScreen);
|
||||
#endif
|
||||
|
||||
#ifdef MITSHM
|
||||
/* Re-register with the MI funcs, which don't allow shared pixmaps.
|
||||
* Shared pixmaps are almost always a performance loss for us, but this
|
||||
* still allows for SHM PutImage.
|
||||
*/
|
||||
ShmRegisterFuncs(pScreen, NULL);
|
||||
#endif
|
||||
/*
|
||||
* Hookup offscreen pixmaps
|
||||
*/
|
||||
|
|
|
@ -49,12 +49,12 @@ exaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||
|
||||
if (pExaScr->swappedOut ||
|
||||
pGC->fillStyle != FillSolid ||
|
||||
pDrawable->width > pExaScr->info->maxX ||
|
||||
pDrawable->height > pExaScr->info->maxY)
|
||||
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||
{
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
ExaCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
|
||||
|
@ -380,19 +380,19 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDstDrawable);
|
||||
pixmaps[0].pPix = pDstPixmap = exaGetDrawablePixmap (pDstDrawable);
|
||||
pixmaps[1].as_dst = FALSE;
|
||||
pixmaps[1].as_src = TRUE;
|
||||
pixmaps[1].pPix = exaGetDrawablePixmap (pSrcDrawable);
|
||||
pixmaps[1].pPix = pSrcPixmap = exaGetDrawablePixmap (pSrcDrawable);
|
||||
|
||||
/* Respect maxX/maxY in a trivial way: don't set up drawing when we might
|
||||
* violate the limits. The proper solution would be a temporary pixmap
|
||||
* adjusted so that the drawing happened within limits.
|
||||
*/
|
||||
if (pSrcDrawable->width > pExaScr->info->maxX ||
|
||||
pSrcDrawable->height > pExaScr->info->maxY ||
|
||||
pDstDrawable->width > pExaScr->info->maxX ||
|
||||
pDstDrawable->height > pExaScr->info->maxY)
|
||||
if (pSrcPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pSrcPixmap->drawable.height > pExaScr->info->maxY ||
|
||||
pDstPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pDstPixmap->drawable.height > pExaScr->info->maxY)
|
||||
{
|
||||
exaDoMigration (pixmaps, 2, FALSE);
|
||||
goto fallback;
|
||||
|
@ -401,7 +401,8 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
|||
}
|
||||
|
||||
/* Mixed directions must be handled specially if the card is lame */
|
||||
if (pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS && (dx*dy) < 0) {
|
||||
if (pExaScr->info->flags & EXA_TWO_BITBLT_DIRECTIONS &&
|
||||
reverse != upsidedown) {
|
||||
if (!exaCopyNtoNTwoDir(pSrcDrawable, pDstDrawable, pGC, pbox, nbox,
|
||||
dx, dy))
|
||||
goto fallback;
|
||||
|
@ -411,7 +412,7 @@ exaCopyNtoN (DrawablePtr pSrcDrawable,
|
|||
if ((pSrcPixmap = exaGetOffscreenPixmap (pSrcDrawable, &src_off_x, &src_off_y)) &&
|
||||
(pDstPixmap = exaGetOffscreenPixmap (pDstDrawable, &dst_off_x, &dst_off_y)) &&
|
||||
(*pExaScr->info->PrepareCopy) (pSrcPixmap, pDstPixmap,
|
||||
dx, dy,
|
||||
reverse ? -1 : 1, upsidedown ? -1 : 1,
|
||||
pGC ? pGC->alu : GXcopy,
|
||||
pGC ? pGC->planemask : FB_ALLONES))
|
||||
{
|
||||
|
@ -621,12 +622,12 @@ exaPolyFillRect(DrawablePtr pDrawable,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||
|
||||
if (pExaScr->swappedOut ||
|
||||
pGC->fillStyle != FillSolid ||
|
||||
pDrawable->width > pExaScr->info->maxX ||
|
||||
pDrawable->height > pExaScr->info->maxY)
|
||||
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||
{
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
ExaCheckPolyFillRect (pDrawable, pGC, nrect, prect);
|
||||
|
@ -738,11 +739,11 @@ exaSolidBoxClipped (DrawablePtr pDrawable,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||
|
||||
if (pExaScr->swappedOut ||
|
||||
pDrawable->width > pExaScr->info->maxX ||
|
||||
pDrawable->height > pExaScr->info->maxY)
|
||||
pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||
{
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
goto fallback;
|
||||
|
@ -997,10 +998,10 @@ exaFillRegionSolid (DrawablePtr pDrawable,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||
|
||||
if (pDrawable->width > pExaScr->info->maxX ||
|
||||
pDrawable->height > pExaScr->info->maxY)
|
||||
if (pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pPixmap->drawable.height > pExaScr->info->maxY)
|
||||
{
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
goto fallback;
|
||||
|
@ -1064,13 +1065,13 @@ exaFillRegionTiled (DrawablePtr pDrawable,
|
|||
|
||||
pixmaps[0].as_dst = TRUE;
|
||||
pixmaps[0].as_src = FALSE;
|
||||
pixmaps[0].pPix = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable);
|
||||
pixmaps[1].as_dst = FALSE;
|
||||
pixmaps[1].as_src = TRUE;
|
||||
pixmaps[1].pPix = pTile;
|
||||
|
||||
if (pDrawable->width > pExaScr->info->maxX ||
|
||||
pDrawable->height > pExaScr->info->maxY ||
|
||||
if (pPixmap->drawable.width > pExaScr->info->maxX ||
|
||||
pPixmap->drawable.height > pExaScr->info->maxY ||
|
||||
tileWidth > pExaScr->info->maxX ||
|
||||
tileHeight > pExaScr->info->maxY)
|
||||
{
|
||||
|
|
|
@ -336,16 +336,21 @@ exaTryDriverComposite(CARD8 op,
|
|||
struct _Pixmap scratch;
|
||||
ExaMigrationRec pixmaps[3];
|
||||
|
||||
pSrcPix = exaGetDrawablePixmap(pSrc->pDrawable);
|
||||
pDstPix = exaGetDrawablePixmap(pDst->pDrawable);
|
||||
if (pMask)
|
||||
pMaskPix = exaGetDrawablePixmap(pMask->pDrawable);
|
||||
|
||||
/* Bail if we might exceed coord limits by rendering from/to these. We
|
||||
* should really be making some scratch pixmaps with offsets and coords
|
||||
* adjusted to deal with this, but it hasn't been done yet.
|
||||
*/
|
||||
if (pSrc->pDrawable->width > pExaScr->info->maxX ||
|
||||
pSrc->pDrawable->height > pExaScr->info->maxY ||
|
||||
pDst->pDrawable->width > pExaScr->info->maxX ||
|
||||
pDst->pDrawable->height > pExaScr->info->maxY ||
|
||||
(pMask && (pMask->pDrawable->width > pExaScr->info->maxX ||
|
||||
pMask->pDrawable->height > pExaScr->info->maxY)))
|
||||
if (pSrcPix->drawable.width > pExaScr->info->maxX ||
|
||||
pSrcPix->drawable.height > pExaScr->info->maxY ||
|
||||
pDstPix->drawable.width > pExaScr->info->maxX ||
|
||||
pDstPix->drawable.height > pExaScr->info->maxY ||
|
||||
(pMask && (pMaskPix->drawable.width > pExaScr->info->maxX ||
|
||||
pMaskPix->drawable.height > pExaScr->info->maxY)))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -268,7 +268,7 @@ ProcAppleWMSelectInput (client)
|
|||
|
||||
REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
|
||||
pHead = (WMEventPtr *)SecurityLookupIDByType(client,
|
||||
eventResource, EventType, SecurityWriteAccess);
|
||||
eventResource, EventType, DixWriteAccess);
|
||||
if (stuff->mask != 0) {
|
||||
if (pHead) {
|
||||
/* check for existing entry. */
|
||||
|
@ -490,11 +490,9 @@ ProcAppleWMSetWindowLevel(
|
|||
|
||||
REQUEST_SIZE_MATCH(xAppleWMSetWindowLevelReq);
|
||||
|
||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
||||
client, SecurityReadAccess)))
|
||||
{
|
||||
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||
DixReadAccess))
|
||||
return BadValue;
|
||||
}
|
||||
|
||||
if (stuff->level < 0 || stuff->level >= AppleWMNumWindowLevels) {
|
||||
return BadValue;
|
||||
|
@ -602,11 +600,9 @@ ProcAppleWMFrameDraw(
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xAppleWMFrameDrawReq);
|
||||
|
||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
||||
client, SecurityReadAccess)))
|
||||
{
|
||||
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||
DixReadAccess))
|
||||
return BadValue;
|
||||
}
|
||||
|
||||
ir = make_box (stuff->ix, stuff->iy, stuff->iw, stuff->ih);
|
||||
or = make_box (stuff->ox, stuff->oy, stuff->ow, stuff->oh);
|
||||
|
|
|
@ -170,12 +170,13 @@ static int ProcPseudoramiXGetState(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetStateReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetStateReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -196,12 +197,13 @@ static int ProcPseudoramiXGetScreenCount(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetScreenCountReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetScreenCountReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
@ -222,12 +224,13 @@ static int ProcPseudoramiXGetScreenSize(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetScreenSizeReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetScreenSizeReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
|
|
@ -213,6 +213,7 @@ ProcAppleDRICreateSurface(
|
|||
DrawablePtr pDrawable;
|
||||
xp_surface_id sid;
|
||||
unsigned int key[2];
|
||||
int rc;
|
||||
|
||||
REQUEST(xAppleDRICreateSurfaceReq);
|
||||
REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq);
|
||||
|
@ -220,12 +221,10 @@ ProcAppleDRICreateSurface(
|
|||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
||||
(Drawable)stuff->drawable,
|
||||
client,
|
||||
SecurityReadAccess))) {
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.key_0 = rep.key_1 = rep.uid = 0;
|
||||
|
||||
|
@ -252,13 +251,12 @@ ProcAppleDRIDestroySurface(
|
|||
REQUEST(xAppleDRIDestroySurfaceReq);
|
||||
DrawablePtr pDrawable;
|
||||
REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq);
|
||||
int rc;
|
||||
|
||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
||||
(Drawable)stuff->drawable,
|
||||
client,
|
||||
SecurityReadAccess))) {
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!DRIDestroySurface( screenInfo.screens[stuff->screen],
|
||||
(Drawable)stuff->drawable,
|
||||
|
|
18
hw/dmx/dmx.c
18
hw/dmx/dmx.c
|
@ -282,12 +282,12 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
|
|||
int i;
|
||||
|
||||
if (!(win = SecurityLookupIDByType(client, stuff->window, XRT_WINDOW,
|
||||
SecurityReadAccess)))
|
||||
DixReadAccess)))
|
||||
return -1; /* BadWindow */
|
||||
|
||||
FOR_NSCREENS(i) {
|
||||
if (!(pWin = SecurityLookupWindow(win->info[i].id, client,
|
||||
SecurityReadAccess)))
|
||||
if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
|
||||
DixReadAccess))
|
||||
return -1; /* BadWindow */
|
||||
|
||||
dmxForceWindowCreation(pWin);
|
||||
|
@ -296,8 +296,8 @@ static int ProcDMXForceWindowCreation(ClientPtr client)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!(pWin = SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess)))
|
||||
if (Success != dixLookupWindow(&pWin, stuff->window, client,
|
||||
DixReadAccess))
|
||||
return -1; /* BadWindow */
|
||||
|
||||
dmxForceWindowCreation(pWin);
|
||||
|
@ -556,12 +556,12 @@ static int dmxPopulatePanoramiX(ClientPtr client, Window window,
|
|||
DMXWindowAttributesRec attr;
|
||||
|
||||
if (!(win = SecurityLookupIDByType(client, window, XRT_WINDOW,
|
||||
SecurityReadAccess)))
|
||||
DixReadAccess)))
|
||||
return -1; /* BadWindow */
|
||||
|
||||
FOR_NSCREENS(i) {
|
||||
if (!(pWin = SecurityLookupWindow(win->info[i].id, client,
|
||||
SecurityReadAccess)))
|
||||
if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
|
||||
DixReadAccess))
|
||||
return -1; /* BadWindow */
|
||||
if (dmxGetWindowAttributes(pWin, &attr)) {
|
||||
screens[count] = attr.screen;
|
||||
|
@ -587,7 +587,7 @@ static int dmxPopulate(ClientPtr client, Window window, CARD32 *screens,
|
|||
pos, vis);
|
||||
#endif
|
||||
|
||||
if (!(pWin = SecurityLookupWindow(window, client, SecurityReadAccess)))
|
||||
if (Success != dixLookupWindow(&pWin, window, client, DixReadAccess))
|
||||
return -1; /* BadWindow */
|
||||
|
||||
dmxGetWindowAttributes(pWin, &attr);
|
||||
|
|
|
@ -1056,6 +1056,116 @@ static Bool dmxCompareScreens(DMXScreenInfo *new, DMXScreenInfo *old)
|
|||
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. */
|
||||
int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
|
||||
{
|
||||
|
@ -1174,6 +1284,20 @@ int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
|
|||
/* Create window hierarchy (top down) */
|
||||
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 */
|
||||
dmxForceExposures(idx);
|
||||
|
||||
|
@ -1362,8 +1486,15 @@ static void dmxBEDestroyResources(pointer value, XID id, RESTYPE type,
|
|||
#ifdef RENDER
|
||||
} else if ((type & TypeMask) == (PictureType & TypeMask)) {
|
||||
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);
|
||||
}
|
||||
} else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
|
||||
dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
|
||||
#endif
|
||||
|
|
|
@ -624,7 +624,7 @@ void InitOutput(ScreenInfo *pScreenInfo, int argc, char *argv[])
|
|||
}
|
||||
|
||||
/* 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
|
||||
* extensions with dynamic screen addition/removal due to the
|
||||
* state that each extension keeps, which cannot be restored. */
|
||||
|
|
107
hw/dmx/dmxpict.c
107
hw/dmx/dmxpict.c
|
@ -223,6 +223,36 @@ Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet)
|
|||
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
|
||||
* 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
|
||||
|
@ -235,40 +265,32 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
|
|||
ret = dmxSaveRenderVector[stuff->renderReqType](client);
|
||||
|
||||
if (ret == Success) {
|
||||
int (*oldErrorHandler)(Display *, XErrorEvent *);
|
||||
GlyphSetPtr glyphSet;
|
||||
dmxGlyphPrivPtr glyphPriv;
|
||||
int i;
|
||||
PictFormatPtr pFmt;
|
||||
XRenderPictFormat *pFormat;
|
||||
|
||||
/* Look up glyphSet that was just created ???? */
|
||||
/* Store glyphsets from backends in glyphSet->devPrivate ????? */
|
||||
/* Make sure we handle all errors here!! */
|
||||
|
||||
glyphSet = SecurityLookupIDByType(client, stuff->gsid, GlyphSetType,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
glyphPriv = xalloc(sizeof(dmxGlyphPrivRec));
|
||||
if (!glyphPriv) return BadAlloc;
|
||||
glyphPriv->glyphSets = NULL;
|
||||
MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc);
|
||||
DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv);
|
||||
|
||||
pFmt = SecurityLookupIDByType(client, stuff->format, PictFormatType,
|
||||
SecurityReadAccess);
|
||||
|
||||
oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
|
||||
|
||||
for (i = 0; i < dmxNumScreens; i++) {
|
||||
DMXScreenInfo *dmxScreen = &dmxScreens[i];
|
||||
int beret;
|
||||
|
||||
if (!dmxScreen->beDisplay) {
|
||||
glyphPriv->glyphSets[i] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
pFormat = dmxFindFormat(dmxScreen, pFmt);
|
||||
if (!pFormat) {
|
||||
if ((beret = dmxBECreateGlyphSet(i, glyphSet)) != Success) {
|
||||
int j;
|
||||
|
||||
/* Free the glyph sets we've allocated thus far */
|
||||
|
@ -278,30 +300,9 @@ static int dmxProcRenderCreateGlyphSet(ClientPtr client)
|
|||
/* Free the resource created by render */
|
||||
FreeResource(stuff->gsid, RT_NONE);
|
||||
|
||||
ret = BadMatch;
|
||||
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;
|
||||
return beret;
|
||||
}
|
||||
}
|
||||
|
||||
XSetErrorHandler(oldErrorHandler);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -315,7 +316,7 @@ static int dmxProcRenderFreeGlyphSet(ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
|
||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
|
||||
if (glyphSet && glyphSet->refcnt == 1) {
|
||||
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||
|
@ -358,7 +359,7 @@ static int dmxProcRenderAddGlyphs(ClientPtr client)
|
|||
int nbytes;
|
||||
|
||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
||||
GlyphSetType, SecurityReadAccess);
|
||||
GlyphSetType, DixReadAccess);
|
||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||
|
||||
nglyphs = stuff->nglyphs;
|
||||
|
@ -401,7 +402,7 @@ static int dmxProcRenderFreeGlyphs(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
|
||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset, GlyphSetType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
|
||||
if (glyphSet) {
|
||||
dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||
|
@ -473,13 +474,13 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
|||
dmxGlyphPrivPtr glyphPriv;
|
||||
|
||||
pSrc = SecurityLookupIDByType(client, stuff->src, PictureType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
|
||||
if (!pSrcPriv->pict)
|
||||
return ret;
|
||||
|
||||
pDst = SecurityLookupIDByType(client, stuff->dst, PictureType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
pDstPriv = DMX_GET_PICT_PRIV(pDst);
|
||||
if (!pDstPriv->pict)
|
||||
return ret;
|
||||
|
@ -496,7 +497,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
|||
|
||||
if (stuff->maskFormat)
|
||||
pFmt = SecurityLookupIDByType(client, stuff->maskFormat,
|
||||
PictFormatType, SecurityReadAccess);
|
||||
PictFormatType, DixReadAccess);
|
||||
else
|
||||
pFmt = NULL;
|
||||
|
||||
|
@ -547,7 +548,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
|||
curElt = elts;
|
||||
|
||||
glyphSet = SecurityLookupIDByType(client, stuff->glyphset,
|
||||
GlyphSetType, SecurityReadAccess);
|
||||
GlyphSetType, DixReadAccess);
|
||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||
|
||||
while (buffer + sizeof(xGlyphElt) < end) {
|
||||
|
@ -558,7 +559,7 @@ static int dmxProcRenderCompositeGlyphs(ClientPtr client)
|
|||
glyphSet = SecurityLookupIDByType(client,
|
||||
*((CARD32 *)buffer),
|
||||
GlyphSetType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
|
||||
buffer += 4;
|
||||
} else {
|
||||
|
@ -622,7 +623,7 @@ static int dmxProcRenderSetPictureTransform(ClientPtr client)
|
|||
REQUEST(xRenderSetPictureTransformReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
/* For the following to work with PanoramiX, it assumes that Render
|
||||
|
@ -663,7 +664,7 @@ static int dmxProcRenderSetPictureFilter(ClientPtr client)
|
|||
REQUEST(xRenderSetPictureFilterReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
/* 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
|
||||
* unwrapping/wrapping and calls dmxDoCreatePicture to actually create
|
||||
* 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
|
||||
* 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;
|
||||
BoxPtr pBox = REGION_RECTS(pClip);
|
||||
int nBox = REGION_NUM_RECTS(pClip);
|
||||
|
|
|
@ -112,7 +112,9 @@ extern void dmxTriFan(CARD8 op,
|
|||
INT16 xSrc, INT16 ySrc,
|
||||
int npoint, xPointFixed *points);
|
||||
|
||||
extern int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet);
|
||||
extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet);
|
||||
extern int dmxBECreatePicture(PicturePtr pPicture);
|
||||
extern Bool dmxBEFreePicture(PicturePtr pPicture);
|
||||
|
||||
extern int dmxPictPrivateIndex; /**< Index for picture private data */
|
||||
|
|
|
@ -430,9 +430,10 @@ int __glXBindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
|
|||
DrawablePtr pDraw;
|
||||
__GLXpixmap *pGlxPixmap = NULL;
|
||||
__glXWindow *pGlxWindow = NULL;
|
||||
int rc;
|
||||
|
||||
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client);
|
||||
if (!pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
||||
__glXPixmapRes);
|
||||
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
||||
|
@ -459,9 +460,10 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
|
|||
DrawablePtr pDraw, pMember = NULL;
|
||||
__GLXpixmap *pGlxPixmap = NULL;
|
||||
__glXWindow *pGlxWindow = NULL;
|
||||
int rc;
|
||||
|
||||
pDraw = (DrawablePtr) LookupDrawable(req->drawable, client);
|
||||
if (!pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->drawable,
|
||||
__glXPixmapRes);
|
||||
if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
|
||||
|
@ -479,8 +481,9 @@ int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
|
|||
}
|
||||
|
||||
if (req->member != None) {
|
||||
pMember = (DrawablePtr) LookupDrawable(req->member, client);
|
||||
if (!pMember) {
|
||||
rc = dixLookupDrawable(&pMember, req->member, client, 0,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success) {
|
||||
pGlxPixmap = (__GLXpixmap *) LookupIDByType(req->member,
|
||||
__glXPixmapRes);
|
||||
if (pGlxPixmap) pMember = pGlxPixmap->pDraw;
|
||||
|
@ -734,7 +737,7 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
#endif
|
||||
int from_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.
|
||||
|
@ -778,8 +781,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
}
|
||||
|
||||
if (drawId != None) {
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||
/*
|
||||
** Drawable is an X Window.
|
||||
|
@ -885,8 +888,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
}
|
||||
|
||||
if (readId != None && readId != drawId ) {
|
||||
pReadDraw = (DrawablePtr) LookupDrawable(readId, client);
|
||||
if (pReadDraw) {
|
||||
rc = dixLookupDrawable(&pReadDraw, readId, client, 0,DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pReadDraw->type == DRAWABLE_WINDOW) {
|
||||
/*
|
||||
** Drawable is an X Window.
|
||||
|
@ -1105,13 +1108,13 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
|
||||
if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) {
|
||||
pXinDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
}
|
||||
|
||||
if (pReadDraw && pReadDraw != pDraw &&
|
||||
new_reply.readType != GLX_PBUFFER_TYPE) {
|
||||
pXinReadDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pReadDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
}
|
||||
else {
|
||||
pXinReadDraw = pXinDraw;
|
||||
|
@ -1137,9 +1140,7 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
}
|
||||
#ifdef PANORAMIX
|
||||
else if (pXinDraw) {
|
||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id,
|
||||
client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
else if (pGlxWindow) {
|
||||
|
@ -1195,9 +1196,8 @@ static int MakeCurrent(__GLXclientState *cl,
|
|||
}
|
||||
#ifdef PANORAMIX
|
||||
else if (pXinReadDraw) {
|
||||
pReadWin = (WindowPtr)SecurityLookupWindow(pXinReadDraw->info[s].id,
|
||||
client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pReadWin, pXinReadDraw->info[s].id, client,
|
||||
DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
else if (pGlxReadWindow) {
|
||||
|
@ -1639,18 +1639,16 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
|||
__GLXscreenInfo *pGlxScreen;
|
||||
__GLXvisualConfig *pGlxVisual;
|
||||
__GLXFBConfig *pFBConfig;
|
||||
int i;
|
||||
int s;
|
||||
int i, s, rc;
|
||||
int from_screen, to_screen;
|
||||
#ifdef PANORAMIX
|
||||
PanoramiXRes *pXinDraw = NULL;
|
||||
#endif
|
||||
|
||||
pDraw = (DrawablePtr) LookupDrawable(pixmapId, client);
|
||||
if (!pDraw || pDraw->type != DRAWABLE_PIXMAP) {
|
||||
client->errorValue = pixmapId;
|
||||
return BadPixmap;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDraw, pixmapId, client, M_DRAWABLE_PIXMAP,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
** Check if screen of visual matches screen of pixmap.
|
||||
|
@ -1768,7 +1766,7 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
|||
to_screen = screenInfo.numScreens - 1;
|
||||
|
||||
pXinDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1781,7 +1779,8 @@ static int CreateGLXPixmap(__GLXclientState *cl,
|
|||
|
||||
#ifdef PANORAMIX
|
||||
if (pXinDraw) {
|
||||
pRealDraw = (DrawablePtr) LookupDrawable(pXinDraw->info[s].id,client);
|
||||
dixLookupDrawable(&pRealDraw, pXinDraw->info[s].id, client, 0,
|
||||
DixUnknownAccess);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1947,14 +1946,13 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
|||
__glXWindow *pGlxWindow = NULL;
|
||||
int from_screen = 0;
|
||||
int to_screen = 0;
|
||||
int s;
|
||||
int s, rc;
|
||||
|
||||
/*
|
||||
** Check that the GLX drawable is valid.
|
||||
*/
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
from_screen = to_screen = pDraw->pScreen->myNum;
|
||||
|
||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||
|
@ -2014,7 +2012,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
|||
from_screen = 0;
|
||||
to_screen = screenInfo.numScreens - 1;
|
||||
pXinDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2058,9 +2056,7 @@ int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
|
|||
}
|
||||
#ifdef PANORAMIX
|
||||
else if (pXinDraw) {
|
||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[s].id,
|
||||
client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
else if (pGlxWindow) {
|
||||
|
@ -2104,12 +2100,13 @@ int __glXSwapBuffers(__GLXclientState *cl, GLbyte *pc)
|
|||
__GLXpixmap *pGlxPixmap = NULL;
|
||||
__GLXcontext *glxc = NULL;
|
||||
__glXWindow *pGlxWindow = NULL;
|
||||
int rc;
|
||||
|
||||
/*
|
||||
** Check that the GLX drawable is valid.
|
||||
*/
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pDraw->type != DRAWABLE_WINDOW) {
|
||||
/*
|
||||
** Drawable is an X pixmap, which is not allowed.
|
||||
|
@ -2897,16 +2894,15 @@ int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc)
|
|||
__GLXFBConfig *pGlxFBConfig = NULL;
|
||||
VisualPtr pVisual;
|
||||
VisualID visId;
|
||||
int i;
|
||||
int i, rc;
|
||||
|
||||
/*
|
||||
** Check if windowId is valid
|
||||
*/
|
||||
pDraw = (DrawablePtr) LookupDrawable(windowId, client);
|
||||
if (!pDraw || pDraw->type != DRAWABLE_WINDOW) {
|
||||
client->errorValue = windowId;
|
||||
return BadWindow;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDraw, windowId, client, M_DRAWABLE_WINDOW,
|
||||
DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
** Check if screen of window matches screen of fbconfig.
|
||||
|
@ -3069,7 +3065,7 @@ int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
|
|||
int nReplyBytes;
|
||||
|
||||
req = (xGLXQueryContextInfoEXTReq *)pc;
|
||||
ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, SecurityReadAccess);
|
||||
ctx = (__GLXcontext *) SecurityLookupIDByType(client, req->context, __glXContextRes, DixReadAccess);
|
||||
if (!ctx) {
|
||||
client->errorValue = req->context;
|
||||
return __glXBadContext;
|
||||
|
@ -3279,7 +3275,7 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
GLXDrawable be_drawable = 0;
|
||||
DrawablePtr pDraw = NULL;
|
||||
Display *dpy;
|
||||
int screen;
|
||||
int screen, rc;
|
||||
DMXScreenInfo *dmxScreen;
|
||||
CARD32 *attribs = NULL;
|
||||
int attribs_size;
|
||||
|
@ -3288,8 +3284,8 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
#endif
|
||||
|
||||
if (drawId != None) {
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||
WindowPtr pWin = (WindowPtr)pDraw;
|
||||
be_drawable = 0;
|
||||
|
@ -3353,15 +3349,14 @@ int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
#ifdef PANORAMIX
|
||||
if (!noPanoramiXExtension) {
|
||||
pXinDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
if (!pXinDraw) {
|
||||
client->errorValue = drawId;
|
||||
return __glXBadDrawable;
|
||||
}
|
||||
|
||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id,
|
||||
client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
|
||||
DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -3441,7 +3436,7 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
GLXDrawable be_drawable = 0;
|
||||
DrawablePtr pDraw = NULL;
|
||||
Display *dpy;
|
||||
int screen;
|
||||
int screen, rc;
|
||||
DMXScreenInfo *dmxScreen;
|
||||
char *attrbuf;
|
||||
#ifdef PANORAMIX
|
||||
|
@ -3450,8 +3445,8 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
#endif
|
||||
|
||||
if (drawId != None) {
|
||||
pDraw = (DrawablePtr) LookupDrawable(drawId, client);
|
||||
if (pDraw) {
|
||||
rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixUnknownAccess);
|
||||
if (rc == Success) {
|
||||
if (pDraw->type == DRAWABLE_WINDOW) {
|
||||
WindowPtr pWin = (WindowPtr)pDraw;
|
||||
be_drawable = 0;
|
||||
|
@ -3515,15 +3510,14 @@ int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
|
|||
#ifdef PANORAMIX
|
||||
if (!noPanoramiXExtension) {
|
||||
pXinDraw = (PanoramiXRes *)
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, SecurityReadAccess);
|
||||
SecurityLookupIDByClass(client, pDraw->id, XRC_DRAWABLE, DixReadAccess);
|
||||
if (!pXinDraw) {
|
||||
client->errorValue = drawId;
|
||||
return __glXBadDrawable;
|
||||
}
|
||||
|
||||
pWin = (WindowPtr)SecurityLookupWindow(pXinDraw->info[screen].id,
|
||||
client,
|
||||
SecurityReadAccess);
|
||||
dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
|
||||
DixReadAccess);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ Xvfb_LDFLAGS =
|
|||
AM_CFLAGS = -DHAVE_DIX_CONFIG_H \
|
||||
-DNO_HW_ONLY_EXTS \
|
||||
-DNO_MODULE_EXTS \
|
||||
-DXFree86Server \
|
||||
$(XVFBMODULES_CFLAGS) \
|
||||
$(DIX_CFLAGS)
|
||||
|
||||
|
|
|
@ -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 $
|
||||
.TH __xservername__ __appmansuffix__ __vendorversion__
|
||||
.SH NAME
|
||||
__xservername__ - X11R6 X server
|
||||
__xservername__ - X11R7 X server
|
||||
.SH SYNOPSIS
|
||||
.B __xservername__
|
||||
.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
|
||||
on a wider range of hardware and OS platforms.
|
||||
.PP
|
||||
This work was derived from
|
||||
This work was derived by the X.Org Foundation from the XFree86 Project's
|
||||
.I "XFree86\ 4.4rc2"
|
||||
by the X.Org Foundation.
|
||||
The XFree86 4.4rc2 release was originally derived from
|
||||
release.
|
||||
The XFree86 release was originally derived from
|
||||
.I "X386\ 1.2"
|
||||
by Thomas Roell which was contributed to X11R5 by Snitily Graphics
|
||||
Consulting Service. The
|
||||
.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.
|
||||
Consulting Service.
|
||||
.SH PLATFORMS
|
||||
.PP
|
||||
.B __xservername__
|
||||
operates under a wide range of operating systems and hardware platforms.
|
||||
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
|
||||
free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD and
|
||||
OpenBSD. Commercial UNIX operating systems such as Solaris (x86) and
|
||||
free/OpenSource UNIX-like systems such as Linux, FreeBSD, NetBSD,
|
||||
OpenBSD, and Solaris. Commercial UNIX operating systems such as
|
||||
UnixWare are also supported. Other supported operating systems include
|
||||
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
|
||||
.SH "NETWORK CONNECTIONS"
|
||||
.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
|
||||
can be supplied via all methods. The available command line options
|
||||
and environment variables (and some defaults) are described here and in
|
||||
the Xserver(1) manual page. Most configuration file parameters, with
|
||||
their defaults, are described in the __xconfigfile__(__filemansuffix__) manual
|
||||
page. Driver and module specific configuration parameters are described
|
||||
in the relevant driver or module manual page.
|
||||
the Xserver(__appmansuffix__) manual page. Most configuration file
|
||||
parameters, with their defaults, are described in the
|
||||
__xconfigfile__(__filemansuffix__) manual page. Driver and module specific
|
||||
configuration parameters are described in the relevant driver or module
|
||||
manual page.
|
||||
.PP
|
||||
In addition to the normal server options described in the Xserver(1)
|
||||
manual page,
|
||||
In addition to the normal server options described in the
|
||||
Xserver(__appmansuffix__) manual page,
|
||||
.B __xservername__
|
||||
accepts the following command line switches:
|
||||
.TP 8
|
||||
|
@ -385,7 +382,8 @@ options.
|
|||
When this option is specified, the
|
||||
.B __xservername__
|
||||
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
|
||||
.BI \-screen " screen-name"
|
||||
Use the __xconfigfile__(__filemansuffix__) file
|
||||
|
@ -508,13 +506,12 @@ for its initial setup.
|
|||
Refer to the __xconfigfile__(__filemansuffix__) manual page for information
|
||||
about the format of this file.
|
||||
.PP
|
||||
Starting with version 4.4,
|
||||
.B __xservername__
|
||||
has a mechanism for automatically generating a built-in configuration
|
||||
at run-time when no
|
||||
.B __xconfigfile__
|
||||
file is present. The current version of this automatic configuration
|
||||
mechanism works in three ways.
|
||||
mechanism works in two ways.
|
||||
.PP
|
||||
The first is via enhancements that have made many components of the
|
||||
.B __xconfigfile__
|
||||
|
@ -523,14 +520,7 @@ reasonably deduced doesn't need to be specified explicitly, greatly
|
|||
reducing the amount of built-in configuration information that needs to
|
||||
be generated at run-time.
|
||||
.PP
|
||||
The second is to use an external utility called getconfig(1), when
|
||||
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.
|
||||
The second is to have "safe" fallbacks for most configuration information.
|
||||
This maximises the likelihood that the
|
||||
.B __xservername__
|
||||
server will start up in some usable configuration even when information
|
||||
|
@ -644,7 +634,7 @@ __xservername__ was originally based on XFree86 4.4rc2.
|
|||
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.
|
||||
.PP
|
||||
__xservername__ is released by the X.org Foundation.
|
||||
__xservername__ is released by the X.Org Foundation.
|
||||
.PP
|
||||
The project that became XFree86 was originally founded in 1992 by
|
||||
David Dawes, Glenn Lai, Jim Tsillas and David Wexelblat.
|
||||
|
@ -685,9 +675,9 @@ Orest Zborowski \fIorestz@eskimo.com\fP
|
|||
.RE
|
||||
.PP
|
||||
__xservername__ source is available from the FTP server
|
||||
\fI<ftp://ftp.x.org/>\fP, and from the X.org
|
||||
server \fI<http://www.freedesktop.org/cvs/>\fP. Documentation and other
|
||||
information can be found from the X.org web site
|
||||
\fI<ftp://ftp.x.org/>\fP, and from the X.Org
|
||||
server \fI<http://gitweb.freedesktop.org/>\fP. Documentation and other
|
||||
information can be found from the X.Org web site
|
||||
\fI<http://www.x.org/>\fP.
|
||||
|
||||
.SH LEGAL
|
||||
|
|
|
@ -386,6 +386,7 @@ ProcXF86DRICreateDrawable(
|
|||
{
|
||||
xXF86DRICreateDrawableReply rep;
|
||||
DrawablePtr pDrawable;
|
||||
int rc;
|
||||
|
||||
REQUEST(xXF86DRICreateDrawableReq);
|
||||
REQUEST_SIZE_MATCH(xXF86DRICreateDrawableReq);
|
||||
|
@ -398,12 +399,10 @@ ProcXF86DRICreateDrawable(
|
|||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
||||
(Drawable)stuff->drawable,
|
||||
client,
|
||||
SecurityReadAccess))) {
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!DRICreateDrawable( screenInfo.screens[stuff->screen],
|
||||
(Drawable)stuff->drawable,
|
||||
|
@ -424,17 +423,17 @@ ProcXF86DRIDestroyDrawable(
|
|||
REQUEST(xXF86DRIDestroyDrawableReq);
|
||||
DrawablePtr pDrawable;
|
||||
REQUEST_SIZE_MATCH(xXF86DRIDestroyDrawableReq);
|
||||
int rc;
|
||||
|
||||
if (stuff->screen >= screenInfo.numScreens) {
|
||||
client->errorValue = stuff->screen;
|
||||
return BadValue;
|
||||
}
|
||||
|
||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
||||
(Drawable)stuff->drawable,
|
||||
client,
|
||||
SecurityReadAccess))) {
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!DRIDestroyDrawable( screenInfo.screens[stuff->screen],
|
||||
(Drawable)stuff->drawable,
|
||||
|
@ -455,7 +454,7 @@ ProcXF86DRIGetDrawableInfo(
|
|||
int X, Y, W, H;
|
||||
drm_clip_rect_t * pClipRects;
|
||||
drm_clip_rect_t * pBackClipRects;
|
||||
int backX, backY;
|
||||
int backX, backY, rc;
|
||||
|
||||
REQUEST(xXF86DRIGetDrawableInfoReq);
|
||||
REQUEST_SIZE_MATCH(xXF86DRIGetDrawableInfoReq);
|
||||
|
@ -468,12 +467,10 @@ ProcXF86DRIGetDrawableInfo(
|
|||
rep.length = 0;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
|
||||
if (!(pDrawable = (DrawablePtr)SecurityLookupDrawable(
|
||||
(Drawable)stuff->drawable,
|
||||
client,
|
||||
SecurityReadAccess))) {
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
if (!DRIGetDrawableInfo( screenInfo.screens[stuff->screen],
|
||||
pDrawable,
|
||||
|
|
|
@ -98,7 +98,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags)
|
|||
base = INTPriv(pInt)->base = xnfalloc(SYS_BIOS);
|
||||
|
||||
pvp = xf86GetPciInfoForEntity(entityIndex);
|
||||
if (pvp) pInt->Tag = ((pciConfigPtr)(pvp->thisCard))->tag;
|
||||
if (pvp) pInt->Tag = pciTag(pvp->bus, pvp->device, pvp->func);
|
||||
|
||||
/*
|
||||
* we need to map video RAM MMIO as some chipsets map mmio
|
||||
|
|
|
@ -155,17 +155,21 @@ _X_HIDDEN void *dixLookupTab[] = {
|
|||
SYMFUNC(CompareTimeStamps)
|
||||
SYMFUNC(CopyISOLatin1Lowered)
|
||||
SYMFUNC(DeleteCallback)
|
||||
SYMFUNC(dixLookupDrawable)
|
||||
SYMFUNC(dixLookupWindow)
|
||||
SYMFUNC(dixLookupClient)
|
||||
SYMFUNC(dixLookupGC)
|
||||
/* following are deprecated */
|
||||
SYMFUNC(LookupClient)
|
||||
SYMFUNC(LookupDrawable)
|
||||
SYMFUNC(LookupWindow)
|
||||
SYMFUNC(SecurityLookupDrawable)
|
||||
SYMFUNC(SecurityLookupWindow)
|
||||
/* end deprecated */
|
||||
SYMFUNC(NoopDDA)
|
||||
SYMFUNC(QueueWorkProc)
|
||||
SYMFUNC(RegisterBlockAndWakeupHandlers)
|
||||
SYMFUNC(RemoveBlockAndWakeupHandlers)
|
||||
#ifdef XACE
|
||||
SYMFUNC(SecurityLookupDrawable)
|
||||
SYMFUNC(SecurityLookupWindow)
|
||||
#endif
|
||||
/* events.c */
|
||||
SYMFUNC(CheckCursorConfinement)
|
||||
SYMFUNC(DeliverEvents)
|
||||
|
|
|
@ -90,6 +90,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags)
|
|||
legacyVGARec vga;
|
||||
xf86int10BiosLocation bios;
|
||||
Bool videoBiosMapped = FALSE;
|
||||
pciVideoPtr pvp;
|
||||
|
||||
if (int10Generation != serverGeneration) {
|
||||
counter = 0;
|
||||
|
@ -151,6 +152,8 @@ xf86ExtendedInitInt10(int entityIndex, int Flags)
|
|||
pInt = (xf86Int10InfoPtr)xnfcalloc(1, sizeof(xf86Int10InfoRec));
|
||||
pInt->scrnIndex = screen;
|
||||
pInt->entityIndex = entityIndex;
|
||||
pvp = xf86GetPciInfoForEntity(entityIndex);
|
||||
if (pvp) pInt->Tag = pciTag(pvp->bus, pvp->device, pvp->func);
|
||||
if (!xf86Int10ExecSetup(pInt))
|
||||
goto error0;
|
||||
pInt->mem = &linuxMem;
|
||||
|
|
|
@ -51,6 +51,7 @@ Xnest_LDFLAGS =
|
|||
|
||||
AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \
|
||||
-DNO_HW_ONLY_EXTS \
|
||||
-DXFree86Server \
|
||||
$(DIX_CFLAGS) \
|
||||
$(XNESTMODULES_CFLAGS)
|
||||
|
||||
|
|
|
@ -5,7 +5,8 @@ bin_PROGRAMS = Xprt
|
|||
Xprt_CFLAGS = @DIX_CFLAGS@ @XPRINT_CFLAGS@ \
|
||||
-DXPRINT -DPRINT_ONLY_SERVER -D_XP_PRINT_SERVER_ \
|
||||
-DXPRINTDIR=\"$(libdir)/X11/xserver\" \
|
||||
-DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX
|
||||
-DXPRASTERDDX -DXPPCLDDX -DXPMONOPCLDDX -DXPPSDDX \
|
||||
-DXFree86Server
|
||||
|
||||
Xprt_LDFLAGS = -L$(top_srcdir)
|
||||
Xprt_LDADD = @XPRINT_LIBS@ ps/libps.la raster/libraster.la \
|
||||
|
|
|
@ -344,13 +344,11 @@ winProcSetSelectionOwner (ClientPtr client)
|
|||
if (None != stuff->window)
|
||||
{
|
||||
/* Grab the Window from the request */
|
||||
pWindow = (WindowPtr) SecurityLookupWindow (stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWindow)
|
||||
{
|
||||
int rc = dixLookupWindow(&pWindow, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success) {
|
||||
ErrorF ("winProcSetSelectionOwner - Found BadWindow, aborting.\n");
|
||||
goto winProcSetSelectionOwner_Done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now we either have a valid window or None */
|
||||
|
|
|
@ -203,7 +203,7 @@ ProcWindowsWMSelectInput (register ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH (xWindowsWMSelectInputReq);
|
||||
pHead = (WMEventPtr *)SecurityLookupIDByType(client, eventResource,
|
||||
EventType, SecurityWriteAccess);
|
||||
EventType, DixWriteAccess);
|
||||
if (stuff->mask != 0)
|
||||
{
|
||||
if (pHead)
|
||||
|
@ -441,7 +441,7 @@ ProcWindowsWMFrameDraw (register ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
win32RootlessWindowPtr pRLWinPriv;
|
||||
RECT rcNew;
|
||||
int nCmdShow;
|
||||
int nCmdShow, rc;
|
||||
RegionRec newShape;
|
||||
ScreenPtr pScreen;
|
||||
|
||||
|
@ -450,11 +450,9 @@ ProcWindowsWMFrameDraw (register ClientPtr client)
|
|||
#if CYGMULTIWINDOW_DEBUG
|
||||
ErrorF ("ProcWindowsWMFrameDraw\n");
|
||||
#endif
|
||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
||||
client, SecurityReadAccess)))
|
||||
{
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
#if CYGMULTIWINDOW_DEBUG
|
||||
ErrorF ("ProcWindowsWMFrameDraw - Window found\n");
|
||||
#endif
|
||||
|
@ -538,6 +536,7 @@ ProcWindowsWMFrameSetTitle(
|
|||
REQUEST(xWindowsWMFrameSetTitleReq);
|
||||
WindowPtr pWin;
|
||||
win32RootlessWindowPtr pRLWinPriv;
|
||||
int rc;
|
||||
|
||||
#if CYGMULTIWINDOW_DEBUG
|
||||
ErrorF ("ProcWindowsWMFrameSetTitle\n");
|
||||
|
@ -545,11 +544,9 @@ ProcWindowsWMFrameSetTitle(
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xWindowsWMFrameSetTitleReq);
|
||||
|
||||
if (!(pWin = SecurityLookupWindow((Drawable)stuff->window,
|
||||
client, SecurityReadAccess)))
|
||||
{
|
||||
return BadValue;
|
||||
}
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
#if CYGMULTIWINDOW_DEBUG
|
||||
ErrorF ("ProcWindowsWMFrameSetTitle - Window found\n");
|
||||
#endif
|
||||
|
|
182
include/dix.h
182
include/dix.h
|
@ -81,107 +81,6 @@ SOFTWARE.
|
|||
return(BadIDChoice);\
|
||||
}
|
||||
|
||||
/* XXX if you are using this macro, you are probably not generating Match
|
||||
* errors where appropriate */
|
||||
#define LOOKUP_DRAWABLE(did, client)\
|
||||
((client->lastDrawableID == did) ? \
|
||||
client->lastDrawable : (DrawablePtr)LookupDrawable(did, client))
|
||||
|
||||
#ifdef XACE
|
||||
|
||||
#define SECURITY_VERIFY_DRAWABLE(pDraw, did, client, mode)\
|
||||
{\
|
||||
pDraw = (DrawablePtr) SecurityLookupIDByClass(client, did, \
|
||||
RC_DRAWABLE, mode);\
|
||||
if (!pDraw) \
|
||||
{\
|
||||
client->errorValue = did; \
|
||||
return BadDrawable;\
|
||||
}\
|
||||
if (pDraw->type == UNDRAWABLE_WINDOW)\
|
||||
return BadMatch;\
|
||||
}
|
||||
|
||||
#define SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, mode)\
|
||||
{\
|
||||
pDraw = (DrawablePtr) SecurityLookupIDByClass(client, did, \
|
||||
RC_DRAWABLE, mode);\
|
||||
if (!pDraw) \
|
||||
{\
|
||||
client->errorValue = did; \
|
||||
return BadDrawable;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define SECURITY_VERIFY_GC(pGC, rid, client, mode)\
|
||||
pGC = (GC *) SecurityLookupIDByType(client, rid, RT_GC, mode);\
|
||||
if (!pGC)\
|
||||
{\
|
||||
client->errorValue = rid;\
|
||||
return (BadGC);\
|
||||
}
|
||||
|
||||
#define VERIFY_DRAWABLE(pDraw, did, client)\
|
||||
SECURITY_VERIFY_DRAWABLE(pDraw, did, client, SecurityUnknownAccess)
|
||||
|
||||
#define VERIFY_GEOMETRABLE(pDraw, did, client)\
|
||||
SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, SecurityUnknownAccess)
|
||||
|
||||
#define VERIFY_GC(pGC, rid, client)\
|
||||
SECURITY_VERIFY_GC(pGC, rid, client, SecurityUnknownAccess)
|
||||
|
||||
#else /* not XACE */
|
||||
|
||||
#define VERIFY_DRAWABLE(pDraw, did, client)\
|
||||
if (client->lastDrawableID == did)\
|
||||
pDraw = client->lastDrawable;\
|
||||
else \
|
||||
{\
|
||||
pDraw = (DrawablePtr) LookupIDByClass(did, RC_DRAWABLE);\
|
||||
if (!pDraw) \
|
||||
{\
|
||||
client->errorValue = did; \
|
||||
return BadDrawable;\
|
||||
}\
|
||||
if (pDraw->type == UNDRAWABLE_WINDOW)\
|
||||
return BadMatch;\
|
||||
}
|
||||
|
||||
#define VERIFY_GEOMETRABLE(pDraw, did, client)\
|
||||
if (client->lastDrawableID == did)\
|
||||
pDraw = client->lastDrawable;\
|
||||
else \
|
||||
{\
|
||||
pDraw = (DrawablePtr) LookupIDByClass(did, RC_DRAWABLE);\
|
||||
if (!pDraw) \
|
||||
{\
|
||||
client->errorValue = did; \
|
||||
return BadDrawable;\
|
||||
}\
|
||||
}
|
||||
|
||||
#define VERIFY_GC(pGC, rid, client)\
|
||||
if (client->lastGCID == rid)\
|
||||
pGC = client->lastGC;\
|
||||
else\
|
||||
pGC = (GC *)LookupIDByType(rid, RT_GC);\
|
||||
if (!pGC)\
|
||||
{\
|
||||
client->errorValue = rid;\
|
||||
return (BadGC);\
|
||||
}
|
||||
|
||||
#define SECURITY_VERIFY_DRAWABLE(pDraw, did, client, mode)\
|
||||
VERIFY_DRAWABLE(pDraw, did, client)
|
||||
|
||||
#define SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, mode)\
|
||||
VERIFY_GEOMETRABLE(pDraw, did, client)
|
||||
|
||||
#define SECURITY_VERIFY_GC(pGC, rid, client, mode)\
|
||||
VERIFY_GC(pGC, rid, client)
|
||||
|
||||
#endif /* XACE */
|
||||
|
||||
/*
|
||||
* We think that most hardware implementations of DBE will want
|
||||
* LookupID*(dbe_back_buffer_id) to return the window structure that the
|
||||
|
@ -239,10 +138,15 @@ SOFTWARE.
|
|||
if ((stuff->gc == INVALID) || (client->lastGCID != stuff->gc) ||\
|
||||
(client->lastDrawableID != drawID))\
|
||||
{\
|
||||
SECURITY_VERIFY_GEOMETRABLE(pDraw, drawID, client, SecurityWriteAccess);\
|
||||
SECURITY_VERIFY_GC(pGC, stuff->gc, client, SecurityReadAccess);\
|
||||
if ((pGC->depth != pDraw->depth) ||\
|
||||
(pGC->pScreen != pDraw->pScreen))\
|
||||
int rc;\
|
||||
rc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY,\
|
||||
DixWriteAccess);\
|
||||
if (rc != Success)\
|
||||
return rc;\
|
||||
rc = dixLookupGC(&(pGC), stuff->gc, client, DixReadAccess);\
|
||||
if (rc != Success)\
|
||||
return rc;\
|
||||
if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
|
||||
return (BadMatch);\
|
||||
client->lastDrawable = pDraw;\
|
||||
client->lastDrawableID = drawID;\
|
||||
|
@ -375,47 +279,41 @@ extern int CompareISOLatin1Lowered(
|
|||
unsigned char * /*b*/,
|
||||
int blen);
|
||||
|
||||
#ifdef XACE
|
||||
extern int dixLookupWindow(
|
||||
WindowPtr *result,
|
||||
XID id,
|
||||
ClientPtr client,
|
||||
Mask access_mode);
|
||||
|
||||
extern WindowPtr SecurityLookupWindow(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/,
|
||||
Mask /*access_mode*/);
|
||||
extern int dixLookupDrawable(
|
||||
DrawablePtr *result,
|
||||
XID id,
|
||||
ClientPtr client,
|
||||
Mask type_mask,
|
||||
Mask access_mode);
|
||||
|
||||
extern pointer SecurityLookupDrawable(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/,
|
||||
Mask /*access_mode*/);
|
||||
extern int dixLookupGC(
|
||||
GCPtr *result,
|
||||
XID id,
|
||||
ClientPtr client,
|
||||
Mask access_mode);
|
||||
|
||||
extern WindowPtr LookupWindow(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/);
|
||||
extern int dixLookupClient(
|
||||
ClientPtr *result,
|
||||
XID id,
|
||||
ClientPtr client,
|
||||
Mask access_mode);
|
||||
|
||||
extern pointer LookupDrawable(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/);
|
||||
|
||||
#else
|
||||
|
||||
extern WindowPtr LookupWindow(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/);
|
||||
|
||||
extern pointer LookupDrawable(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/);
|
||||
|
||||
#define SecurityLookupWindow(rid, client, access_mode) \
|
||||
LookupWindow(rid, client)
|
||||
|
||||
#define SecurityLookupDrawable(rid, client, access_mode) \
|
||||
LookupDrawable(rid, client)
|
||||
|
||||
#endif /* XACE */
|
||||
|
||||
extern ClientPtr LookupClient(
|
||||
XID /*rid*/,
|
||||
ClientPtr /*client*/);
|
||||
/*
|
||||
* These are deprecated compatibility functions and will be removed soon!
|
||||
* Please use the new dixLookup*() functions above.
|
||||
*/
|
||||
extern WindowPtr SecurityLookupWindow(XID, ClientPtr, Mask);
|
||||
extern WindowPtr LookupWindow(XID, ClientPtr);
|
||||
extern pointer SecurityLookupDrawable(XID, ClientPtr, Mask);
|
||||
extern pointer LookupDrawable(XID, ClientPtr);
|
||||
extern ClientPtr LookupClient(XID, ClientPtr);
|
||||
/* end deprecated functions */
|
||||
|
||||
extern void NoopDDA(void);
|
||||
|
||||
|
|
|
@ -58,6 +58,16 @@ SOFTWARE.
|
|||
#define UNDRAWABLE_WINDOW 2
|
||||
#define DRAWABLE_BUFFER 3
|
||||
|
||||
/* corresponding type masks for dixLookupDrawable() */
|
||||
#define M_DRAWABLE_WINDOW (1<<0)
|
||||
#define M_DRAWABLE_PIXMAP (1<<1)
|
||||
#define M_UNDRAWABLE_WINDOW (1<<2)
|
||||
#define M_DRAWABLE_BUFFER (1<<3)
|
||||
#define M_ANY (-1)
|
||||
#define M_WINDOW (M_DRAWABLE_WINDOW|M_UNDRAWABLE_WINDOW)
|
||||
#define M_DRAWABLE (M_DRAWABLE_WINDOW|M_DRAWABLE_PIXMAP|M_DRAWABLE_BUFFER)
|
||||
#define M_UNDRAWABLE (M_UNDRAWABLE_WINDOW)
|
||||
|
||||
/* flags to PaintWindow() */
|
||||
#define PW_BACKGROUND 0
|
||||
#define PW_BORDER 1
|
||||
|
|
|
@ -220,10 +220,11 @@ extern pointer LookupClientResourceComplex(
|
|||
* simultaneously.
|
||||
*/
|
||||
|
||||
#define SecurityUnknownAccess 0 /* don't know intentions */
|
||||
#define SecurityReadAccess (1<<0) /* inspecting the object */
|
||||
#define SecurityWriteAccess (1<<1) /* changing the object */
|
||||
#define SecurityDestroyAccess (1<<2) /* destroying the object */
|
||||
#define DixUnknownAccess 0 /* don't know intentions */
|
||||
#define DixReadAccess (1<<0) /* inspecting the object */
|
||||
#define DixWriteAccess (1<<1) /* changing the object */
|
||||
#define DixReadWriteAccess (DixReadAccess|DixWriteAccess)
|
||||
#define DixDestroyAccess (1<<2) /* destroying the object */
|
||||
|
||||
extern pointer SecurityLookupIDByType(
|
||||
ClientPtr /*client*/,
|
||||
|
|
|
@ -1528,7 +1528,7 @@ AuthorizedClient(ClientPtr client)
|
|||
return TRUE;
|
||||
|
||||
/* untrusted clients can't change host access */
|
||||
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, SecurityWriteAccess))
|
||||
if (!XaceHook(XACE_HOSTLIST_ACCESS, client, DixWriteAccess))
|
||||
return FALSE;
|
||||
|
||||
return LocalClient(client);
|
||||
|
|
|
@ -53,12 +53,11 @@ OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#include <dix-config.h>
|
||||
#endif
|
||||
|
||||
#ifndef __linux__
|
||||
#include <time.h>
|
||||
#else
|
||||
/* The world's most shocking hack, to ensure we get clock_gettime() and
|
||||
* CLOCK_MONOTONIC. */
|
||||
#ifdef sun /* Needed to tell Solaris headers not to restrict to */
|
||||
#define __EXTENSIONS__ /* only the functions defined in POSIX 199309. */
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_C_SOURCE
|
||||
#define _SAVED_POSIX_C_SOURCE _POSIX_C_SOURCE
|
||||
#undef _POSIX_C_SOURCE
|
||||
|
@ -69,6 +68,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
|
|||
#ifdef _SAVED_POSIX_C_SOURCE
|
||||
#define _POSIX_C_SOURCE _SAVED_POSIX_C_SOURCE
|
||||
#endif
|
||||
#endif /* __linux__ */
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -415,7 +415,11 @@ RRTellChanged (ScreenPtr pScreen)
|
|||
if (pScrPriv->changed)
|
||||
{
|
||||
UpdateCurrentTime ();
|
||||
pScrPriv->lastConfigTime = currentTime;
|
||||
if (pScrPriv->configChanged)
|
||||
{
|
||||
pScrPriv->lastConfigTime = currentTime;
|
||||
pScrPriv->configChanged = FALSE;
|
||||
}
|
||||
pScrPriv->changed = FALSE;
|
||||
WalkTree (pScreen, TellChanged, (pointer) pScreen);
|
||||
for (i = 0; i < pScrPriv->numOutputs; i++)
|
||||
|
|
|
@ -216,11 +216,14 @@ typedef struct _rrScrPriv {
|
|||
TimeStamp lastSetTime; /* last changed by client */
|
||||
TimeStamp lastConfigTime; /* possible configs changed */
|
||||
RRCloseScreenProcPtr CloseScreen;
|
||||
|
||||
Bool changed; /* some config changed */
|
||||
Bool configChanged; /* configuration changed */
|
||||
Bool layoutChanged; /* screen layout changed */
|
||||
|
||||
CARD16 minWidth, minHeight;
|
||||
CARD16 maxWidth, maxHeight;
|
||||
CARD16 width, height; /* last known screen size */
|
||||
Bool layoutChanged; /* screen layout changed */
|
||||
|
||||
int numOutputs;
|
||||
RROutputPtr *outputs;
|
||||
|
@ -619,10 +622,13 @@ ProcRRDeleteOutputMode (ClientPtr client);
|
|||
/* rroutput.c */
|
||||
|
||||
/*
|
||||
* Notify the output of some change
|
||||
* Notify the output of some change. configChanged indicates whether
|
||||
* any external configuration (mode list, clones, connected status)
|
||||
* has changed, or whether the change was strictly internal
|
||||
* (which crtc is in use)
|
||||
*/
|
||||
void
|
||||
RROutputChanged (RROutputPtr output);
|
||||
RROutputChanged (RROutputPtr output, Bool configChanged);
|
||||
|
||||
/*
|
||||
* Create an output
|
||||
|
|
|
@ -136,7 +136,7 @@ RRCrtcNotify (RRCrtcPtr crtc,
|
|||
break;
|
||||
if (j == crtc->numOutputs)
|
||||
{
|
||||
RROutputChanged (outputs[i]);
|
||||
RROutputChanged (outputs[i], FALSE);
|
||||
RRCrtcChanged (crtc, FALSE);
|
||||
}
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ RRCrtcNotify (RRCrtcPtr crtc,
|
|||
break;
|
||||
if (i == numOutputs)
|
||||
{
|
||||
RROutputChanged (crtc->outputs[j]);
|
||||
RROutputChanged (crtc->outputs[j], FALSE);
|
||||
RRCrtcChanged (crtc, FALSE);
|
||||
}
|
||||
}
|
||||
|
@ -457,7 +457,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
|
|||
int i, j, k, n;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
|
||||
crtc = LookupCrtc(client, stuff->crtc, SecurityReadAccess);
|
||||
crtc = LookupCrtc(client, stuff->crtc, DixReadAccess);
|
||||
|
||||
if (!crtc)
|
||||
return RRErrorBase + BadRRCrtc;
|
||||
|
@ -698,7 +698,15 @@ ProcRRSetCrtcConfig (ClientPtr client)
|
|||
*/
|
||||
if (pScrPriv->rrScreenSetSize)
|
||||
{
|
||||
if (stuff->x + mode->mode.width > pScreen->width)
|
||||
int source_width = mode->mode.width;
|
||||
int source_height = mode->mode.height;
|
||||
|
||||
if (rotation == RR_Rotate_90 || rotation == RR_Rotate_270)
|
||||
{
|
||||
source_width = mode->mode.height;
|
||||
source_height = mode->mode.width;
|
||||
}
|
||||
if (stuff->x + source_width > pScreen->width)
|
||||
{
|
||||
client->errorValue = stuff->x;
|
||||
if (outputs)
|
||||
|
@ -706,7 +714,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
|
|||
return BadValue;
|
||||
}
|
||||
|
||||
if (stuff->y + mode->mode.height > pScreen->height)
|
||||
if (stuff->y + source_height > pScreen->height)
|
||||
{
|
||||
client->errorValue = stuff->y;
|
||||
if (outputs)
|
||||
|
@ -766,7 +774,7 @@ ProcRRGetCrtcGammaSize (ClientPtr client)
|
|||
int n;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
|
||||
crtc = LookupCrtc (client, stuff->crtc, SecurityReadAccess);
|
||||
crtc = LookupCrtc (client, stuff->crtc, DixReadAccess);
|
||||
if (!crtc)
|
||||
return RRErrorBase + BadRRCrtc;
|
||||
|
||||
|
@ -793,7 +801,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
|
|||
unsigned long len;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
|
||||
crtc = LookupCrtc (client, stuff->crtc, SecurityReadAccess);
|
||||
crtc = LookupCrtc (client, stuff->crtc, DixReadAccess);
|
||||
if (!crtc)
|
||||
return RRErrorBase + BadRRCrtc;
|
||||
|
||||
|
@ -826,7 +834,7 @@ ProcRRSetCrtcGamma (ClientPtr client)
|
|||
CARD16 *red, *green, *blue;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRSetCrtcGammaReq);
|
||||
crtc = LookupCrtc (client, stuff->crtc, SecurityWriteAccess);
|
||||
crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess);
|
||||
if (!crtc)
|
||||
return RRErrorBase + BadRRCrtc;
|
||||
|
||||
|
|
|
@ -70,14 +70,15 @@ ProcRRSelectInput (ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
RREventPtr pRREvent, *pHead;
|
||||
XID clientResource;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRSelectInputReq);
|
||||
pWin = SecurityLookupWindow (stuff->window, client, SecurityWriteAccess);
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
pHead = (RREventPtr *)SecurityLookupIDByType(client,
|
||||
pWin->drawable.id, RREventType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
|
||||
if (stuff->enable & (RRScreenChangeNotifyMask|
|
||||
RRCrtcChangeNotifyMask|
|
||||
|
|
|
@ -69,6 +69,7 @@ RROldModeAdd (RROutputPtr output, RRScreenSizePtr size, int refresh)
|
|||
output->modes = modes;
|
||||
output->changed = TRUE;
|
||||
pScrPriv->changed = TRUE;
|
||||
pScrPriv->configChanged = TRUE;
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
@ -205,6 +206,7 @@ RRGetInfo (ScreenPtr pScreen)
|
|||
|
||||
rotations = 0;
|
||||
pScrPriv->changed = FALSE;
|
||||
pScrPriv->configChanged = FALSE;
|
||||
|
||||
if (!(*pScrPriv->rrGetInfo) (pScreen, &rotations))
|
||||
return FALSE;
|
||||
|
|
|
@ -108,12 +108,15 @@ RRModePtr *
|
|||
RRModesForScreen (ScreenPtr pScreen, int *num_ret)
|
||||
{
|
||||
rrScrPriv(pScreen);
|
||||
int o;
|
||||
int o, c;
|
||||
RRModePtr *screen_modes;
|
||||
int num_screen_modes = 0;
|
||||
|
||||
screen_modes = xalloc ((num_modes ? num_modes : 1) * sizeof (RRModePtr));
|
||||
|
||||
/*
|
||||
* Add modes from all outputs
|
||||
*/
|
||||
for (o = 0; o < pScrPriv->numOutputs; o++)
|
||||
{
|
||||
RROutputPtr output = pScrPriv->outputs[o];
|
||||
|
@ -129,6 +132,24 @@ RRModesForScreen (ScreenPtr pScreen, int *num_ret)
|
|||
screen_modes[num_screen_modes++] = mode;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Add modes from all crtcs. The goal is to
|
||||
* make sure all available and active modes
|
||||
* are visible to the client
|
||||
*/
|
||||
for (c = 0; c < pScrPriv->numCrtcs; c++)
|
||||
{
|
||||
RRCrtcPtr crtc = pScrPriv->crtcs[c];
|
||||
RRModePtr mode = crtc->mode;
|
||||
int n;
|
||||
|
||||
if (!mode) continue;
|
||||
for (n = 0; n < num_screen_modes; n++)
|
||||
if (screen_modes[n] == mode)
|
||||
break;
|
||||
if (n == num_screen_modes)
|
||||
screen_modes[num_screen_modes++] = mode;
|
||||
}
|
||||
*num_ret = num_screen_modes;
|
||||
return screen_modes;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ RESTYPE RROutputType;
|
|||
* Notify the output of some change
|
||||
*/
|
||||
void
|
||||
RROutputChanged (RROutputPtr output)
|
||||
RROutputChanged (RROutputPtr output, Bool configChanged)
|
||||
{
|
||||
ScreenPtr pScreen = output->pScreen;
|
||||
|
||||
|
@ -37,6 +37,8 @@ RROutputChanged (RROutputPtr output)
|
|||
{
|
||||
rrScrPriv (pScreen);
|
||||
pScrPriv->changed = TRUE;
|
||||
if (configChanged)
|
||||
pScrPriv->configChanged = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,7 +108,7 @@ RROutputAttachScreen (RROutputPtr output, ScreenPtr pScreen)
|
|||
output->pScreen = pScreen;
|
||||
pScrPriv->outputs = outputs;
|
||||
pScrPriv->outputs[pScrPriv->numOutputs++] = output;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -142,7 +144,7 @@ RROutputSetClones (RROutputPtr output,
|
|||
memcpy (newClones, clones, numClones * sizeof (RROutputPtr));
|
||||
output->clones = newClones;
|
||||
output->numClones = numClones;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -186,7 +188,7 @@ RROutputSetModes (RROutputPtr output,
|
|||
output->modes = newModes;
|
||||
output->numModes = numModes;
|
||||
output->numPreferred = numPreferred;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -219,7 +221,7 @@ RROutputSetCrtcs (RROutputPtr output,
|
|||
memcpy (newCrtcs, crtcs, numCrtcs * sizeof (RRCrtcPtr));
|
||||
output->crtcs = newCrtcs;
|
||||
output->numCrtcs = numCrtcs;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -229,7 +231,7 @@ RROutputSetCrtc (RROutputPtr output, RRCrtcPtr crtc)
|
|||
if (output->crtc == crtc)
|
||||
return;
|
||||
output->crtc = crtc;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, FALSE);
|
||||
}
|
||||
|
||||
Bool
|
||||
|
@ -239,7 +241,7 @@ RROutputSetConnection (RROutputPtr output,
|
|||
if (output->connection == connection)
|
||||
return TRUE;
|
||||
output->connection = connection;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, TRUE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -251,7 +253,7 @@ RROutputSetSubpixelOrder (RROutputPtr output,
|
|||
return TRUE;
|
||||
|
||||
output->subpixelOrder = subpixelOrder;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -264,7 +266,7 @@ RROutputSetPhysicalSize (RROutputPtr output,
|
|||
return TRUE;
|
||||
output->mmWidth = mmWidth;
|
||||
output->mmHeight = mmHeight;
|
||||
RROutputChanged (output);
|
||||
RROutputChanged (output, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -378,7 +380,7 @@ ProcRRGetOutputInfo (ClientPtr client)
|
|||
int i, n;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
|
||||
output = LookupOutput(client, stuff->output, SecurityReadAccess);
|
||||
output = LookupOutput(client, stuff->output, DixReadAccess);
|
||||
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
|
|
@ -313,7 +313,7 @@ ProcRRListOutputProperties (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
|
||||
|
||||
output = LookupOutput (client, stuff->output, SecurityReadAccess);
|
||||
output = LookupOutput (client, stuff->output, DixReadAccess);
|
||||
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
@ -358,7 +358,7 @@ ProcRRQueryOutputProperty (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
|
||||
|
||||
output = LookupOutput (client, stuff->output, SecurityReadAccess);
|
||||
output = LookupOutput (client, stuff->output, DixReadAccess);
|
||||
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
@ -398,7 +398,7 @@ ProcRRConfigureOutputProperty (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRRConfigureOutputPropertyReq);
|
||||
|
||||
output = LookupOutput (client, stuff->output, SecurityReadAccess);
|
||||
output = LookupOutput (client, stuff->output, DixReadAccess);
|
||||
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
@ -443,7 +443,7 @@ ProcRRChangeOutputProperty (ClientPtr client)
|
|||
totalSize = len * sizeInBytes;
|
||||
REQUEST_FIXED_SIZE(xRRChangeOutputPropertyReq, totalSize);
|
||||
|
||||
output = LookupOutput (client, stuff->output, SecurityWriteAccess);
|
||||
output = LookupOutput (client, stuff->output, DixWriteAccess);
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
||||
|
@ -475,7 +475,7 @@ ProcRRDeleteOutputProperty (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
|
||||
UpdateCurrentTime();
|
||||
output = LookupOutput (client, stuff->output, SecurityWriteAccess);
|
||||
output = LookupOutput (client, stuff->output, DixWriteAccess);
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
||||
|
@ -504,8 +504,8 @@ ProcRRGetOutputProperty (ClientPtr client)
|
|||
if (stuff->delete)
|
||||
UpdateCurrentTime();
|
||||
output = LookupOutput (client, stuff->output,
|
||||
stuff->delete ? SecurityWriteAccess :
|
||||
SecurityReadAccess);
|
||||
stuff->delete ? DixWriteAccess :
|
||||
DixReadAccess);
|
||||
if (!output)
|
||||
return RRErrorBase + BadRROutput;
|
||||
|
||||
|
|
185
randr/rrscreen.c
185
randr/rrscreen.c
|
@ -217,13 +217,12 @@ ProcRRGetScreenSizeRange (ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
@ -268,15 +267,12 @@ ProcRRSetScreenSize (ClientPtr client)
|
|||
WindowPtr pWin;
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
RRCrtcPtr crtc;
|
||||
int i;
|
||||
int i, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
@ -291,12 +287,26 @@ ProcRRSetScreenSize (ClientPtr client)
|
|||
client->errorValue = stuff->height;
|
||||
return BadValue;
|
||||
}
|
||||
for (i = 0; i < pScrPriv->numCrtcs; i++) {
|
||||
crtc = pScrPriv->crtcs[i];
|
||||
if (crtc->mode &&
|
||||
(crtc->x + crtc->mode->mode.width > stuff->width ||
|
||||
crtc->y + crtc->mode->mode.height > stuff->height))
|
||||
for (i = 0; i < pScrPriv->numCrtcs; i++)
|
||||
{
|
||||
RRCrtcPtr crtc = pScrPriv->crtcs[i];
|
||||
RRModePtr mode = crtc->mode;
|
||||
if (mode)
|
||||
{
|
||||
int source_width = mode->mode.width;
|
||||
int source_height = mode->mode.height;
|
||||
Rotation rotation = crtc->rotation;
|
||||
|
||||
if (rotation == RR_Rotate_90 || rotation == RR_Rotate_270)
|
||||
{
|
||||
source_width = mode->mode.height;
|
||||
source_height = mode->mode.width;
|
||||
}
|
||||
|
||||
if (crtc->x + source_width > stuff->width ||
|
||||
crtc->y + source_height > stuff->height)
|
||||
return BadMatch;
|
||||
}
|
||||
}
|
||||
if (stuff->widthInMillimeters == 0 || stuff->heightInMillimeters == 0)
|
||||
{
|
||||
|
@ -323,19 +333,16 @@ ProcRRGetScreenResources (ClientPtr client)
|
|||
rrScrPrivPtr pScrPriv;
|
||||
CARD8 *extra;
|
||||
unsigned long extraLen;
|
||||
int i;
|
||||
int i, n, rc;
|
||||
RRCrtc *crtcs;
|
||||
RROutput *outputs;
|
||||
xRRModeInfo *modeinfos;
|
||||
CARD8 *names;
|
||||
int n;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
@ -481,62 +488,81 @@ RR10GetData (ScreenPtr pScreen, RROutputPtr output)
|
|||
RR10DataPtr data;
|
||||
RRScreenSizePtr size;
|
||||
int nmode = output->numModes;
|
||||
int i, j, k;
|
||||
int o, os, l, r;
|
||||
RRScreenRatePtr refresh;
|
||||
CARD16 vRefresh;
|
||||
RRModePtr mode;
|
||||
Bool *used;
|
||||
|
||||
/* Make sure there is plenty of space for any combination */
|
||||
data = malloc (sizeof (RR10DataRec) +
|
||||
sizeof (RRScreenSize) * nmode +
|
||||
sizeof (RRScreenRate) * nmode);
|
||||
sizeof (RRScreenRate) * nmode +
|
||||
sizeof (Bool) * nmode);
|
||||
if (!data)
|
||||
return NULL;
|
||||
size = (RRScreenSizePtr) (data + 1);
|
||||
refresh = (RRScreenRatePtr) (size + nmode);
|
||||
used = (Bool *) (refresh + nmode);
|
||||
memset (used, '\0', sizeof (Bool) * nmode);
|
||||
data->sizes = size;
|
||||
data->nsize = 0;
|
||||
data->nrefresh = 0;
|
||||
data->size = 0;
|
||||
data->refresh = 0;
|
||||
for (i = 0; i < output->numModes; i++)
|
||||
|
||||
/*
|
||||
* find modes not yet listed
|
||||
*/
|
||||
for (o = 0; o < output->numModes; o++)
|
||||
{
|
||||
mode = output->modes[i];
|
||||
for (j = 0; j < data->nsize; j++)
|
||||
if (mode->mode.width == size[j].width &&
|
||||
mode->mode.height == size[j].height)
|
||||
break;
|
||||
if (j == data->nsize)
|
||||
if (used[o]) continue;
|
||||
|
||||
mode = output->modes[o];
|
||||
|
||||
l = data->nsize;
|
||||
size[l].id = data->nsize;
|
||||
size[l].width = mode->mode.width;
|
||||
size[l].height = mode->mode.height;
|
||||
if (output->mmWidth && output->mmHeight) {
|
||||
size[l].mmWidth = output->mmWidth;
|
||||
size[l].mmHeight = output->mmHeight;
|
||||
} else {
|
||||
size[l].mmWidth = pScreen->mmWidth;
|
||||
size[l].mmHeight = pScreen->mmHeight;
|
||||
}
|
||||
size[l].nRates = 0;
|
||||
size[l].pRates = &refresh[data->nrefresh];
|
||||
data->nsize++;
|
||||
|
||||
/*
|
||||
* Find all modes with matching size
|
||||
*/
|
||||
for (os = o; os < output->numModes; os++)
|
||||
{
|
||||
size[j].id = j;
|
||||
size[j].width = mode->mode.width;
|
||||
size[j].height = mode->mode.height;
|
||||
if (output->mmWidth && output->mmHeight) {
|
||||
size[j].mmWidth = output->mmWidth;
|
||||
size[j].mmHeight = output->mmHeight;
|
||||
} else {
|
||||
size[j].mmWidth = pScreen->mmWidth;
|
||||
size[j].mmHeight = pScreen->mmHeight;
|
||||
mode = output->modes[os];
|
||||
if (mode->mode.width == size[l].width &&
|
||||
mode->mode.height == size[l].height)
|
||||
{
|
||||
vRefresh = RRVerticalRefresh (&mode->mode);
|
||||
used[os] = TRUE;
|
||||
|
||||
for (r = 0; r < size[l].nRates; r++)
|
||||
if (vRefresh == size[l].pRates[r].rate)
|
||||
break;
|
||||
if (r == size[l].nRates)
|
||||
{
|
||||
size[l].pRates[r].rate = vRefresh;
|
||||
size[l].pRates[r].mode = mode;
|
||||
size[l].nRates++;
|
||||
data->nrefresh++;
|
||||
}
|
||||
if (mode == output->crtc->mode)
|
||||
{
|
||||
data->size = l;
|
||||
data->refresh = vRefresh;
|
||||
}
|
||||
}
|
||||
size[j].nRates = 0;
|
||||
size[j].pRates = &refresh[data->nrefresh];
|
||||
data->nsize++;
|
||||
}
|
||||
vRefresh = RRVerticalRefresh (&mode->mode);
|
||||
for (k = 0; k < size[j].nRates; k++)
|
||||
if (vRefresh == size[j].pRates[k].rate)
|
||||
break;
|
||||
if (k == size[j].nRates)
|
||||
{
|
||||
size[j].pRates[k].rate = vRefresh;
|
||||
size[j].pRates[k].mode = mode;
|
||||
size[j].nRates++;
|
||||
data->nrefresh++;
|
||||
}
|
||||
if (mode == output->crtc->mode)
|
||||
{
|
||||
data->size = j;
|
||||
data->refresh = vRefresh;
|
||||
}
|
||||
}
|
||||
return data;
|
||||
|
@ -548,7 +574,7 @@ ProcRRGetScreenInfo (ClientPtr client)
|
|||
REQUEST(xRRGetScreenInfoReq);
|
||||
xRRGetScreenInfoReply rep;
|
||||
WindowPtr pWin;
|
||||
int n;
|
||||
int n, rc;
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
CARD8 *extra;
|
||||
|
@ -556,11 +582,9 @@ ProcRRGetScreenInfo (ClientPtr client)
|
|||
RROutputPtr output;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
|
||||
if (!pWin)
|
||||
return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
@ -703,7 +727,7 @@ ProcRRSetScreenConfig (ClientPtr client)
|
|||
REQUEST(xRRSetScreenConfigReq);
|
||||
xRRSetScreenConfigReply rep;
|
||||
DrawablePtr pDraw;
|
||||
int n;
|
||||
int n, rc;
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
TimeStamp configTime;
|
||||
|
@ -730,8 +754,9 @@ ProcRRSetScreenConfig (ClientPtr client)
|
|||
has_rate = FALSE;
|
||||
}
|
||||
|
||||
SECURITY_VERIFY_DRAWABLE(pDraw, stuff->drawable, client,
|
||||
SecurityWriteAccess);
|
||||
rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pDraw->pScreen;
|
||||
|
||||
|
@ -864,22 +889,28 @@ ProcRRSetScreenConfig (ClientPtr client)
|
|||
|
||||
for (c = 0; c < pScrPriv->numCrtcs; c++)
|
||||
{
|
||||
rep.status = RRCrtcSet (pScrPriv->crtcs[c], NULL, 0, 0, RR_Rotate_0,
|
||||
0, NULL);
|
||||
if (rep.status != Success)
|
||||
if (!RRCrtcSet (pScrPriv->crtcs[c], NULL, 0, 0, RR_Rotate_0,
|
||||
0, NULL))
|
||||
{
|
||||
rep.status = RRSetConfigFailed;
|
||||
/* XXX recover from failure */
|
||||
goto sendReply;
|
||||
}
|
||||
}
|
||||
if (!RRScreenSizeSet (pScreen, mode->mode.width, mode->mode.height,
|
||||
pScreen->mmWidth, pScreen->mmHeight))
|
||||
{
|
||||
rep.status = RRSetConfigFailed;
|
||||
/* XXX recover from failure */
|
||||
goto sendReply;
|
||||
}
|
||||
}
|
||||
|
||||
rep.status = RRCrtcSet (output->crtc, mode, 0, 0, stuff->rotation,
|
||||
1, &output);
|
||||
|
||||
|
||||
if (!RRCrtcSet (output->crtc, mode, 0, 0, stuff->rotation, 1, &output))
|
||||
rep.status = RRSetConfigFailed;
|
||||
else
|
||||
rep.status = RRSetConfigSuccess;
|
||||
|
||||
/*
|
||||
* XXX Configure other crtcs to mirror as much as possible
|
||||
*/
|
||||
|
|
|
@ -116,14 +116,15 @@ ProcRRXineramaGetState(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetStateReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetStateReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
ScreenPtr pScreen;
|
||||
rrScrPrivPtr pScrPriv;
|
||||
Bool active = FALSE;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetStateReq);
|
||||
pWin = LookupWindow(stuff->window, client);
|
||||
if(!pWin) return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if(rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
@ -180,11 +181,12 @@ ProcRRXineramaGetScreenCount(ClientPtr client)
|
|||
REQUEST(xPanoramiXGetScreenCountReq);
|
||||
WindowPtr pWin;
|
||||
xPanoramiXGetScreenCountReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq);
|
||||
pWin = LookupWindow(stuff->window, client);
|
||||
if(!pWin) return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.length = 0;
|
||||
|
@ -206,11 +208,12 @@ ProcRRXineramaGetScreenSize(ClientPtr client)
|
|||
WindowPtr pWin, pRoot;
|
||||
ScreenPtr pScreen;
|
||||
xPanoramiXGetScreenSizeReply rep;
|
||||
register int n;
|
||||
register int n, rc;
|
||||
|
||||
REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq);
|
||||
pWin = LookupWindow (stuff->window, client);
|
||||
if(!pWin) return BadWindow;
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixUnknownAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
pRoot = WindowTable[pScreen->myNum];
|
||||
|
|
|
@ -1209,7 +1209,7 @@ ChangePicture (PicturePtr pPicture,
|
|||
pAlpha = (PicturePtr) SecurityLookupIDByType(client,
|
||||
pid,
|
||||
PictureType,
|
||||
SecurityWriteAccess|SecurityReadAccess);
|
||||
DixWriteAccess|DixReadAccess);
|
||||
if (!pAlpha)
|
||||
{
|
||||
client->errorValue = pid;
|
||||
|
@ -1271,7 +1271,7 @@ ChangePicture (PicturePtr pPicture,
|
|||
pPixmap = (PixmapPtr)SecurityLookupIDByType(client,
|
||||
pid,
|
||||
RT_PIXMAP,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pPixmap)
|
||||
{
|
||||
client->errorValue = pid;
|
||||
|
|
137
render/render.c
137
render/render.c
|
@ -554,7 +554,7 @@ ProcRenderQueryPictIndexValues (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->format,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
|
||||
if (!pFormat)
|
||||
{
|
||||
|
@ -614,19 +614,21 @@ ProcRenderCreatePicture (ClientPtr client)
|
|||
PicturePtr pPicture;
|
||||
DrawablePtr pDrawable;
|
||||
PictFormatPtr pFormat;
|
||||
int len;
|
||||
int error;
|
||||
int len, error, rc;
|
||||
REQUEST(xRenderCreatePictureReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq);
|
||||
|
||||
LEGAL_NEW_RESOURCE(stuff->pid, client);
|
||||
SECURITY_VERIFY_DRAWABLE(pDrawable, stuff->drawable, client,
|
||||
SecurityWriteAccess);
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->format,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->format;
|
||||
|
@ -660,7 +662,7 @@ ProcRenderChangePicture (ClientPtr client)
|
|||
int len;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderChangePictureReq);
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
len = client->req_len - (sizeof(xRenderChangePictureReq) >> 2);
|
||||
|
@ -680,7 +682,7 @@ ProcRenderSetPictureClipRectangles (ClientPtr client)
|
|||
int result;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureClipRectanglesReq);
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pPicture->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -706,7 +708,7 @@ ProcRenderFreePicture (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRenderFreePictureReq);
|
||||
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityDestroyAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixDestroyAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
FreeResource (stuff->picture, RT_NONE);
|
||||
return(client->noClientException);
|
||||
|
@ -736,13 +738,13 @@ ProcRenderComposite (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_ALPHA (pMask, stuff->mask, client, SecurityReadAccess,
|
||||
VERIFY_ALPHA (pMask, stuff->mask, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if ((pSrc->pDrawable && pSrc->pDrawable->pScreen != pDst->pDrawable->pScreen) ||
|
||||
(pMask && pMask->pDrawable && pDst->pDrawable->pScreen != pMask->pDrawable->pScreen))
|
||||
|
@ -782,9 +784,9 @@ ProcRenderTrapezoids (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -795,7 +797,7 @@ ProcRenderTrapezoids (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->maskFormat,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->maskFormat;
|
||||
|
@ -829,9 +831,9 @@ ProcRenderTriangles (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -842,7 +844,7 @@ ProcRenderTriangles (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->maskFormat,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->maskFormat;
|
||||
|
@ -876,9 +878,9 @@ ProcRenderTriStrip (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -889,7 +891,7 @@ ProcRenderTriStrip (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->maskFormat,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->maskFormat;
|
||||
|
@ -923,9 +925,9 @@ ProcRenderTriFan (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -936,7 +938,7 @@ ProcRenderTriFan (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->maskFormat,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->maskFormat;
|
||||
|
@ -988,7 +990,7 @@ ProcRenderCreateGlyphSet (ClientPtr client)
|
|||
format = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->format,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!format)
|
||||
{
|
||||
client->errorValue = stuff->format;
|
||||
|
@ -1036,7 +1038,7 @@ ProcRenderReferenceGlyphSet (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
stuff->existing,
|
||||
GlyphSetType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = stuff->existing;
|
||||
|
@ -1061,7 +1063,7 @@ ProcRenderFreeGlyphSet (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
stuff->glyphset,
|
||||
GlyphSetType,
|
||||
SecurityDestroyAccess);
|
||||
DixDestroyAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = stuff->glyphset;
|
||||
|
@ -1095,7 +1097,7 @@ ProcRenderAddGlyphs (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
stuff->glyphset,
|
||||
GlyphSetType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = stuff->glyphset;
|
||||
|
@ -1196,7 +1198,7 @@ ProcRenderFreeGlyphs (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
stuff->glyphset,
|
||||
GlyphSetType,
|
||||
SecurityWriteAccess);
|
||||
DixWriteAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = stuff->glyphset;
|
||||
|
@ -1251,9 +1253,9 @@ ProcRenderCompositeGlyphs (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -1264,7 +1266,7 @@ ProcRenderCompositeGlyphs (ClientPtr client)
|
|||
pFormat = (PictFormatPtr) SecurityLookupIDByType (client,
|
||||
stuff->maskFormat,
|
||||
PictFormatType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pFormat)
|
||||
{
|
||||
client->errorValue = stuff->maskFormat;
|
||||
|
@ -1277,7 +1279,7 @@ ProcRenderCompositeGlyphs (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
stuff->glyphset,
|
||||
GlyphSetType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = stuff->glyphset;
|
||||
|
@ -1339,7 +1341,7 @@ ProcRenderCompositeGlyphs (ClientPtr client)
|
|||
glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client,
|
||||
gs,
|
||||
GlyphSetType,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!glyphSet)
|
||||
{
|
||||
client->errorValue = gs;
|
||||
|
@ -1420,7 +1422,7 @@ ProcRenderFillRectangles (ClientPtr client)
|
|||
client->errorValue = stuff->op;
|
||||
return BadValue;
|
||||
}
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pDst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pDst->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -1486,7 +1488,7 @@ ProcRenderCreateCursor (ClientPtr client)
|
|||
REQUEST_SIZE_MATCH (xRenderCreateCursorReq);
|
||||
LEGAL_NEW_RESOURCE(stuff->cid, client);
|
||||
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE (pSrc, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pSrc->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -1668,7 +1670,7 @@ ProcRenderSetPictureTransform (ClientPtr client)
|
|||
int result;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
result = SetPictureTransform (pPicture, (PictTransform *) &stuff->transform);
|
||||
if (client->noClientException != Success)
|
||||
|
@ -1687,14 +1689,15 @@ ProcRenderQueryFilters (ClientPtr client)
|
|||
int nnames;
|
||||
ScreenPtr pScreen;
|
||||
PictureScreenPtr ps;
|
||||
int i, j;
|
||||
int len;
|
||||
int total_bytes;
|
||||
int i, j, len, total_bytes, rc;
|
||||
INT16 *aliases;
|
||||
char *names;
|
||||
|
||||
REQUEST_SIZE_MATCH(xRenderQueryFiltersReq);
|
||||
SECURITY_VERIFY_DRAWABLE(pDrawable, stuff->drawable, client, SecurityReadAccess);
|
||||
rc = dixLookupDrawable(&pDrawable, stuff->drawable, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
pScreen = pDrawable->pScreen;
|
||||
nbytesName = 0;
|
||||
|
@ -1797,7 +1800,7 @@ ProcRenderSetPictureFilter (ClientPtr client)
|
|||
char *name;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderSetPictureFilterReq);
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
name = (char *) (stuff + 1);
|
||||
params = (xFixed *) (name + ((stuff->nbytes + 3) & ~3));
|
||||
|
@ -1831,7 +1834,7 @@ ProcRenderCreateAnimCursor (ClientPtr client)
|
|||
for (i = 0; i < ncursor; i++)
|
||||
{
|
||||
cursors[i] = (CursorPtr)SecurityLookupIDByType(client, elt->cursor,
|
||||
RT_CURSOR, SecurityReadAccess);
|
||||
RT_CURSOR, DixReadAccess);
|
||||
if (!cursors[i])
|
||||
{
|
||||
xfree (cursors);
|
||||
|
@ -1859,7 +1862,7 @@ ProcRenderAddTraps (ClientPtr client)
|
|||
REQUEST(xRenderAddTrapsReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderAddTrapsReq);
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE (pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
if (!pPicture->pDrawable)
|
||||
return BadDrawable;
|
||||
|
@ -2614,7 +2617,7 @@ PanoramiXRenderCreatePicture (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq);
|
||||
if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass(
|
||||
client, stuff->drawable, XRC_DRAWABLE, SecurityWriteAccess)))
|
||||
client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess)))
|
||||
return BadDrawable;
|
||||
if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes))))
|
||||
return BadAlloc;
|
||||
|
@ -2656,7 +2659,7 @@ PanoramiXRenderChangePicture (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2677,7 +2680,7 @@ PanoramiXRenderSetPictureClipRectangles (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureClipRectanglesReq);
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2698,7 +2701,7 @@ PanoramiXRenderSetPictureTransform (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureTransformReq);
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2719,7 +2722,7 @@ PanoramiXRenderSetPictureFilter (ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
FOR_NSCREENS_BACKWARD(j) {
|
||||
|
@ -2742,7 +2745,7 @@ PanoramiXRenderFreePicture (ClientPtr client)
|
|||
|
||||
client->errorValue = stuff->picture;
|
||||
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, SecurityDestroyAccess,
|
||||
VERIFY_XIN_PICTURE(pict, stuff->picture, client, DixDestroyAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
|
||||
|
@ -2768,11 +2771,11 @@ PanoramiXRenderComposite (ClientPtr client)
|
|||
|
||||
REQUEST_SIZE_MATCH(xRenderCompositeReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_ALPHA (msk, stuff->mask, client, SecurityReadAccess,
|
||||
VERIFY_XIN_ALPHA (msk, stuff->mask, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
orig = *stuff;
|
||||
|
@ -2816,9 +2819,9 @@ PanoramiXRenderCompositeGlyphs (ClientPtr client)
|
|||
INT16 xSrc, ySrc;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRenderCompositeGlyphsReq);
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
if (client->req_len << 2 >= (sizeof (xRenderCompositeGlyphsReq) +
|
||||
|
@ -2859,7 +2862,7 @@ PanoramiXRenderFillRectangles (ClientPtr client)
|
|||
int extra_len;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderFillRectanglesReq);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderFillRectanglesReq);
|
||||
if (extra_len &&
|
||||
|
@ -2906,9 +2909,9 @@ PanoramiXRenderTrapezoids(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderTrapezoidsReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderTrapezoidsReq);
|
||||
|
@ -2968,9 +2971,9 @@ PanoramiXRenderTriangles(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderTrianglesReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderTrianglesReq);
|
||||
|
@ -3026,9 +3029,9 @@ PanoramiXRenderTriStrip(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderTriStripReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderTriStripReq);
|
||||
|
@ -3080,9 +3083,9 @@ PanoramiXRenderTriFan(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderTriFanReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, SecurityReadAccess,
|
||||
VERIFY_XIN_PICTURE (src, stuff->src, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderTriFanReq);
|
||||
|
@ -3136,7 +3139,7 @@ PanoramiXRenderColorTrapezoids(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderColorTrapezoidsReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderColorTrapezoidsReq);
|
||||
|
@ -3180,7 +3183,7 @@ PanoramiXRenderColorTriangles(ClientPtr client)
|
|||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderColorTrianglesReq);
|
||||
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (dst, stuff->dst, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderColorTrianglesReq);
|
||||
|
@ -3226,7 +3229,7 @@ PanoramiXRenderAddTraps (ClientPtr client)
|
|||
INT16 x_off, y_off;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE (xRenderAddTrapsReq);
|
||||
VERIFY_XIN_PICTURE (picture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_XIN_PICTURE (picture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
extra_len = (client->req_len << 2) - sizeof (xRenderAddTrapsReq);
|
||||
if (extra_len &&
|
||||
|
|
|
@ -239,12 +239,12 @@ ProcXFixesSelectCursorInput (ClientPtr client)
|
|||
{
|
||||
REQUEST (xXFixesSelectCursorInputReq);
|
||||
WindowPtr pWin;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesSelectCursorInputReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->eventMask & ~CursorAllEvents)
|
||||
{
|
||||
client->errorValue = stuff->eventMask;
|
||||
|
@ -415,7 +415,7 @@ ProcXFixesSetCursorName (ClientPtr client)
|
|||
Atom atom;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xXFixesSetCursorNameReq);
|
||||
VERIFY_CURSOR(pCursor, stuff->cursor, client, SecurityWriteAccess);
|
||||
VERIFY_CURSOR(pCursor, stuff->cursor, client, DixWriteAccess);
|
||||
tchar = (char *) &stuff[1];
|
||||
atom = MakeAtom (tchar, stuff->nbytes, TRUE);
|
||||
if (atom == BAD_RESOURCE)
|
||||
|
@ -448,7 +448,7 @@ ProcXFixesGetCursorName (ClientPtr client)
|
|||
int len;
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesGetCursorNameReq);
|
||||
VERIFY_CURSOR(pCursor, stuff->cursor, client, SecurityReadAccess);
|
||||
VERIFY_CURSOR(pCursor, stuff->cursor, client, DixReadAccess);
|
||||
if (pCursor->name)
|
||||
str = NameForAtom (pCursor->name);
|
||||
else
|
||||
|
@ -679,8 +679,8 @@ ProcXFixesChangeCursor (ClientPtr client)
|
|||
REQUEST(xXFixesChangeCursorReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesChangeCursorReq);
|
||||
VERIFY_CURSOR (pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_CURSOR (pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_CURSOR (pSource, stuff->source, client, DixReadAccess);
|
||||
VERIFY_CURSOR (pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
ReplaceCursor (pSource, TestForCursor, (pointer) pDestination);
|
||||
return (client->noClientException);
|
||||
|
@ -714,7 +714,7 @@ ProcXFixesChangeCursorByName (ClientPtr client)
|
|||
REQUEST(xXFixesChangeCursorByNameReq);
|
||||
|
||||
REQUEST_FIXED_SIZE(xXFixesChangeCursorByNameReq, stuff->nbytes);
|
||||
VERIFY_CURSOR(pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_CURSOR(pSource, stuff->source, client, DixReadAccess);
|
||||
tchar = (char *) &stuff[1];
|
||||
name = MakeAtom (tchar, stuff->nbytes, FALSE);
|
||||
if (name)
|
||||
|
|
|
@ -118,7 +118,7 @@ ProcXFixesCreateRegionFromBitmap (ClientPtr client)
|
|||
|
||||
pPixmap = (PixmapPtr) SecurityLookupIDByType (client, stuff->bitmap,
|
||||
RT_PIXMAP,
|
||||
SecurityReadAccess);
|
||||
DixReadAccess);
|
||||
if (!pPixmap)
|
||||
{
|
||||
client->errorValue = stuff->bitmap;
|
||||
|
@ -220,12 +220,15 @@ ProcXFixesCreateRegionFromGC (ClientPtr client)
|
|||
{
|
||||
RegionPtr pRegion, pClip;
|
||||
GCPtr pGC;
|
||||
int rc;
|
||||
REQUEST (xXFixesCreateRegionFromGCReq);
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesCreateRegionFromGCReq);
|
||||
LEGAL_NEW_RESOURCE (stuff->region, client);
|
||||
|
||||
SECURITY_VERIFY_GC(pGC, stuff->gc, client, SecurityReadAccess);
|
||||
rc = dixLookupGC(&pGC, stuff->gc, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
switch (pGC->clientClipType) {
|
||||
case CT_PIXMAP:
|
||||
|
@ -273,7 +276,7 @@ ProcXFixesCreateRegionFromPicture (ClientPtr client)
|
|||
REQUEST_SIZE_MATCH (xXFixesCreateRegionFromPictureReq);
|
||||
LEGAL_NEW_RESOURCE (stuff->region, client);
|
||||
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityReadAccess,
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, DixReadAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
|
||||
switch (pPicture->clientClipType) {
|
||||
|
@ -321,7 +324,7 @@ ProcXFixesDestroyRegion (ClientPtr client)
|
|||
RegionPtr pRegion;
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesDestroyRegionReq);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
|
||||
FreeResource (stuff->region, RT_NONE);
|
||||
return(client->noClientException);
|
||||
}
|
||||
|
@ -346,7 +349,7 @@ ProcXFixesSetRegion (ClientPtr client)
|
|||
REQUEST (xXFixesSetRegionReq);
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xXFixesSetRegionReq);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
|
||||
|
||||
things = (client->req_len << 2) - sizeof (xXFixesCreateRegionReq);
|
||||
if (things & 4)
|
||||
|
@ -384,8 +387,8 @@ ProcXFixesCopyRegion (ClientPtr client)
|
|||
RegionPtr pSource, pDestination;
|
||||
REQUEST (xXFixesCopyRegionReq);
|
||||
|
||||
VERIFY_REGION(pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
if (!REGION_COPY(pScreen, pDestination, pSource))
|
||||
return BadAlloc;
|
||||
|
@ -414,9 +417,9 @@ ProcXFixesCombineRegion (ClientPtr client)
|
|||
REQUEST (xXFixesCombineRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesCombineRegionReq);
|
||||
VERIFY_REGION(pSource1, stuff->source1, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pSource2, stuff->source2, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pSource1, stuff->source1, client, DixReadAccess);
|
||||
VERIFY_REGION(pSource2, stuff->source2, client, DixReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
switch (stuff->xfixesReqType) {
|
||||
case X_XFixesUnionRegion:
|
||||
|
@ -461,8 +464,8 @@ ProcXFixesInvertRegion (ClientPtr client)
|
|||
REQUEST(xXFixesInvertRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesInvertRegionReq);
|
||||
VERIFY_REGION(pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
/* Compute bounds, limit to 16 bits */
|
||||
bounds.x1 = stuff->x;
|
||||
|
@ -509,7 +512,7 @@ ProcXFixesTranslateRegion (ClientPtr client)
|
|||
REQUEST(xXFixesTranslateRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesTranslateRegionReq);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
|
||||
|
||||
REGION_TRANSLATE(pScreen, pRegion, stuff->dx, stuff->dy);
|
||||
return (client->noClientException);
|
||||
|
@ -536,8 +539,8 @@ ProcXFixesRegionExtents (ClientPtr client)
|
|||
REQUEST(xXFixesRegionExtentsReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesRegionExtentsReq);
|
||||
VERIFY_REGION(pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
REGION_RESET (0, pDestination, REGION_EXTENTS (0, pSource));
|
||||
|
||||
|
@ -569,7 +572,7 @@ ProcXFixesFetchRegion (ClientPtr client)
|
|||
REQUEST(xXFixesFetchRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesFetchRegionReq);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pRegion, stuff->region, client, DixReadAccess);
|
||||
|
||||
pExtent = REGION_EXTENTS (0, pRegion);
|
||||
pBox = REGION_RECTS (pRegion);
|
||||
|
@ -630,11 +633,15 @@ ProcXFixesSetGCClipRegion (ClientPtr client)
|
|||
GCPtr pGC;
|
||||
RegionPtr pRegion;
|
||||
XID vals[2];
|
||||
int rc;
|
||||
REQUEST(xXFixesSetGCClipRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
|
||||
SECURITY_VERIFY_GC(pGC, stuff->gc, client, SecurityWriteAccess);
|
||||
VERIFY_REGION_OR_NONE (pRegion, stuff->region, client, SecurityReadAccess);
|
||||
|
||||
rc = dixLookupGC(&pGC, stuff->gc, client, DixWriteAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
|
||||
VERIFY_REGION_OR_NONE (pRegion, stuff->region, client, DixReadAccess);
|
||||
|
||||
if (pRegion)
|
||||
{
|
||||
|
@ -685,7 +692,7 @@ ProcXFixesSetWindowShapeRegion (ClientPtr client)
|
|||
client->errorValue = stuff->dest;
|
||||
return BadWindow;
|
||||
}
|
||||
VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, SecurityWriteAccess);
|
||||
VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixWriteAccess);
|
||||
pScreen = pWin->drawable.pScreen;
|
||||
switch (stuff->destKind) {
|
||||
case ShapeBounding:
|
||||
|
@ -775,11 +782,11 @@ ProcXFixesSetPictureClipRegion (ClientPtr client)
|
|||
REQUEST(xXFixesSetPictureClipRegionReq);
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, SecurityWriteAccess,
|
||||
VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess,
|
||||
RenderErrBase + BadPicture);
|
||||
pScreen = pPicture->pDrawable->pScreen;
|
||||
ps = GetPictureScreen (pScreen);
|
||||
VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, SecurityReadAccess);
|
||||
VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixReadAccess);
|
||||
|
||||
return SetPictureClipRegion (pPicture, stuff->xOrigin, stuff->yOrigin,
|
||||
pRegion);
|
||||
|
@ -815,8 +822,8 @@ ProcXFixesExpandRegion (ClientPtr client)
|
|||
int i;
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesExpandRegionReq);
|
||||
VERIFY_REGION(pSource, stuff->source, client, SecurityReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, SecurityWriteAccess);
|
||||
VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
|
||||
VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
|
||||
|
||||
nBoxes = REGION_NUM_RECTS(pSource);
|
||||
pSrc = REGION_RECTS(pSource);
|
||||
|
|
|
@ -37,10 +37,9 @@ ProcXFixesChangeSaveSet(ClientPtr client)
|
|||
REQUEST(xXFixesChangeSaveSetReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xXFixesChangeSaveSetReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
result = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (result != Success)
|
||||
return result;
|
||||
if (client->clientAsMask == (CLIENT_BITS(pWin->drawable.id)))
|
||||
return BadMatch;
|
||||
if ((stuff->mode != SetModeInsert) && (stuff->mode != SetModeDelete))
|
||||
|
|
|
@ -193,12 +193,12 @@ ProcXFixesSelectSelectionInput (ClientPtr client)
|
|||
{
|
||||
REQUEST (xXFixesSelectSelectionInputReq);
|
||||
WindowPtr pWin;
|
||||
int rc;
|
||||
|
||||
REQUEST_SIZE_MATCH (xXFixesSelectSelectionInputReq);
|
||||
pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client,
|
||||
SecurityReadAccess);
|
||||
if (!pWin)
|
||||
return(BadWindow);
|
||||
rc = dixLookupWindow(&pWin, stuff->window, client, DixReadAccess);
|
||||
if (rc != Success)
|
||||
return rc;
|
||||
if (stuff->eventMask & ~SelectionAllEvents)
|
||||
{
|
||||
client->errorValue = stuff->eventMask;
|
||||
|
|
Loading…
Reference in New Issue
Block a user