Edit

IABSD.fr/xenocara/xserver/Xext/xselinuxint.h

Branch :

  • Show log

    Commit

  • Author : matthieu
    Date : 2021-11-11 09:03:02
    Hash : e086cf5a
    Message : Update to xserver 21.1.0

  • xserver/Xext/xselinuxint.h
  • /************************************************************
    
    Author: Eamon Walsh <ewalsh@tycho.nsa.gov>
    
    Permission to use, copy, modify, distribute, and sell this software and its
    documentation for any purpose is hereby granted without fee, provided that
    this permission notice appear in supporting documentation.  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
    AUTHOR 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.
    
    ********************************************************/
    
    #ifndef _XSELINUXINT_H
    #define _XSELINUXINT_H
    
    #include <selinux/selinux.h>
    #include <selinux/avc.h>
    
    #include "globals.h"
    #include "dixaccess.h"
    #include "dixstruct.h"
    #include "privates.h"
    #include "resource.h"
    #include "registry.h"
    #include "inputstr.h"
    #include "xselinux.h"
    
    /*
     * Types
     */
    
    #define COMMAND_LEN 64
    
    /* subject state (clients and devices only) */
    typedef struct {
        security_id_t sid;
        security_id_t dev_create_sid;
        security_id_t win_create_sid;
        security_id_t sel_create_sid;
        security_id_t prp_create_sid;
        security_id_t sel_use_sid;
        security_id_t prp_use_sid;
        struct avc_entry_ref aeref;
        char command[COMMAND_LEN];
        int privileged;
    } SELinuxSubjectRec;
    
    /* object state */
    typedef struct {
        security_id_t sid;
        int poly;
    } SELinuxObjectRec;
    
    /*
     * Globals
     */
    
    extern DevPrivateKeyRec subjectKeyRec;
    
    #define subjectKey (&subjectKeyRec)
    extern DevPrivateKeyRec objectKeyRec;
    
    #define objectKey (&objectKeyRec)
    extern DevPrivateKeyRec dataKeyRec;
    
    #define dataKey (&dataKeyRec)
    
    /*
     * Label functions
     */
    
    int
     SELinuxAtomToSID(Atom atom, int prop, SELinuxObjectRec ** obj_rtn);
    
    int
    
    SELinuxSelectionToSID(Atom selection, SELinuxSubjectRec * subj,
                          security_id_t * sid_rtn, int *poly_rtn);
    
    int
    
    SELinuxPropertyToSID(Atom property, SELinuxSubjectRec * subj,
                         security_id_t * sid_rtn, int *poly_rtn);
    
    int
    
    SELinuxEventToSID(unsigned type, security_id_t sid_of_window,
                      SELinuxObjectRec * sid_return);
    
    int
     SELinuxExtensionToSID(const char *name, security_id_t * sid_rtn);
    
    security_class_t SELinuxTypeToClass(RESTYPE type);
    
    char *SELinuxDefaultClientLabel(void);
    
    void
     SELinuxLabelInit(void);
    
    void
     SELinuxLabelReset(void);
    
    /*
     * Security module functions
     */
    
    void
     SELinuxFlaskInit(void);
    
    void
     SELinuxFlaskReset(void);
    
    /*
     * Private Flask definitions
     */
    
    /* Security class constants */
    #define SECCLASS_X_DRAWABLE		1
    #define SECCLASS_X_SCREEN		2
    #define SECCLASS_X_GC			3
    #define SECCLASS_X_FONT			4
    #define SECCLASS_X_COLORMAP		5
    #define SECCLASS_X_PROPERTY		6
    #define SECCLASS_X_SELECTION		7
    #define SECCLASS_X_CURSOR		8
    #define SECCLASS_X_CLIENT		9
    #define SECCLASS_X_POINTER		10
    #define SECCLASS_X_KEYBOARD		11
    #define SECCLASS_X_SERVER		12
    #define SECCLASS_X_EXTENSION		13
    #define SECCLASS_X_EVENT		14
    #define SECCLASS_X_FAKEEVENT		15
    #define SECCLASS_X_RESOURCE		16
    
    #ifdef _XSELINUX_NEED_FLASK_MAP
    /* Mapping from DixAccess bits to Flask permissions */
    static struct security_class_mapping map[] = {
        {"x_drawable",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "list_property",          /* DixListPropAccess */
          "get_property",           /* DixGetPropAccess */
          "set_property",           /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "list_child",             /* DixListAccess */
          "add_child",              /* DixAddAccess */
          "remove_child",           /* DixRemoveAccess */
          "hide",                   /* DixHideAccess */
          "show",                   /* DixShowAccess */
          "blend",                  /* DixBlendAccess */
          "override",               /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "send",                   /* DixSendAccess */
          "receive",                /* DixReceiveAccess */
          "",                       /* DixUseAccess */
          "manage",                 /* DixManageAccess */
          NULL}},
        {"x_screen",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "saver_getattr",          /* DixListPropAccess */
          "saver_setattr",          /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "hide_cursor",            /* DixHideAccess */
          "show_cursor",            /* DixShowAccess */
          "saver_hide",             /* DixBlendAccess */
          "saver_show",             /* DixGrabAccess */
          NULL}},
        {"x_gc",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          NULL}},
        {"x_font",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "",                       /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "add_glyph",              /* DixAddAccess */
          "remove_glyph",           /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          NULL}},
        {"x_colormap",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "",                       /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "add_color",              /* DixAddAccess */
          "remove_color",           /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "install",                /* DixInstallAccess */
          "uninstall",              /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          NULL}},
        {"x_property",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "write",                  /* DixBlendAccess */
          NULL}},
        {"x_selection",
         {"read",                   /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "setattr",                /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          NULL}},
        {"x_cursor",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          NULL}},
        {"x_client",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "",                       /* DixUseAccess */
          "manage",                 /* DixManageAccess */
          NULL}},
        {"x_pointer",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "list_property",          /* DixListPropAccess */
          "get_property",           /* DixGetPropAccess */
          "set_property",           /* DixSetPropAccess */
          "getfocus",               /* DixGetFocusAccess */
          "setfocus",               /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "add",                    /* DixAddAccess */
          "remove",                 /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "grab",                   /* DixGrabAccess */
          "freeze",                 /* DixFreezeAccess */
          "force_cursor",           /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          "manage",                 /* DixManageAccess */
          "",                       /* DixDebugAccess */
          "bell",                   /* DixBellAccess */
          NULL}},
        {"x_keyboard",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "destroy",                /* DixDestroyAccess */
          "create",                 /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "list_property",          /* DixListPropAccess */
          "get_property",           /* DixGetPropAccess */
          "set_property",           /* DixSetPropAccess */
          "getfocus",               /* DixGetFocusAccess */
          "setfocus",               /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "add",                    /* DixAddAccess */
          "remove",                 /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "grab",                   /* DixGrabAccess */
          "freeze",                 /* DixFreezeAccess */
          "force_cursor",           /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          "manage",                 /* DixManageAccess */
          "",                       /* DixDebugAccess */
          "bell",                   /* DixBellAccess */
          NULL}},
        {"x_server",
         {"record",                 /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "getattr",                /* DixGetAttrAccess */
          "setattr",                /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "grab",                   /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "",                       /* DixUseAccess */
          "manage",                 /* DixManageAccess */
          "debug",                  /* DixDebugAccess */
          NULL}},
        {"x_extension",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "query",                  /* DixGetAttrAccess */
          "",                       /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "",                       /* DixSendAccess */
          "",                       /* DixReceiveAccess */
          "use",                    /* DixUseAccess */
          NULL}},
        {"x_event",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "",                       /* DixGetAttrAccess */
          "",                       /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "send",                   /* DixSendAccess */
          "receive",                /* DixReceiveAccess */
          NULL}},
        {"x_synthetic_event",
         {"",                       /* DixReadAccess */
          "",                       /* DixWriteAccess */
          "",                       /* DixDestroyAccess */
          "",                       /* DixCreateAccess */
          "",                       /* DixGetAttrAccess */
          "",                       /* DixSetAttrAccess */
          "",                       /* DixListPropAccess */
          "",                       /* DixGetPropAccess */
          "",                       /* DixSetPropAccess */
          "",                       /* DixGetFocusAccess */
          "",                       /* DixSetFocusAccess */
          "",                       /* DixListAccess */
          "",                       /* DixAddAccess */
          "",                       /* DixRemoveAccess */
          "",                       /* DixHideAccess */
          "",                       /* DixShowAccess */
          "",                       /* DixBlendAccess */
          "",                       /* DixGrabAccess */
          "",                       /* DixFreezeAccess */
          "",                       /* DixForceAccess */
          "",                       /* DixInstallAccess */
          "",                       /* DixUninstallAccess */
          "send",                   /* DixSendAccess */
          "receive",                /* DixReceiveAccess */
          NULL}},
        {"x_resource",
         {"read",                   /* DixReadAccess */
          "write",                  /* DixWriteAccess */
          "write",                  /* DixDestroyAccess */
          "write",                  /* DixCreateAccess */
          "read",                   /* DixGetAttrAccess */
          "write",                  /* DixSetAttrAccess */
          "read",                   /* DixListPropAccess */
          "read",                   /* DixGetPropAccess */
          "write",                  /* DixSetPropAccess */
          "read",                   /* DixGetFocusAccess */
          "write",                  /* DixSetFocusAccess */
          "read",                   /* DixListAccess */
          "write",                  /* DixAddAccess */
          "write",                  /* DixRemoveAccess */
          "write",                  /* DixHideAccess */
          "read",                   /* DixShowAccess */
          "read",                   /* DixBlendAccess */
          "write",                  /* DixGrabAccess */
          "write",                  /* DixFreezeAccess */
          "write",                  /* DixForceAccess */
          "write",                  /* DixInstallAccess */
          "write",                  /* DixUninstallAccess */
          "write",                  /* DixSendAccess */
          "read",                   /* DixReceiveAccess */
          "read",                   /* DixUseAccess */
          "write",                  /* DixManageAccess */
          "read",                   /* DixDebugAccess */
          "write",                  /* DixBellAccess */
          NULL}},
        {NULL}
    };
    
    /* x_resource "read" bits from the list above */
    #define SELinuxReadMask (DixReadAccess|DixGetAttrAccess|DixListPropAccess| \
    			 DixGetPropAccess|DixGetFocusAccess|DixListAccess| \
    			 DixShowAccess|DixBlendAccess|DixReceiveAccess| \
    			 DixUseAccess|DixDebugAccess)
    
    #endif                          /* _XSELINUX_NEED_FLASK_MAP */
    #endif                          /* _XSELINUXINT_H */