#include "DebugTool.h"
#include <stdio.h>
short IsDriverOpen(StringPtr driverName);
DCtlHandle FindTheDriver(StringPtr driverName);
void SetSelectorsDebugged (SKClientDebugInfo* inDebugInfo, UInt32 selectors [4], Boolean state);
#define KCLIENTDRIVER "\p.Kerberos"
char selectorNames [][64] = {
"¥¥¥Invalid selector¥¥¥",
"cKrbKillIO",
"cKrbGetLocalRealm",
"cKrbSetLocalRealm",
"cKrbGetRealm",
"cKrbAddRealmMap",
"cKrbDeleteRealmMap",
"cKrbGetNthRealmMap",
"cKrbGetNthServer",
"cKrbAddServerMap",
"cKrbDeleteServerMap",
"cKrbGetNthServerMap",
"cKrbGetNumSessions",
"cKrbGetNthSession",
"cKrbDeleteSession",
"cKrbGetCredentials",
"cKrbAddCredentials",
"cKrbDeleteCredentials",
"cKrbGetNumCredentials",
"cKrbGetNthCredentials",
"cKrbDeleteAllSessions",
"cKrbGetTicketForService",
"cKrbGetAuthForService",
"cKrbCheckServiceResponse",
"cKrbEncrypt",
"cKrbDecrypt",
"cKrbCacheInitialTicket",
"cKrbGetUserName",
"cKrbSetUserName",
"cKrbSetPassword",
"cKrbGetDesPointers",
"cKrbGetErrorText",
"cKrbLogin",
"cKrbSetKey",
"cKrbKerberos",
"cKrbGetNthServerPort",
"cKrbSetNthServerPort",
"cKrbDriverVersion",
"cKrbPasswordToKey",
"cKrbNewClientSession",
"cKrbNewServerSession",
"cKrbDisposeSession",
"cKrbServerVerifyTicket",
"cKrbServerGetReplyTkt",
"cKrbGetServiceKey",
"cKrbAddServiceKey",
"cKrbGetOption",
"cKrbSetOption",
"cKrbAdditionalLogin",
"cKrbControlPanelEnter",
"cKrbControlPanelLeave",
"cKrbGetSessionTimeRemaining",
"cKrbGetSessionUserName",
"cKrbGetNumSpecials",
"cKrbGetNthSpecial",
"cKrbAddSpecial",
"cKrbDeleteSpecial",
"cKrbCheckUnencryptedServiceResponse",
"cKrbVerifyIntegrity",
"cKrbProtectIntegrity",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"accRun (system tickle)",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"¥¥¥Invalid selector¥¥¥",
"cKClientDebugInfo"
};
void PrintAllInfo (void)
{
OSErr err;
SKClientDebugInfo* debugInfo;
err = GetDebugInfo (&debugInfo);
if (err == noErr) {
switch (debugInfo -> version) {
case KClientDebugInfo_Version1:
PrintSelectorsCalled (debugInfo);
break;
default:
printf ("Unknown DebugInfo version returned from KClient.%n");
}
} else {
printf ("Got error %d from KClient when trying to get debug info.", err);
}
}
OSErr GetDebugInfo (SKClientDebugInfo** outDebugInfoPtr)
{
ParamBlockRec pbRec;
short refNum;
OSErr err;
refNum = IsDriverOpen(KCLIENTDRIVER);
if (refNum==0)
return dInstErr;
pbRec.cntrlParam.ioCompletion = nil;
pbRec.cntrlParam.ioVRefNum = 0;
pbRec.cntrlParam.ioCRefNum = refNum;
pbRec.cntrlParam.csCode = cKClientDebugInfo;
(void) PBControlSync( &pbRec );
err = pbRec.cntrlParam.ioResult;
if (err == noErr)
*outDebugInfoPtr = *(SKClientDebugInfo**)(pbRec.cntrlParam.csParam);
return err;
}
void ClearSelectorsCalled (SKClientDebugInfo* inDebugInfo)
{
ClearAllSelectorBits_ (inDebugInfo -> selectorsCalled);
}
void PrintSelectorsCalled (SKClientDebugInfo* inDebugInfo)
{
int i;
printf ("Selectors called:\n");
for (i = 0; i < 128; i++) {
if (TestSelectorBit_ (inDebugInfo -> selectorsCalled, i)) {
printf ("[%3d] %s\n", i, selectorNames [i]);
}
}
}
void PrintSelectorsDebugged (SKClientDebugInfo* inDebugInfo)
{
int i;
printf ("Selectors tripping MacsBug:\n");
for (i = 0; i < 128; i++) {
if (TestSelectorBit_ (inDebugInfo -> selectorsDebugged, i)) {
printf ("[%3d] %s\n", i, selectorNames [i]);
}
}
}
void SetAllSelectorsDebugged (SKClientDebugInfo* inDebugInfo)
{
UInt32 selectors [4];
SetAllSelectorBits_ (selectors);
SetSelectorsDebugged (inDebugInfo, selectors, true);
}
void ClearAllSelectorsDebugged (SKClientDebugInfo* inDebugInfo)
{
UInt32 selectors [4];
SetAllSelectorBits_ (selectors);
SetSelectorsDebugged (inDebugInfo, selectors, false);
}
void SetSelectorDebugged (SKClientDebugInfo* inDebugInfo, UInt32 selector)
{
UInt32 selectors [4];
ClearAllSelectorBits_ (selectors);
SetSelectorBit_ (selectors, selector);
SetSelectorsDebugged (inDebugInfo, selectors, true);
}
void ClearSelectorDebugged (SKClientDebugInfo* inDebugInfo, UInt32 selector)
{
UInt32 selectors [4];
ClearAllSelectorBits_ (selectors);
SetSelectorBit_ (selectors, selector);
SetSelectorsDebugged (inDebugInfo, selectors, false);
}
void SetSelectorsDebugged (SKClientDebugInfo* inDebugInfo, UInt32 selectors [4], Boolean state)
{
int i;
for (i = 0; i < 4; i++) {
if (state) {
inDebugInfo -> selectorsDebugged [i] |= selectors [i];
} else {
inDebugInfo -> selectorsDebugged [i] &= ~(selectors [i]);
}
}
}
#include <Memory.h>
#include <Devices.h>
#include <LowMem.h>
short IsDriverOpen(StringPtr driverName);
DCtlHandle FindTheDriver(StringPtr driverName);
short IsDriverOpen(StringPtr driverName)
{
short dref;
DCtlHandle dceHndl;
dref = 0;
dceHndl = FindTheDriver(driverName);
if (dceHndl != NULL) {
if ((*dceHndl)->dCtlFlags & dOpenedMask) dref = (*dceHndl)->dCtlRefNum;
}
return dref;
}
DCtlHandle FindTheDriver(StringPtr driverName)
{
DCtlHandle EntryHand;
short count;
DCtlHandle *utable;
EntryHand = NULL;
count = GetPtrSize(LMGetUTableBase()) / sizeof(DCtlHandle);
utable = (DCtlEntry ***) LMGetUTableBase();
while (--count >= 0) {
DCtlHandle entry;
entry = *utable++;
if (entry != NULL) {
StringPtr namePtr;
if ((*entry)->dCtlFlags & dRAMBasedMask) {
namePtr = (StringPtr) (*(Handle)((*entry)->dCtlDriver)) + 18;
} else {
namePtr = (StringPtr) ((*entry)->dCtlDriver) + 18;
}
if (RelString(driverName, namePtr, false, true) == 0) {
EntryHand = entry;
break;
}
}
}
return (EntryHand);
}