1*4882a593Smuzhiyun /************************************************************ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Author: Eamon Walsh <ewalsh@tycho.nsa.gov> 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun Permission to use, copy, modify, distribute, and sell this software and its 6*4882a593Smuzhiyun documentation for any purpose is hereby granted without fee, provided that 7*4882a593Smuzhiyun this permission notice appear in supporting documentation. This permission 8*4882a593Smuzhiyun notice shall be included in all copies or substantial portions of the 9*4882a593Smuzhiyun Software. 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12*4882a593Smuzhiyun IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13*4882a593Smuzhiyun FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14*4882a593Smuzhiyun AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 15*4882a593Smuzhiyun AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 16*4882a593Smuzhiyun CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun ********************************************************/ 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #ifndef _XACE_H 21*4882a593Smuzhiyun #define _XACE_H 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #ifdef XACE 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define XACE_MAJOR_VERSION 2 26*4882a593Smuzhiyun #define XACE_MINOR_VERSION 0 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun #include "pixmap.h" 29*4882a593Smuzhiyun #include "region.h" 30*4882a593Smuzhiyun #include "window.h" 31*4882a593Smuzhiyun #include "property.h" 32*4882a593Smuzhiyun #include "selection.h" 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* Default window background */ 35*4882a593Smuzhiyun #define XaceBackgroundNoneState(w) ((w)->forcedBG ? BackgroundPixel : None) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* security hooks */ 38*4882a593Smuzhiyun /* Constants used to identify the available security hooks 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun #define XACE_CORE_DISPATCH 0 41*4882a593Smuzhiyun #define XACE_EXT_DISPATCH 1 42*4882a593Smuzhiyun #define XACE_RESOURCE_ACCESS 2 43*4882a593Smuzhiyun #define XACE_DEVICE_ACCESS 3 44*4882a593Smuzhiyun #define XACE_PROPERTY_ACCESS 4 45*4882a593Smuzhiyun #define XACE_SEND_ACCESS 5 46*4882a593Smuzhiyun #define XACE_RECEIVE_ACCESS 6 47*4882a593Smuzhiyun #define XACE_CLIENT_ACCESS 7 48*4882a593Smuzhiyun #define XACE_EXT_ACCESS 8 49*4882a593Smuzhiyun #define XACE_SERVER_ACCESS 9 50*4882a593Smuzhiyun #define XACE_SELECTION_ACCESS 10 51*4882a593Smuzhiyun #define XACE_SCREEN_ACCESS 11 52*4882a593Smuzhiyun #define XACE_SCREENSAVER_ACCESS 12 53*4882a593Smuzhiyun #define XACE_AUTH_AVAIL 13 54*4882a593Smuzhiyun #define XACE_KEY_AVAIL 14 55*4882a593Smuzhiyun #define XACE_NUM_HOOKS 15 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun extern _X_EXPORT CallbackListPtr XaceHooks[XACE_NUM_HOOKS]; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* Entry point for hook functions. Called by Xserver. 60*4882a593Smuzhiyun * Required by libdbe and libextmod 61*4882a593Smuzhiyun */ 62*4882a593Smuzhiyun extern _X_EXPORT int XaceHook(int /*hook */ , 63*4882a593Smuzhiyun ... /*appropriate args for hook */ 64*4882a593Smuzhiyun ); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* determine whether any callbacks are present for the XACE hook */ 67*4882a593Smuzhiyun extern _X_EXPORT int XaceHookIsSet(int hook); 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* Special-cased hook functions 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun extern _X_EXPORT int XaceHookDispatch(ClientPtr ptr, int major); 72*4882a593Smuzhiyun #define XaceHookDispatch(c, m) \ 73*4882a593Smuzhiyun ((XaceHooks[XACE_EXT_DISPATCH] && (m) >= EXTENSION_BASE) ? \ 74*4882a593Smuzhiyun XaceHookDispatch((c), (m)) : \ 75*4882a593Smuzhiyun Success) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun extern _X_EXPORT int XaceHookPropertyAccess(ClientPtr ptr, WindowPtr pWin, 78*4882a593Smuzhiyun PropertyPtr *ppProp, 79*4882a593Smuzhiyun Mask access_mode); 80*4882a593Smuzhiyun extern _X_EXPORT int XaceHookSelectionAccess(ClientPtr ptr, Selection ** ppSel, 81*4882a593Smuzhiyun Mask access_mode); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* Register a callback for a given hook. 84*4882a593Smuzhiyun */ 85*4882a593Smuzhiyun #define XaceRegisterCallback(hook,callback,data) \ 86*4882a593Smuzhiyun AddCallback(XaceHooks+(hook), callback, data) 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* Unregister an existing callback for a given hook. 89*4882a593Smuzhiyun */ 90*4882a593Smuzhiyun #define XaceDeleteCallback(hook,callback,data) \ 91*4882a593Smuzhiyun DeleteCallback(XaceHooks+(hook), callback, data) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* XTrans wrappers for use by security modules 94*4882a593Smuzhiyun */ 95*4882a593Smuzhiyun extern _X_EXPORT int XaceGetConnectionNumber(ClientPtr ptr); 96*4882a593Smuzhiyun extern _X_EXPORT int XaceIsLocal(ClientPtr ptr); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* From the original Security extension... 99*4882a593Smuzhiyun */ 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun extern _X_EXPORT void XaceCensorImage(ClientPtr client, 102*4882a593Smuzhiyun RegionPtr pVisibleRegion, 103*4882a593Smuzhiyun long widthBytesLine, 104*4882a593Smuzhiyun DrawablePtr pDraw, 105*4882a593Smuzhiyun int x, int y, int w, int h, 106*4882a593Smuzhiyun unsigned int format, char *pBuf); 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #else /* XACE */ 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* Default window background */ 111*4882a593Smuzhiyun #define XaceBackgroundNoneState(w) None 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* Define calls away when XACE is not being built. */ 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun #ifdef __GNUC__ 116*4882a593Smuzhiyun #define XaceHook(args...) Success 117*4882a593Smuzhiyun #define XaceHookIsSet(args...) 0 118*4882a593Smuzhiyun #define XaceHookDispatch(args...) Success 119*4882a593Smuzhiyun #define XaceHookPropertyAccess(args...) Success 120*4882a593Smuzhiyun #define XaceHookSelectionAccess(args...) Success 121*4882a593Smuzhiyun #define XaceCensorImage(args...) { ; } 122*4882a593Smuzhiyun #else 123*4882a593Smuzhiyun #define XaceHook(...) Success 124*4882a593Smuzhiyun #define XaceHookIsSet(...) 0 125*4882a593Smuzhiyun #define XaceHookDispatch(...) Success 126*4882a593Smuzhiyun #define XaceHookPropertyAccess(...) Success 127*4882a593Smuzhiyun #define XaceHookSelectionAccess(...) Success 128*4882a593Smuzhiyun #define XaceCensorImage(...) { ; } 129*4882a593Smuzhiyun #endif 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #endif /* XACE */ 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun #endif /* _XACE_H */ 134