diff --git a/Xext/vidmode.c b/Xext/vidmode.c index 3afa9a376..06ac3c49c 100644 --- a/Xext/vidmode.c +++ b/Xext/vidmode.c @@ -447,6 +447,10 @@ ProcVidModeAddModeLine(ClientPtr client) int dotClock; int ver; + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + DEBUG_P("XF86VidModeAddModeline"); ver = ClientMajorVersion(client); @@ -617,6 +621,10 @@ ProcVidModeDeleteModeLine(ClientPtr client) int len, dotClock; int ver; + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + DEBUG_P("XF86VidModeDeleteModeline"); ver = ClientMajorVersion(client); @@ -741,6 +749,10 @@ ProcVidModeModModeLine(ClientPtr client) int len, dotClock; int ver; + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + DEBUG_P("XF86VidModeModModeline"); ver = ClientMajorVersion(client); @@ -1008,6 +1020,10 @@ ProcVidModeSwitchMode(ClientPtr client) REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq); + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + if (stuff->screen >= screenInfo.numScreens) return BadValue; pScreen = screenInfo.screens[stuff->screen]; @@ -1036,6 +1052,10 @@ ProcVidModeSwitchToMode(ClientPtr client) DEBUG_P("XF86VidModeSwitchToMode"); + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + ver = ClientMajorVersion(client); if (ver < 2) { @@ -1140,6 +1160,10 @@ ProcVidModeLockModeSwitch(ClientPtr client) DEBUG_P("XF86VidModeLockModeSwitch"); + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + if (stuff->screen >= screenInfo.numScreens) return BadValue; pScreen = screenInfo.screens[stuff->screen]; @@ -1303,6 +1327,10 @@ ProcVidModeSetViewPort(ClientPtr client) REQUEST_SIZE_MATCH(xXF86VidModeSetViewPortReq); + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + if (stuff->screen >= screenInfo.numScreens) return BadValue; pScreen = screenInfo.screens[stuff->screen]; @@ -1401,6 +1429,10 @@ ProcVidModeSetGamma(ClientPtr client) REQUEST_SIZE_MATCH(xXF86VidModeSetGammaReq); + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + if (stuff->screen >= screenInfo.numScreens) return BadValue; pScreen = screenInfo.screens[stuff->screen]; @@ -1468,6 +1500,10 @@ ProcVidModeSetGammaRamp(ClientPtr client) ScreenPtr pScreen; VidModePtr pVidMode; + /* limited to local-only connections */ + if (!VidModeAllowNonLocal && !client->local) + return VidModeErrorBase + XF86VidModeClientNotLocal; + REQUEST(xXF86VidModeSetGammaRampReq); REQUEST_AT_LEAST_SIZE(xXF86VidModeSetGammaRampReq); @@ -1675,33 +1711,26 @@ ProcVidModeDispatch(ClientPtr client) return ProcVidModeGetGammaRampSize(client); case X_XF86VidModeGetPermissions: return ProcVidModeGetPermissions(client); + case X_XF86VidModeAddModeLine: + return ProcVidModeAddModeLine(client); + case X_XF86VidModeDeleteModeLine: + return ProcVidModeDeleteModeLine(client); + case X_XF86VidModeModModeLine: + return ProcVidModeModModeLine(client); + case X_XF86VidModeSwitchMode: + return ProcVidModeSwitchMode(client); + case X_XF86VidModeSwitchToMode: + return ProcVidModeSwitchToMode(client); + case X_XF86VidModeLockModeSwitch: + return ProcVidModeLockModeSwitch(client); + case X_XF86VidModeSetViewPort: + return ProcVidModeSetViewPort(client); + case X_XF86VidModeSetGamma: + return ProcVidModeSetGamma(client); + case X_XF86VidModeSetGammaRamp: + return ProcVidModeSetGammaRamp(client); default: - if (VidModeAllowNonLocal || client->local) { - switch (stuff->data) { - case X_XF86VidModeAddModeLine: - return ProcVidModeAddModeLine(client); - case X_XF86VidModeDeleteModeLine: - return ProcVidModeDeleteModeLine(client); - case X_XF86VidModeModModeLine: - return ProcVidModeModModeLine(client); - case X_XF86VidModeSwitchMode: - return ProcVidModeSwitchMode(client); - case X_XF86VidModeSwitchToMode: - return ProcVidModeSwitchToMode(client); - case X_XF86VidModeLockModeSwitch: - return ProcVidModeLockModeSwitch(client); - case X_XF86VidModeSetViewPort: - return ProcVidModeSetViewPort(client); - case X_XF86VidModeSetGamma: - return ProcVidModeSetGamma(client); - case X_XF86VidModeSetGammaRamp: - return ProcVidModeSetGammaRamp(client); - default: - return BadRequest; - } - } - else - return VidModeErrorBase + XF86VidModeClientNotLocal; + return BadRequest; } } @@ -2065,33 +2094,26 @@ SProcVidModeDispatch(ClientPtr client) return SProcVidModeGetGammaRampSize(client); case X_XF86VidModeGetPermissions: return SProcVidModeGetPermissions(client); + case X_XF86VidModeAddModeLine: + return SProcVidModeAddModeLine(client); + case X_XF86VidModeDeleteModeLine: + return SProcVidModeDeleteModeLine(client); + case X_XF86VidModeModModeLine: + return SProcVidModeModModeLine(client); + case X_XF86VidModeSwitchMode: + return SProcVidModeSwitchMode(client); + case X_XF86VidModeSwitchToMode: + return SProcVidModeSwitchToMode(client); + case X_XF86VidModeLockModeSwitch: + return SProcVidModeLockModeSwitch(client); + case X_XF86VidModeSetViewPort: + return SProcVidModeSetViewPort(client); + case X_XF86VidModeSetGamma: + return SProcVidModeSetGamma(client); + case X_XF86VidModeSetGammaRamp: + return SProcVidModeSetGammaRamp(client); default: - if (VidModeAllowNonLocal || client->local) { - switch (stuff->data) { - case X_XF86VidModeAddModeLine: - return SProcVidModeAddModeLine(client); - case X_XF86VidModeDeleteModeLine: - return SProcVidModeDeleteModeLine(client); - case X_XF86VidModeModModeLine: - return SProcVidModeModModeLine(client); - case X_XF86VidModeSwitchMode: - return SProcVidModeSwitchMode(client); - case X_XF86VidModeSwitchToMode: - return SProcVidModeSwitchToMode(client); - case X_XF86VidModeLockModeSwitch: - return SProcVidModeLockModeSwitch(client); - case X_XF86VidModeSetViewPort: - return SProcVidModeSetViewPort(client); - case X_XF86VidModeSetGamma: - return SProcVidModeSetGamma(client); - case X_XF86VidModeSetGammaRamp: - return SProcVidModeSetGammaRamp(client); - default: - return BadRequest; - } - } - else - return VidModeErrorBase + XF86VidModeClientNotLocal; + return BadRequest; } }