1 /* $Xorg: security.h,v 1.4 2001/02/09 02:03:24 xorgcvs Exp $ */ 2 /* 3 Copyright 1996, 1998 The Open Group 4 5 Permission to use, copy, modify, distribute, and sell this software and its 6 documentation for any purpose is hereby granted without fee, provided that 7 the above copyright notice appear in all copies and that both that 8 copyright notice and this permission notice appear in supporting 9 documentation. 10 11 The above copyright notice and this permission notice shall be included 12 in all copies or substantial portions of the Software. 13 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 OTHER DEALINGS IN THE SOFTWARE. 21 22 Except as contained in this notice, the name of The Open Group shall 23 not be used in advertising or otherwise to promote the sale, use or 24 other dealings in this Software without prior written authorization 25 from The Open Group. 26 */ 27 /* $XFree86: xc/include/extensions/security.h,v 1.3 2001/12/14 19:53:29 dawes Exp $ */ 28 29 #ifndef _SECURITY_H 30 #define _SECURITY_H 31 32 #define _XAUTH_STRUCT_ONLY 33 #include <X11/Xauth.h> 34 35 /* constants that server, library, and application all need */ 36 37 #define XSecurityNumberEvents 1 38 #define XSecurityNumberErrors 2 39 #define XSecurityBadAuthorization 0 40 #define XSecurityBadAuthorizationProtocol 1 41 42 /* trust levels */ 43 #define XSecurityClientTrusted 0 44 #define XSecurityClientUntrusted 1 45 46 /* authorization attribute masks */ 47 #define XSecurityTimeout (1<<0) 48 #define XSecurityTrustLevel (1<<1) 49 #define XSecurityGroup (1<<2) 50 #define XSecurityEventMask (1<<3) 51 #define XSecurityAllAuthorizationAttributes \ 52 (XSecurityTimeout | XSecurityTrustLevel | XSecurityGroup | XSecurityEventMask) 53 54 /* event masks */ 55 #define XSecurityAuthorizationRevokedMask (1<<0) 56 #define XSecurityAllEventMasks XSecurityAuthorizationRevokedMask 57 58 /* event offsets */ 59 #define XSecurityAuthorizationRevoked 0 60 61 #define XSecurityAuthorizationName "XC-QUERY-SECURITY-1" 62 #define XSecurityAuthorizationNameLen 19 63 64 65 #ifndef _SECURITY_SERVER 66 67 _XFUNCPROTOBEGIN 68 69 Status XSecurityQueryExtension ( 70 Display *dpy, 71 int *major_version_return, 72 int *minor_version_return); 73 74 Xauth *XSecurityAllocXauth(void); 75 76 void XSecurityFreeXauth(Xauth *auth); 77 78 /* type for returned auth ids */ 79 typedef unsigned long XSecurityAuthorization; 80 81 typedef struct { 82 unsigned int timeout; 83 unsigned int trust_level; 84 XID group; 85 long event_mask; 86 } XSecurityAuthorizationAttributes; 87 88 Xauth *XSecurityGenerateAuthorization( 89 Display *dpy, 90 Xauth *auth_in, 91 unsigned long valuemask, 92 XSecurityAuthorizationAttributes *attributes, 93 XSecurityAuthorization *auth_id_return); 94 95 Status XSecurityRevokeAuthorization( 96 Display *dpy, 97 XSecurityAuthorization auth_id); 98 99 _XFUNCPROTOEND 100 101 typedef struct { 102 int type; /* event base + XSecurityAuthorizationRevoked */ 103 unsigned long serial; /* # of last request processed by server */ 104 Bool send_event; /* true if this came from a SendEvent request */ 105 Display *display; /* Display the event was read from */ 106 XSecurityAuthorization auth_id; /* revoked authorization id */ 107 } XSecurityAuthorizationRevokedEvent; 108 109 #else /* _SECURITY_SERVER */ 110 111 #include "input.h" /* for DeviceIntPtr */ 112 #include "property.h" /* for PropertyPtr */ 113 #include "pixmap.h" /* for DrawablePtr */ 114 #include "resource.h" /* for RESTYPE */ 115 116 /* resource type to pass in LookupIDByType for authorizations */ 117 extern RESTYPE SecurityAuthorizationResType; 118 119 /* this is what we store for an authorization */ 120 typedef struct { 121 XID id; /* resource ID */ 122 CARD32 timeout; /* how long to live in seconds after refcnt == 0 */ 123 unsigned int trustLevel; /* trusted/untrusted */ 124 XID group; /* see embedding extension */ 125 unsigned int refcnt; /* how many clients connected with this auth */ 126 unsigned int secondsRemaining; /* overflow time amount for >49 days */ 127 OsTimerPtr timer; /* timer for this auth */ 128 struct _OtherClients *eventClients; /* clients wanting events */ 129 } SecurityAuthorizationRec, *SecurityAuthorizationPtr; 130 131 /* The following callback is called when a GenerateAuthorization request 132 * is processed to sanity check the group argument. The call data will 133 * be a pointer to a SecurityValidateGroupInfoRec (below). 134 * Functions registered on this callback are expected to examine the 135 * group and set the valid field to TRUE if they recognize the group as a 136 * legitimate group. If they don't recognize it, they should not change the 137 * valid field. 138 */ 139 extern CallbackListPtr SecurityValidateGroupCallback; 140 typedef struct { 141 XID group; /* the group that was sent in GenerateAuthorization */ 142 Bool valid; /* did anyone recognize it? if so, set to TRUE */ 143 } SecurityValidateGroupInfoRec; 144 145 /* Proc vectors for untrusted clients, swapped and unswapped versions. 146 * These are the same as the normal proc vectors except that extensions 147 * that haven't declared themselves secure will have ProcBadRequest plugged 148 * in for their major opcode dispatcher. This prevents untrusted clients 149 * from guessing extension major opcodes and using the extension even though 150 * the extension can't be listed or queried. 151 */ 152 extern int (*UntrustedProcVector[256])(ClientPtr client); 153 extern int (*SwappedUntrustedProcVector[256])(ClientPtr client); 154 155 extern Bool SecurityCheckDeviceAccess(ClientPtr client, DeviceIntPtr dev, 156 Bool fromRequest); 157 158 extern void SecurityAudit(char *format, ...); 159 160 #ifdef LBX 161 extern Bool SecuritySameLevel(ClientPtr client, XID authId); 162 #endif 163 164 extern int XSecurityOptions(int argc, char **argv, int i); 165 166 /* Give this value or higher to the -audit option to get security messages */ 167 #define SECURITY_AUDIT_LEVEL 4 168 169 extern void SecurityCensorImage( 170 ClientPtr client, 171 RegionPtr pVisibleRegion, 172 long widthBytesLine, 173 DrawablePtr pDraw, 174 int x, int y, int w, int h, 175 unsigned int format, 176 char * pBuf); 177 178 #define SecurityAllowOperation 0 179 #define SecurityIgnoreOperation 1 180 #define SecurityErrorOperation 2 181 182 char 183 SecurityCheckPropertyAccess( 184 ClientPtr client, 185 WindowPtr pWin, 186 ATOM propertyName, 187 Mask access_mode); 188 189 #define SECURITY_POLICY_FILE_VERSION "version-1" 190 191 char **SecurityGetSitePolicyStrings(int *n); 192 193 #endif /* _SECURITY_SERVER */ 194 195 #endif /* _SECURITY_H */ 196