#include<krbcred.h>
#include<kherror.h>
#include<strsafe.h>
extern void (__cdecl *pinitialize_krb_error_func)();
extern void (__cdecl *pinitialize_kadm_error_table)();
khm_int32 init_error_funcs()
{
#if 0
if (plsh_LoadKrb4LeashErrorTables)
plsh_LoadKrb4LeashErrorTables(hLeashInst, 0);
#endif
return KHM_ERROR_SUCCESS;
}
khm_int32 exit_error_funcs()
{
return KHM_ERROR_SUCCESS;
}
static long lsh_errno;
static char *err_context;
extern int (*Lcom_err)(LPSTR,long,LPSTR,...);
extern LPSTR (*Lerror_message)(long);
extern LPSTR (*Lerror_table_name)(long);
#ifdef WIN16
#define UNDERSCORE "_"
#else
#define UNDERSCORE
#endif
HWND GetRootParent (HWND Child)
{
HWND Last = NULL;
while (Child)
{
Last = Child;
Child = GetParent (Child);
}
return Last;
}
LPSTR err_describe(LPSTR buf, size_t len, long code)
{
LPSTR cp, com_err_msg;
int offset;
long table_num;
char *etype;
offset = (int) (code & 255);
table_num = code - offset;
com_err_msg = Lerror_message(code);
switch(table_num)
{
case krb_err_base:
case kadm_err_base:
break;
default:
StringCbCopyA(buf, len, com_err_msg);
return buf;
}
cp = buf;
if (table_num == krb_err_base)
switch(offset)
{
case KDC_NAME_EXP:
case KDC_SERVICE_EXP:
case KDC_AUTH_EXP:
case KDC_PKT_VER:
case KDC_P_MKEY_VER:
case KDC_S_MKEY_VER:
case KDC_BYTE_ORDER:
case KDC_PR_N_UNIQUE:
case KDC_NULL_KEY:
case KDC_GEN_ERR:
case INTK_W_NOTALL :
case INTK_PROT :
case INTK_ERR :
com_err_msg = "Something weird happened... try again, and if Leash"
" continues to fail, contact Network Services as listed in the "
"About box.";
break;
case KDC_PR_UNKNOWN:
com_err_msg = "You have entered an unknown username/instance/realm"
" combination.";
break;
case GC_TKFIL :
case GC_NOTKT :
com_err_msg = "Something is wrong with the memory where your "
"tickets are stored. Try exiting Windows and restarting your "
"computer.";
break;
case MK_AP_TGTEXP :
break;
case RD_AP_TIME :
com_err_msg = "Your computer's clock is out of sync with the "
"Kerberos server. Please see the help file about correcting "
"your clock.";
break;
case RD_AP_UNDEC :
case RD_AP_EXP :
case RD_AP_NYV :
case RD_AP_REPEAT :
case RD_AP_NOT_US :
case RD_AP_INCON :
case RD_AP_BADD :
case RD_AP_VERSION :
case RD_AP_MSG_TYPE :
case RD_AP_MODIFIED :
case RD_AP_ORDER :
case RD_AP_UNAUTHOR :
break;
case GT_PW_NULL:
case GT_PW_BADPW:
case GT_PW_PROT:
case GT_PW_KDCERR:
case GT_PW_NULLTKT:
break;
case SKDC_RETRY :
case SKDC_CANT :
com_err_msg = "Cannot contact the kerberos server for the selected realm.";
break;
case INTK_BADPW :
break;
default:
break;
}
else
switch(code)
{
case KADM_INSECURE_PW:
com_err_msg = "You have entered an insecure or weak password.";
default:
break;
}
if(com_err_msg != buf) {
StringCbCopyA(buf, len, com_err_msg);
}
cp = buf + strlen(buf);
*cp++ = '\n';
switch(table_num) {
case krb_err_base:
etype = "Kerberos";
break;
case kadm_err_base:
etype = "Kerberos supplemental";
break;
default:
etype = Lerror_table_name(table_num);
break;
}
StringCbPrintfA((LPSTR) cp, len - (cp-buf), (LPSTR) "(%s error %d"
#ifdef DEBUG_COM_ERR
" (absolute error %ld)"
#endif
")", etype, offset
#ifdef DEBUG_COM_ERR
, code
#endif
);
return (LPSTR)buf;
}