]> git.sesse.net Git - rdpsrv/blobdiff - Xserver/include/extensions/security.h
Import X server from vnc-3.3.7.
[rdpsrv] / Xserver / include / extensions / security.h
diff --git a/Xserver/include/extensions/security.h b/Xserver/include/extensions/security.h
new file mode 100644 (file)
index 0000000..92af519
--- /dev/null
@@ -0,0 +1,188 @@
+/* $XConsortium: security.h /main/6 1996/11/12 12:17:11 swick $ */
+/*
+Copyright (c) 1996  X Consortium
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the X Consortium shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from the X Consortium.
+*/
+
+#ifndef _SECURITY_H
+#define _SECURITY_H
+
+#define _XAUTH_STRUCT_ONLY
+#include <X11/Xauth.h>
+
+/* constants that server, library, and application all need */
+
+#define XSecurityNumberEvents          1
+#define XSecurityNumberErrors          2
+#define XSecurityBadAuthorization      0
+#define XSecurityBadAuthorizationProtocol 1
+
+/* trust levels */
+#define XSecurityClientTrusted         0
+#define XSecurityClientUntrusted       1
+
+/* authorization attribute masks */
+#define XSecurityTimeout               (1<<0)
+#define XSecurityTrustLevel            (1<<1)
+#define XSecurityGroup                 (1<<2)
+#define XSecurityEventMask             (1<<3)
+#define XSecurityAllAuthorizationAttributes \
+ (XSecurityTimeout | XSecurityTrustLevel | XSecurityGroup | XSecurityEventMask)
+
+/* event masks */
+#define XSecurityAuthorizationRevokedMask (1<<0)
+#define XSecurityAllEventMasks XSecurityAuthorizationRevokedMask
+
+/* event offsets */
+#define XSecurityAuthorizationRevoked 0
+    
+#define XSecurityAuthorizationName     "XC-QUERY-SECURITY-1"
+#define XSecurityAuthorizationNameLen  19
+
+
+#ifndef _SECURITY_SERVER
+
+_XFUNCPROTOBEGIN
+
+Status XSecurityQueryExtension (
+    Display *dpy,
+    int *major_version_return,
+    int *minor_version_return);
+
+Xauth *XSecurityAllocXauth(void);
+
+void XSecurityFreeXauth(Xauth *auth);
+
+/* type for returned auth ids */
+typedef unsigned long XSecurityAuthorization;
+
+typedef struct {
+    unsigned int timeout;
+    unsigned int trust_level;
+    XID          group;
+    long        event_mask;
+} XSecurityAuthorizationAttributes;
+
+Xauth *XSecurityGenerateAuthorization(
+    Display *dpy,
+    Xauth *auth_in,
+    unsigned long valuemask,
+    XSecurityAuthorizationAttributes *attributes,
+    XSecurityAuthorization *auth_id_return);
+
+Status XSecurityRevokeAuthorization(
+    Display *dpy,
+    XSecurityAuthorization auth_id);
+
+_XFUNCPROTOEND
+
+typedef struct {
+    int type;                /* event base + XSecurityAuthorizationRevoked */
+    unsigned long serial;     /* # of last request processed by server */
+    Bool send_event;         /* true if this came from a SendEvent request */
+    Display *display;        /* Display the event was read from */
+    XSecurityAuthorization auth_id; /* revoked authorization id */
+} XSecurityAuthorizationRevokedEvent;
+
+#else /* _SECURITY_SERVER */
+
+#include "input.h"    /* for DeviceIntPtr */
+#include "property.h" /* for PropertyPtr */
+
+/* resource type to pass in LookupIDByType for authorizations */
+extern RESTYPE SecurityAuthorizationResType;
+
+/* this is what we store for an authorization */
+typedef struct {
+    XID id;                    /* resource ID */
+    CARD32 timeout;    /* how long to live in seconds after refcnt == 0 */
+    unsigned int trustLevel;   /* trusted/untrusted */
+    XID group;                 /* see embedding extension */
+    unsigned int refcnt;       /* how many clients connected with this auth */
+    unsigned int secondsRemaining; /* overflow time amount for >49 days */
+    OsTimerPtr timer;          /* timer for this auth */
+    struct _OtherClients *eventClients; /* clients wanting events */
+} SecurityAuthorizationRec, *SecurityAuthorizationPtr;
+
+/* The following callback is called when a GenerateAuthorization request
+ * is processed to sanity check the group argument.  The call data will
+ * be a pointer to a SecurityValidateGroupInfoRec (below).  
+ * Functions registered on this callback are expected to examine the
+ * group and set the valid field to TRUE if they recognize the group as a
+ * legitimate group.  If they don't recognize it, they should not change the
+ * valid field.
+ */
+extern CallbackListPtr SecurityValidateGroupCallback;
+typedef struct {
+    XID group; /* the group that was sent in GenerateAuthorization */
+    Bool valid; /* did anyone recognize it? if so, set to TRUE */
+} SecurityValidateGroupInfoRec;
+
+/* Proc vectors for untrusted clients, swapped and unswapped versions.
+ * These are the same as the normal proc vectors except that extensions
+ * that haven't declared themselves secure will have ProcBadRequest plugged
+ * in for their major opcode dispatcher.  This prevents untrusted clients
+ * from guessing extension major opcodes and using the extension even though
+ * the extension can't be listed or queried.
+ */
+extern int (*UntrustedProcVector[256])(ClientPtr client);
+extern int (*SwappedUntrustedProcVector[256])(ClientPtr client);
+
+extern Bool SecurityCheckDeviceAccess(ClientPtr client, DeviceIntPtr dev,
+                              Bool fromRequest);
+
+extern void SecurityAudit(char *format, ...);
+
+/* Give this value or higher to the -audit option to get security messages */
+#define SECURITY_AUDIT_LEVEL 4
+
+extern void SecurityCensorImage(
+    ClientPtr client,
+    RegionPtr pVisibleRegion,
+    long widthBytesLine,
+    DrawablePtr pDraw,
+    int x, int y, int w, int h,
+    unsigned int format,
+    char * pBuf);
+
+#define SecurityAllowOperation  0
+#define SecurityIgnoreOperation 1
+#define SecurityErrorOperation  2
+
+char
+SecurityCheckPropertyAccess(
+    ClientPtr client,
+    WindowPtr pWin,
+    ATOM  propertyName,
+    Mask access_mode);
+
+#define SECURITY_POLICY_FILE_VERSION "version-1"
+
+char **SecurityGetSitePolicyStrings(int *n);
+
+#endif /* _SECURITY_SERVER */
+
+#endif /* _SECURITY_H */