xselinux: Add audit message fields for selection and event names.
This commit is contained in:
parent
0388a59a6e
commit
0d2ef187e7
|
@ -83,7 +83,9 @@ typedef struct {
|
||||||
char *command; /* client's executable path */
|
char *command; /* client's executable path */
|
||||||
unsigned id; /* resource id, if any */
|
unsigned id; /* resource id, if any */
|
||||||
int restype; /* resource type, if any */
|
int restype; /* resource type, if any */
|
||||||
|
int event; /* event type, if any */
|
||||||
Atom property; /* property name, if any */
|
Atom property; /* property name, if any */
|
||||||
|
Atom selection; /* selection name, if any */
|
||||||
char *extension; /* extension name, if any */
|
char *extension; /* extension name, if any */
|
||||||
} SELinuxAuditRec;
|
} SELinuxAuditRec;
|
||||||
|
|
||||||
|
@ -413,7 +415,7 @@ SELinuxAudit(void *auditdata,
|
||||||
{
|
{
|
||||||
SELinuxAuditRec *audit = auditdata;
|
SELinuxAuditRec *audit = auditdata;
|
||||||
ClientPtr client = audit->client;
|
ClientPtr client = audit->client;
|
||||||
char idNum[16], *propertyName;
|
char idNum[16], *propertyName, *selectionName;
|
||||||
int major = -1, minor = -1;
|
int major = -1, minor = -1;
|
||||||
|
|
||||||
if (client) {
|
if (client) {
|
||||||
|
@ -427,8 +429,9 @@ SELinuxAudit(void *auditdata,
|
||||||
snprintf(idNum, 16, "%x", audit->id);
|
snprintf(idNum, 16, "%x", audit->id);
|
||||||
|
|
||||||
propertyName = audit->property ? NameForAtom(audit->property) : NULL;
|
propertyName = audit->property ? NameForAtom(audit->property) : NULL;
|
||||||
|
selectionName = audit->selection ? NameForAtom(audit->selection) : NULL;
|
||||||
|
|
||||||
return snprintf(msgbuf, msgbufsize, "%s%s%s%s%s%s%s%s%s%s%s%s",
|
return snprintf(msgbuf, msgbufsize, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||||
(major >= 0) ? "request=" : "",
|
(major >= 0) ? "request=" : "",
|
||||||
(major >= 0) ? LookupRequestName(major, minor) : "",
|
(major >= 0) ? LookupRequestName(major, minor) : "",
|
||||||
audit->command ? " comm=" : "",
|
audit->command ? " comm=" : "",
|
||||||
|
@ -437,8 +440,12 @@ SELinuxAudit(void *auditdata,
|
||||||
audit->id ? idNum : "",
|
audit->id ? idNum : "",
|
||||||
audit->restype ? " restype=" : "",
|
audit->restype ? " restype=" : "",
|
||||||
audit->restype ? LookupResourceName(audit->restype) : "",
|
audit->restype ? LookupResourceName(audit->restype) : "",
|
||||||
|
audit->event ? " event=" : "",
|
||||||
|
audit->event ? LookupEventName(audit->event & 127) : "",
|
||||||
audit->property ? " property=" : "",
|
audit->property ? " property=" : "",
|
||||||
audit->property ? propertyName : "",
|
audit->property ? propertyName : "",
|
||||||
|
audit->selection ? " selection=" : "",
|
||||||
|
audit->selection ? selectionName : "",
|
||||||
audit->extension ? " extension=" : "",
|
audit->extension ? " extension=" : "",
|
||||||
audit->extension ? audit->extension : "");
|
audit->extension ? audit->extension : "");
|
||||||
}
|
}
|
||||||
|
@ -462,7 +469,7 @@ SELinuxDevice(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceDeviceAccessRec *rec = calldata;
|
XaceDeviceAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -492,7 +499,7 @@ SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceSendAccessRec *rec = calldata;
|
XaceSendAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc, i, clientIndex;
|
int rc, i, clientIndex;
|
||||||
|
|
||||||
if (rec->dev) {
|
if (rec->dev) {
|
||||||
|
@ -519,6 +526,7 @@ SELinuxSend(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
auditdata.event = rec->events[i].u.u.type;
|
||||||
rc = SELinuxDoCheck(clientIndex, subj, &ev_sid, SECCLASS_X_EVENT,
|
rc = SELinuxDoCheck(clientIndex, subj, &ev_sid, SECCLASS_X_EVENT,
|
||||||
DixSendAccess, &auditdata);
|
DixSendAccess, &auditdata);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
|
@ -534,7 +542,7 @@ SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceReceiveAccessRec *rec = calldata;
|
XaceReceiveAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc, i;
|
int rc, i;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -554,6 +562,7 @@ SELinuxReceive(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
auditdata.event = rec->events[i].u.u.type;
|
||||||
rc = SELinuxDoCheck(rec->client->index, subj, &ev_sid, SECCLASS_X_EVENT,
|
rc = SELinuxDoCheck(rec->client->index, subj, &ev_sid, SECCLASS_X_EVENT,
|
||||||
DixReceiveAccess, &auditdata);
|
DixReceiveAccess, &auditdata);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
|
@ -569,7 +578,7 @@ SELinuxExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceExtAccessRec *rec = calldata;
|
XaceExtAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj, *serv;
|
SELinuxStateRec *subj, *obj, *serv;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -623,7 +632,7 @@ SELinuxProperty(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XacePropertyAccessRec *rec = calldata;
|
XacePropertyAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -675,7 +684,7 @@ SELinuxResource(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceResourceAccessRec *rec = calldata;
|
XaceResourceAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj, *pobj;
|
SELinuxStateRec *subj, *obj, *pobj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
PrivateRec **privatePtr;
|
PrivateRec **privatePtr;
|
||||||
security_class_t class;
|
security_class_t class;
|
||||||
int rc, offset;
|
int rc, offset;
|
||||||
|
@ -731,7 +740,7 @@ SELinuxScreen(CallbackListPtr *pcbl, pointer is_saver, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceScreenAccessRec *rec = calldata;
|
XaceScreenAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
Mask access_mode = rec->access_mode;
|
Mask access_mode = rec->access_mode;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -765,7 +774,7 @@ SELinuxClient(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceClientAccessRec *rec = calldata;
|
XaceClientAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -782,7 +791,7 @@ SELinuxServer(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceServerAccessRec *rec = calldata;
|
XaceServerAccessRec *rec = calldata;
|
||||||
SELinuxStateRec *subj, *obj;
|
SELinuxStateRec *subj, *obj;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -799,7 +808,7 @@ SELinuxSelection(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
{
|
{
|
||||||
XaceSelectionAccessRec *rec = (XaceSelectionAccessRec *)calldata;
|
XaceSelectionAccessRec *rec = (XaceSelectionAccessRec *)calldata;
|
||||||
SELinuxStateRec *subj, sel_sid;
|
SELinuxStateRec *subj, sel_sid;
|
||||||
SELinuxAuditRec auditdata = { rec->client, NULL, 0, 0, 0, NULL };
|
SELinuxAuditRec auditdata = { .client = rec->client };
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
subj = dixLookupPrivate(&rec->client->devPrivates, stateKey);
|
||||||
|
@ -810,6 +819,7 @@ SELinuxSelection(CallbackListPtr *pcbl, pointer unused, pointer calldata)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auditdata.selection = rec->name;
|
||||||
rc = SELinuxDoCheck(rec->client->index, subj, &sel_sid,
|
rc = SELinuxDoCheck(rec->client->index, subj, &sel_sid,
|
||||||
SECCLASS_X_SELECTION, rec->access_mode, &auditdata);
|
SECCLASS_X_SELECTION, rec->access_mode, &auditdata);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
|
|
Loading…
Reference in New Issue