66 */ |
66 */ |
67 |
67 |
68 #define MAX_AUDIT_EVENTS 100 |
68 #define MAX_AUDIT_EVENTS 100 |
69 |
69 |
70 int audit_eventsid[100][2] = { |
70 int audit_eventsid[100][2] = { |
71 X_CreateWindow, 9103, |
71 X_CreateWindow, AUE_CreateWindow, |
72 X_ChangeWindowAttributes, 9104, |
72 X_ChangeWindowAttributes, AUE_ChangeWindowAttributes, |
73 X_GetWindowAttributes, 9105, |
73 X_GetWindowAttributes, AUE_GetWindowAttributes, |
74 X_DestroyWindow, 9106, |
74 X_DestroyWindow, AUE_DestroyWindow, |
75 X_DestroySubwindows, 9107, |
75 X_DestroySubwindows, AUE_DestroySubwindows, |
76 X_ChangeSaveSet, 9108, |
76 X_ChangeSaveSet, AUE_ChangeSaveSet, |
77 X_ReparentWindow, 9109, |
77 X_ReparentWindow, AUE_ReparentWindow, |
78 X_MapWindow, 9110, |
78 X_MapWindow, AUE_MapWindow, |
79 X_MapSubwindows, 9111, |
79 X_MapSubwindows, AUE_MapSubwindows, |
80 X_UnmapWindow, 9112, |
80 X_UnmapWindow, AUE_UnmapWindow, |
81 X_UnmapSubwindows, 9113, |
81 X_UnmapSubwindows, AUE_UnmapSubwindows, |
82 X_ConfigureWindow, 9114, |
82 X_ConfigureWindow, AUE_ConfigureWindow, |
83 X_CirculateWindow, 9115, |
83 X_CirculateWindow, AUE_CirculateWindow, |
84 X_GetGeometry, 9116, |
84 X_GetGeometry, AUE_GetGeometry, |
85 X_QueryTree, 9117, |
85 X_QueryTree, AUE_QueryTree, |
86 X_InternAtom, 9118, |
86 X_InternAtom, AUE_InternAtom, |
87 X_GetAtomName, 9119, |
87 X_GetAtomName, AUE_GetAtomName, |
88 X_ChangeProperty, 9120, |
88 X_ChangeProperty, AUE_ChangeProperty, |
89 X_DeleteProperty, 9121, |
89 X_DeleteProperty, AUE_DeleteProperty, |
90 X_GetProperty, 9122, |
90 X_GetProperty, AUE_GetProperty, |
91 X_ListProperties, 9123, |
91 X_ListProperties, AUE_ListProperties, |
92 X_SetSelectionOwner, 9124, |
92 X_SetSelectionOwner, AUE_SetSelectionOwner, |
93 X_GetSelectionOwner, 9125, |
93 X_GetSelectionOwner, AUE_GetSelectionOwner, |
94 X_ConvertSelection, 9126, |
94 X_ConvertSelection, AUE_ConvertSelection, |
95 X_SendEvent, 9127, |
95 X_SendEvent, AUE_SendEvent, |
96 X_GrabPointer, 9128, |
96 X_GrabPointer, AUE_GrabPointer, |
97 X_UngrabPointer, 9129, |
97 X_UngrabPointer, AUE_UngrabPointer, |
98 X_GrabButton, 9130, |
98 X_GrabButton, AUE_GrabButton, |
99 X_UngrabButton, 9131, |
99 X_UngrabButton, AUE_UngrabButton, |
100 X_ChangeActivePointerGrab, 9132, |
100 X_ChangeActivePointerGrab, AUE_ChangeActivePointerGrab, |
101 X_GrabKeyboard, 9133, |
101 X_GrabKeyboard, AUE_GrabKeyboard, |
102 X_UngrabKeyboard, 9134, |
102 X_UngrabKeyboard, AUE_UngrabKeyboard, |
103 X_GrabKey, 9135, |
103 X_GrabKey, AUE_GrabKey, |
104 X_UngrabKey, 9136, |
104 X_UngrabKey, AUE_UngrabKey, |
105 X_GrabServer, 9137, |
105 X_GrabServer, AUE_GrabServer, |
106 X_UngrabServer, 9138, |
106 X_UngrabServer, AUE_UngrabServer, |
107 X_QueryPointer, 9139, |
107 X_QueryPointer, AUE_QueryPointer, |
108 X_GetMotionEvents, 9140, |
108 X_GetMotionEvents, AUE_GetMotionEvents, |
109 X_TranslateCoords, 9141, |
109 X_TranslateCoords, AUE_TranslateCoords, |
110 X_WarpPointer, 9142, |
110 X_WarpPointer, AUE_WarpPointer, |
111 X_SetInputFocus, 9143, |
111 X_SetInputFocus, AUE_SetInputFocus, |
112 X_GetInputFocus, 9144, |
112 X_GetInputFocus, AUE_GetInputFocus, |
113 X_QueryKeymap, 9145, |
113 X_QueryKeymap, AUE_QueryKeymap, |
114 X_SetFontPath, 9146, |
114 X_SetFontPath, AUE_SetFontPath, |
115 X_FreePixmap, 9147, |
115 X_FreePixmap, AUE_FreePixmap, |
116 X_ChangeGC, 9148, |
116 X_ChangeGC, AUE_ChangeGC, |
117 X_CopyGC, 9149, |
117 X_CopyGC, AUE_CopyGC, |
118 X_SetDashes, 9150, |
118 X_SetDashes, AUE_SetDashes, |
119 X_SetClipRectangles, 9151, |
119 X_SetClipRectangles, AUE_SetClipRectangles, |
120 X_FreeGC, 9152, |
120 X_FreeGC, AUE_FreeGC, |
121 X_ClearArea, 9153, |
121 X_ClearArea, AUE_ClearArea, |
122 X_CopyArea, 9154, |
122 X_CopyArea, AUE_CopyArea, |
123 X_CopyPlane, 9155, |
123 X_CopyPlane, AUE_CopyPlane, |
124 X_PolyPoint, 9156, |
124 X_PolyPoint, AUE_PolyPoint, |
125 X_PolyLine, 9157, |
125 X_PolyLine, AUE_PolyLine, |
126 X_PolySegment, 9158, |
126 X_PolySegment, AUE_PolySegment, |
127 X_PolyRectangle, 9159, |
127 X_PolyRectangle, AUE_PolyRectangle, |
128 X_PolyArc, 9160, |
128 X_PolyArc, AUE_PolyArc, |
129 X_FillPoly, 9161, |
129 X_FillPoly, AUE_FillPolygon, |
130 X_PolyFillRectangle, 9162, |
130 X_PolyFillRectangle, AUE_PolyFillRectangle, |
131 X_PolyFillArc, 9163, |
131 X_PolyFillArc, AUE_PolyFillArc, |
132 X_PutImage, 9164, |
132 X_PutImage, AUE_PutImage, |
133 X_GetImage, 9165, |
133 X_GetImage, AUE_GetImage, |
134 X_PolyText8, 9166, |
134 X_PolyText8, AUE_PolyText8, |
135 X_PolyText16, 9167, |
135 X_PolyText16, AUE_PolyText16, |
136 X_ImageText8, 9168, |
136 X_ImageText8, AUE_ImageText8, |
137 X_ImageText16, 9169, |
137 X_ImageText16, AUE_ImageText16, |
138 X_CreateColormap, 9170, |
138 X_CreateColormap, AUE_CreateColormap, |
139 X_FreeColormap, 9171, |
139 X_FreeColormap, AUE_FreeColormap, |
140 X_CopyColormapAndFree, 9172, |
140 X_CopyColormapAndFree, AUE_CopyColormapAndFree, |
141 X_InstallColormap, 9173, |
141 X_InstallColormap, AUE_InstallColormap, |
142 X_UninstallColormap, 9174, |
142 X_UninstallColormap, AUE_UninstallColormap, |
143 X_ListInstalledColormaps, 9175, |
143 X_ListInstalledColormaps, AUE_ListInstalledColormaps, |
144 X_AllocColor, 9176, |
144 X_AllocColor, AUE_AllocColor, |
145 X_AllocNamedColor, 9177, |
145 X_AllocNamedColor, AUE_AllocNamedColor, |
146 X_AllocColorCells, 9178, |
146 X_AllocColorCells, AUE_AllocColorCells, |
147 X_AllocColorPlanes, 9179, |
147 X_AllocColorPlanes, AUE_AllocColorPlanes, |
148 X_FreeColors, 9180, |
148 X_FreeColors, AUE_FreeColors, |
149 X_StoreColors, 9181, |
149 X_StoreColors, AUE_StoreColors, |
150 X_StoreNamedColor, 9182, |
150 X_StoreNamedColor, AUE_StoreNamedColor, |
151 X_QueryColors, 9183, |
151 X_QueryColors, AUE_QueryColors, |
152 X_LookupColor, 9184, |
152 X_LookupColor, AUE_LookupColor, |
153 X_CreateCursor, 9185, |
153 X_CreateCursor, AUE_CreateCursor, |
154 X_CreateGlyphCursor, 9186, |
154 X_CreateGlyphCursor, AUE_CreateGlyphCursor, |
155 X_FreeCursor, 9187, |
155 X_FreeCursor, AUE_FreeCursor, |
156 X_RecolorCursor, 9188, |
156 X_RecolorCursor, AUE_RecolorCursor, |
157 X_ChangeKeyboardMapping, 9189, |
157 X_ChangeKeyboardMapping, AUE_ChangeKeyboardMapping, |
158 X_ChangeKeyboardControl, 9190, |
158 X_ChangeKeyboardControl, AUE_ChangeKeyboardControl, |
159 X_Bell, 9191, |
159 X_Bell, AUE_Bell, |
160 X_ChangePointerControl, 9192, |
160 X_ChangePointerControl, AUE_ChangePointerControl, |
161 X_SetScreenSaver, 9193, |
161 X_SetScreenSaver, AUE_SetScreenSaver, |
162 X_ChangeHosts, 9194, |
162 X_ChangeHosts, AUE_ChangeHosts, |
163 X_SetAccessControl, 9195, |
163 X_SetAccessControl, AUE_SetAccessControl, |
164 X_SetCloseDownMode, 9196, |
164 X_SetCloseDownMode, AUE_SetCloseDownMode, |
165 X_KillClient, 9197, |
165 X_KillClient, AUE_KillClient, |
166 X_RotateProperties, 9198, |
166 X_RotateProperties, AUE_RotateProperties, |
167 X_ForceScreenSaver, 9199, |
167 X_ForceScreenSaver, AUE_ForceScreenSaver, |
168 X_SetPointerMapping, 9200, |
168 X_SetPointerMapping, AUE_SetPointerMapping, |
169 X_SetModifierMapping, 9201, |
169 X_SetModifierMapping, AUE_SetModifierMapping, |
170 X_NoOperation, 9202 |
170 X_NoOperation, AUE_XExtensions |
171 }; |
171 }; |
172 extern void Swap32Write(); |
172 extern void Swap32Write(); |
173 extern int (*TsolSavedProcVector[PROCVECTORSIZE])(ClientPtr /*client*/); |
173 extern int (*TsolSavedProcVector[PROCVECTORSIZE])(ClientPtr /*client*/); |
174 extern int (*TsolSavedSwappedProcVector[PROCVECTORSIZE])(ClientPtr /*client*/); |
174 extern int (*TsolSavedSwappedProcVector[PROCVECTORSIZE])(ClientPtr /*client*/); |
175 |
175 |
1439 |
1441 |
1440 int |
1442 int |
1441 ProcTsolChangeKeyboardMapping(client) |
1443 ProcTsolChangeKeyboardMapping(client) |
1442 ClientPtr client; |
1444 ClientPtr client; |
1443 { |
1445 { |
1444 int err_code; |
1446 int status; |
1445 |
1447 int savedtrust = client->trustLevel; |
1446 if (err_code = xtsol_policy(TSOL_RES_KEYMAP, TSOL_MODIFY, |
1448 |
|
1449 client->trustLevel = XSecurityClientTrusted; |
|
1450 |
|
1451 if (xtsol_policy(TSOL_RES_KEYMAP, TSOL_MODIFY, |
1447 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1452 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1448 { |
1453 { |
1449 /* Ignore error */ |
1454 status = client->noClientException; /* ignore error */ |
1450 return client->noClientException; |
|
1451 } |
1455 } |
1452 else |
1456 else |
1453 { |
1457 { |
1454 return (*TsolSavedProcVector[X_ChangeKeyboardMapping])(client); |
1458 status = (*TsolSavedProcVector[X_ChangeKeyboardMapping])(client); |
1455 } |
1459 } |
|
1460 |
|
1461 client->trustLevel = savedtrust; |
|
1462 return (status); |
1456 } |
1463 } |
1457 |
1464 |
1458 int |
1465 int |
1459 ProcTsolSetPointerMapping(client) |
1466 ProcTsolSetPointerMapping(client) |
1460 ClientPtr client; |
1467 ClientPtr client; |
1461 { |
1468 { |
1462 int err_code; |
1469 int status; |
1463 |
1470 int savedtrust = client->trustLevel; |
1464 if (err_code = xtsol_policy(TSOL_RES_PTRMAP, TSOL_MODIFY, |
1471 |
|
1472 client->trustLevel = XSecurityClientTrusted; |
|
1473 |
|
1474 if (xtsol_policy(TSOL_RES_PTRMAP, TSOL_MODIFY, |
1465 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1475 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1466 { |
1476 { |
1467 /* Ignore error */ |
1477 status = Success; /* ignore error */ |
1468 return Success; |
|
1469 } |
1478 } |
1470 else |
1479 else |
1471 { |
1480 { |
1472 return (*TsolSavedProcVector[X_SetPointerMapping])(client); |
1481 status = (*TsolSavedProcVector[X_SetPointerMapping])(client); |
1473 } |
1482 } |
|
1483 |
|
1484 client->trustLevel = savedtrust; |
|
1485 return (status); |
1474 } |
1486 } |
1475 |
1487 |
1476 int |
1488 int |
1477 ProcTsolChangeKeyboardControl(client) |
1489 ProcTsolChangeKeyboardControl(client) |
1478 ClientPtr client; |
1490 ClientPtr client; |
1479 { |
1491 { |
1480 int err_code; |
1492 int status; |
1481 |
1493 int savedtrust = client->trustLevel; |
1482 if (err_code = xtsol_policy(TSOL_RES_KBDCTL, TSOL_MODIFY, |
1494 |
|
1495 client->trustLevel = XSecurityClientTrusted; |
|
1496 |
|
1497 if (xtsol_policy(TSOL_RES_KBDCTL, TSOL_MODIFY, |
1483 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1498 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1484 { |
1499 { |
1485 /* Ignore error */ |
1500 status = Success; /* ignore error */ |
1486 return Success; |
|
1487 } |
1501 } |
1488 else |
1502 else |
1489 { |
1503 { |
1490 return (*TsolSavedProcVector[X_ChangeKeyboardControl])(client); |
1504 status = (*TsolSavedProcVector[X_ChangeKeyboardControl])(client); |
1491 } |
1505 } |
|
1506 |
|
1507 client->trustLevel = savedtrust; |
|
1508 return (status); |
1492 } |
1509 } |
1493 |
1510 |
1494 int |
1511 int |
1495 ProcTsolBell(client) |
1512 ProcTsolBell(client) |
1496 ClientPtr client; |
1513 ClientPtr client; |
1497 { |
1514 { |
1498 int err_code; |
1515 int status; |
1499 |
1516 int savedtrust = client->trustLevel; |
1500 if (err_code = xtsol_policy(TSOL_RES_BELL, TSOL_MODIFY, |
1517 |
|
1518 client->trustLevel = XSecurityClientTrusted; |
|
1519 |
|
1520 if (xtsol_policy(TSOL_RES_BELL, TSOL_MODIFY, |
1501 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1521 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1502 { |
1522 { |
1503 /* Ignore error */ |
1523 status = Success; /* ignore error */ |
1504 return Success; |
|
1505 } |
1524 } |
1506 else |
1525 else |
1507 { |
1526 { |
1508 return (*TsolSavedProcVector[X_Bell])(client); |
1527 status = (*TsolSavedProcVector[X_Bell])(client); |
1509 } |
1528 } |
|
1529 |
|
1530 client->trustLevel = savedtrust; |
|
1531 return (status); |
1510 } |
1532 } |
1511 |
1533 |
1512 int |
1534 int |
1513 ProcTsolChangePointerControl(client) |
1535 ProcTsolChangePointerControl(client) |
1514 ClientPtr client; |
1536 ClientPtr client; |
1515 { |
1537 { |
1516 int err_code; |
1538 int status; |
1517 |
1539 int savedtrust = client->trustLevel; |
1518 if (err_code = xtsol_policy(TSOL_RES_PTRCTL, TSOL_MODIFY, |
1540 |
|
1541 client->trustLevel = XSecurityClientTrusted; |
|
1542 |
|
1543 if (xtsol_policy(TSOL_RES_PTRCTL, TSOL_MODIFY, |
1519 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1544 NULL, client, TSOL_ALL, (void *)MAJOROP)) |
1520 { |
1545 { |
1521 /* Ignore error */ |
1546 status = Success; /* ignore error */ |
1522 return Success; |
|
1523 } |
1547 } |
1524 else |
1548 else |
1525 { |
1549 { |
1526 return (*TsolSavedProcVector[X_ChangePointerControl])(client); |
1550 status = (*TsolSavedProcVector[X_ChangePointerControl])(client); |
1527 } |
1551 } |
|
1552 |
|
1553 client->trustLevel = savedtrust; |
|
1554 return (status); |
1528 } |
1555 } |
1529 |
1556 |
1530 int |
1557 int |
1531 ProcTsolSetModifierMapping(client) |
1558 ProcTsolSetModifierMapping(client) |
1532 ClientPtr client; |
1559 ClientPtr client; |
1533 { |
1560 { |
|
1561 |
1534 xSetModifierMappingReply rep; |
1562 xSetModifierMappingReply rep; |
1535 REQUEST(xSetModifierMappingReq); |
1563 REQUEST(xSetModifierMappingReq); |
1536 KeyCode *inputMap; |
1564 KeyCode *inputMap; |
1537 int inputMapLen; |
1565 int inputMapLen; |
1538 register int i; |
1566 register int i; |
1539 int err_code; |
1567 int status; |
1540 DeviceIntPtr keybd = inputInfo.keyboard; |
1568 DeviceIntPtr keybd = inputInfo.keyboard; |
1541 register KeyClassPtr keyc = keybd->key; |
1569 register KeyClassPtr keyc = keybd->key; |
|
1570 int savedtrust = client->trustLevel; |
1542 |
1571 |
1543 REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq); |
1572 REQUEST_AT_LEAST_SIZE(xSetModifierMappingReq); |
1544 |
1573 |
1545 if (client->req_len != ((stuff->numKeyPerModifier<<1) + |
1574 if (client->req_len != ((stuff->numKeyPerModifier<<1) + |
1546 (sizeof (xSetModifierMappingReq)>>2))) |
1575 (sizeof (xSetModifierMappingReq)>>2))) |
2531 Bool do_x_audit = FALSE; |
2578 Bool do_x_audit = FALSE; |
2532 Bool audit_event = FALSE; |
2579 Bool audit_event = FALSE; |
2533 char audit_ret = (char)NULL; |
2580 char audit_ret = (char)NULL; |
2534 TsolInfoPtr tsolinfo = (TsolInfoPtr)NULL; |
2581 TsolInfoPtr tsolinfo = (TsolInfoPtr)NULL; |
2535 tsolinfo = GetClientTsolInfo(client); |
2582 tsolinfo = GetClientTsolInfo(client); |
2536 if (system_audit_on && |
2583 if (system_audit_on && |
2537 (tsolinfo->aw_auinfo.ai_mask.am_success || |
2584 (tsolinfo->amask.am_success || tsolinfo->amask.am_failure)) { |
2538 tsolinfo->aw_auinfo.ai_mask.am_failure)) |
2585 |
2539 { |
2586 do_x_audit = TRUE; |
2540 do_x_audit = TRUE; |
2587 auditwrite(AW_PRESELECT, &(tsolinfo->amask), AW_END); |
2541 auditwrite(AW_PRESELECT, &(tsolinfo->aw_auinfo.ai_mask), AW_END); |
2588 |
2542 } |
2589 /* |
2543 return; |
2590 * X audit events start from 9101 in audit_uevents.h. The first two |
2544 /* |
2591 * events are non-protocol ones viz. ClientConnect, mapped to 9101 |
2545 * X audit events start from 9101 in audit_uevents.h. The first two |
2592 * and ClientDisconnect, mapped to 9102. |
2546 * events are non-protocol ones viz. ClientConnect, mapped to 9101 |
2593 * The protocol events are mapped from 9103 onwards in the serial |
2547 * and ClientDisconnect, mapped to 9102. |
2594 * order of their respective protocol opcode, for eg, the protocol |
2548 * The protocol events are mapped from 9103 onwards in the serial |
2595 * UngrabPointer which is has a protocol opcode 27 is mapped to |
2549 * order of their respective protocol opcode, for eg, the protocol |
2596 * 9129 (9102 + 27). |
2550 * UngrabPointer which is has a protocol opcode 27 is mapped to |
2597 * All extension protocols are mapped to a single audit event |
2551 * 9129 (9102 + 27). |
2598 * AUE_XExtension as opcodes are assigined dynamically to these |
2552 * All extension protocols are mapped to a single audit event |
2599 * protocols. We set the extension protocol opcode to be 128, one |
2553 * AUE_XExtension as opcodes are assigined dynamically to these |
2600 * more than the last standard opcode. |
2554 * protocols. We set the extension protocol opcode to be 128, one |
2601 */ |
2555 * more than the last standard opcode. |
2602 protocol = (unsigned int)MAJOROP; |
2556 */ |
2603 if (protocol > X_NoOperation) { |
2557 protocol = (unsigned int)MAJOROP; |
2604 xevent_num = audit_eventsid[MAX_AUDIT_EVENTS - 1][1]; |
2558 if (protocol > X_NoOperation) |
2605 audit_event = TRUE; |
2559 { |
2606 } else { |
2560 xevent_num = audit_eventsid[MAX_AUDIT_EVENTS - 1][1]; |
2607 for (count = 0; count < MAX_AUDIT_EVENTS; count++) { |
2561 audit_event = TRUE; |
2608 if (protocol == audit_eventsid[count][0]) { |
2562 } |
2609 xevent_num = audit_eventsid[count][1]; |
2563 else |
|
2564 { |
|
2565 for (count = 0; count < MAX_AUDIT_EVENTS; count++) |
|
2566 { |
|
2567 if (protocol == audit_eventsid[count][0]) |
|
2568 { |
|
2569 xevent_num = audit_eventsid[count][1]; |
|
2570 audit_event = TRUE; |
2610 audit_event = TRUE; |
2571 break; |
2611 break; |
2572 } |
2612 } |
2573 } |
2613 } |
2574 } |
2614 } |
2575 if (audit_event && |
2615 |
2576 do_x_audit && |
2616 /* |
2577 (au_preselect(xevent_num, |
2617 * Exclude Clients with Trusted Path such as tsoldtwm, tsoldtsession etc |
2578 &(tsolinfo->aw_auinfo.ai_mask), |
2618 * from generating the audit records for X protocols |
2579 AU_PRS_BOTH, |
2619 */ |
2580 AU_PRS_USECACHE) == 1)) |
2620 if (audit_event && do_x_audit && !HasTrustedPath(tsolinfo) && |
2581 { |
2621 (au_preselect(xevent_num, &(tsolinfo->amask), AU_PRS_BOTH, |
2582 tsolinfo->flags |= TSOL_AUDITEVENT; |
2622 AU_PRS_USECACHE) == 1)) { |
2583 status = auditwrite(AW_EVENTNUM, xevent_num, AW_APPEND, AW_END); |
2623 tsolinfo->flags |= TSOL_AUDITEVENT; |
2584 |
2624 status = auditwrite(AW_EVENTNUM, xevent_num, AW_APPEND, AW_END); |
2585 } |
2625 } else { |
2586 else |
2626 tsolinfo->flags &= ~TSOL_AUDITEVENT; |
2587 { |
2627 tsolinfo->flags &= ~TSOL_DOXAUDIT; |
2588 tsolinfo->flags &= ~TSOL_AUDITEVENT; |
2628 } |
2589 tsolinfo->flags &= ~TSOL_DOXAUDIT; |
2629 } |
2590 } |
|
2591 } |
2630 } |
2592 |
2631 |
2593 void |
2632 void |
2594 TsolAuditEnd(ClientPtr client, int result) |
2633 TsolAuditEnd(ClientPtr client, int result) |
2595 { |
2634 { |