xref: /OK3568_Linux_fs/external/xserver/Xext/xace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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