Add four new XACE hooks: auditing, key event notification, window init

This commit is contained in:
Eamon Walsh 2006-08-25 18:17:01 -04:00 committed by Eamon Walsh
parent 52ba722e4c
commit 13c6713c82
6 changed files with 78 additions and 1 deletions

View File

@ -169,6 +169,39 @@ int XaceHook(int hook, ...)
calldata = &rec; calldata = &rec;
break; break;
} }
case XACE_KEY_AVAIL: {
XaceKeyAvailRec rec = {
va_arg(ap, xEventPtr),
va_arg(ap, DeviceIntPtr),
va_arg(ap, int)
};
calldata = &rec;
break;
}
case XACE_WINDOW_INIT: {
XaceWindowRec rec = {
va_arg(ap, ClientPtr),
va_arg(ap, WindowPtr)
};
calldata = &rec;
break;
}
case XACE_AUDIT_BEGIN: {
XaceAuditRec rec = {
va_arg(ap, ClientPtr),
0
};
calldata = &rec;
break;
}
case XACE_AUDIT_END: {
XaceAuditRec rec = {
va_arg(ap, ClientPtr),
va_arg(ap, int)
};
calldata = &rec;
break;
}
default: { default: {
va_end(ap); va_end(ap);
return 0; /* unimplemented hook number */ return 0; /* unimplemented hook number */

View File

@ -46,7 +46,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define XACE_SITE_POLICY 10 #define XACE_SITE_POLICY 10
#define XACE_DECLARE_EXT_SECURE 11 #define XACE_DECLARE_EXT_SECURE 11
#define XACE_AUTH_AVAIL 12 #define XACE_AUTH_AVAIL 12
#define XACE_NUM_HOOKS 13 #define XACE_KEY_AVAIL 13
#define XACE_WINDOW_INIT 14
#define XACE_AUDIT_BEGIN 15
#define XACE_AUDIT_END 16
#define XACE_NUM_HOOKS 17
extern CallbackListPtr XaceHooks[XACE_NUM_HOOKS]; extern CallbackListPtr XaceHooks[XACE_NUM_HOOKS];

View File

@ -112,4 +112,24 @@ typedef struct {
XID authId; XID authId;
} XaceAuthAvailRec; } XaceAuthAvailRec;
/* XACE_KEY_AVAIL */
typedef struct {
xEventPtr event;
DeviceIntPtr keybd;
int count;
} XaceKeyAvailRec;
/* XACE_WINDOW_INIT */
typedef struct {
ClientPtr client;
WindowPtr pWin;
} XaceWindowRec;
/* XACE_AUDIT_BEGIN */
/* XACE_AUDIT_END */
typedef struct {
ClientPtr client;
int requestResult;
} XaceAuditRec;
#endif /* _XACESTR_H */ #endif /* _XACESTR_H */

View File

@ -451,7 +451,15 @@ Dispatch(void)
if (result > (maxBigRequestSize << 2)) if (result > (maxBigRequestSize << 2))
result = BadLength; result = BadLength;
else else
#ifdef XACE
{
XaceHook(XACE_AUDIT_BEGIN, client);
result = (* client->requestVector[MAJOROP])(client); result = (* client->requestVector[MAJOROP])(client);
XaceHook(XACE_AUDIT_END, client, result);
}
#else
result = (* client->requestVector[MAJOROP])(client);
#endif /* XACE */
if (result != Success) if (result != Success)
{ {

View File

@ -2846,6 +2846,10 @@ drawable.id:0;
DeliverFocusedEvent(keybd, xE, sprite.win, count); DeliverFocusedEvent(keybd, xE, sprite.win, count);
if (deactivateGrab) if (deactivateGrab)
(*keybd->DeactivateGrab)(keybd); (*keybd->DeactivateGrab)(keybd);
#ifdef XACE
XaceHook(XACE_KEY_AVAIL, xE, keybd, count);
#endif
} }
#ifdef XKB #ifdef XKB

View File

@ -530,6 +530,10 @@ InitRootWindow(WindowPtr pWin)
/* We SHOULD check for an error value here XXX */ /* We SHOULD check for an error value here XXX */
(*pScreen->ChangeWindowAttributes)(pWin, backFlag); (*pScreen->ChangeWindowAttributes)(pWin, backFlag);
#ifdef XACE
XaceHook(XACE_WINDOW_INIT, serverClient, pWin);
#endif
MapWindow(pWin, serverClient); MapWindow(pWin, serverClient);
} }
@ -762,6 +766,10 @@ CreateWindow(Window wid, register WindowPtr pParent, int x, int y, unsigned w,
REGION_NULL(pScreen, &pWin->winSize); REGION_NULL(pScreen, &pWin->winSize);
REGION_NULL(pScreen, &pWin->borderSize); REGION_NULL(pScreen, &pWin->borderSize);
#ifdef XACE
XaceHook(XACE_WINDOW_INIT, client, pWin);
#endif
pHead = RealChildHead(pParent); pHead = RealChildHead(pParent);
if (pHead) if (pHead)
{ {