summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xext/xselinux.c33
-rw-r--r--Xext/xselinux.h1
2 files changed, 34 insertions, 0 deletions
diff --git a/Xext/xselinux.c b/Xext/xselinux.c
index 2e059a4c3..1e3b4d66c 100644
--- a/Xext/xselinux.c
+++ b/Xext/xselinux.c
@@ -1473,6 +1473,24 @@ ProcSELinuxGetSelectionContext(ClientPtr client, pointer privKey)
}
static int
+ProcSELinuxGetClientContext(ClientPtr client)
+{
+ ClientPtr target;
+ SELinuxSubjectRec *subj;
+ int rc;
+
+ REQUEST(SELinuxGetContextReq);
+ REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+
+ rc = dixLookupClient(&target, stuff->id, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ subj = dixLookupPrivate(&target->devPrivates, subjectKey);
+ return SELinuxSendContextReply(client, subj->sid);
+}
+
+static int
SELinuxPopulateItem(SELinuxListItemRec *i, PrivateRec **privPtr, CARD32 id,
int *size)
{
@@ -1686,6 +1704,8 @@ ProcSELinuxDispatch(ClientPtr client)
return ProcSELinuxGetSelectionContext(client, dataKey);
case X_SELinuxListSelections:
return ProcSELinuxListSelections(client);
+ case X_SELinuxGetClientContext:
+ return ProcSELinuxGetClientContext(client);
default:
return BadRequest;
}
@@ -1783,6 +1803,17 @@ SProcSELinuxListProperties(ClientPtr client)
}
static int
+SProcSELinuxGetClientContext(ClientPtr client)
+{
+ REQUEST(SELinuxGetContextReq);
+ int n;
+
+ REQUEST_SIZE_MATCH(SELinuxGetContextReq);
+ swapl(&stuff->id, n);
+ return ProcSELinuxGetClientContext(client);
+}
+
+static int
SProcSELinuxDispatch(ClientPtr client)
{
REQUEST(xReq);
@@ -1835,6 +1866,8 @@ SProcSELinuxDispatch(ClientPtr client)
return SProcSELinuxGetSelectionContext(client, dataKey);
case X_SELinuxListSelections:
return ProcSELinuxListSelections(client);
+ case X_SELinuxGetClientContext:
+ return SProcSELinuxGetClientContext(client);
default:
return BadRequest;
}
diff --git a/Xext/xselinux.h b/Xext/xselinux.h
index 2d0de3222..7c3ffdcb7 100644
--- a/Xext/xselinux.h
+++ b/Xext/xselinux.h
@@ -52,6 +52,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define X_SELinuxGetSelectionContext 19
#define X_SELinuxGetSelectionDataContext 20
#define X_SELinuxListSelections 21
+#define X_SELinuxGetClientContext 22
typedef struct {
CARD8 reqType;