|
Packit |
fd8b60 |
/*
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Copyright 2005,2006 by the Massachusetts Institute of Technology
|
|
Packit |
fd8b60 |
Copyright 2007 by Secure Endpoints Inc.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
All rights reserved.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
fd8b60 |
documentation for any purpose and without fee is hereby granted,
|
|
Packit |
fd8b60 |
provided that the above copyright notice appear in all copies and that
|
|
Packit |
fd8b60 |
both that copyright notice and this permission notice appear in
|
|
Packit |
fd8b60 |
supporting documentation, and that the name of the Massachusetts
|
|
Packit |
fd8b60 |
Institute of Technology (M.I.T.) not be used in advertising or publicity
|
|
Packit |
fd8b60 |
pertaining to distribution of the software without specific, written
|
|
Packit |
fd8b60 |
prior permission.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
|
Packit |
fd8b60 |
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
|
Packit |
fd8b60 |
M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
|
Packit |
fd8b60 |
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
Packit |
fd8b60 |
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|
Packit |
fd8b60 |
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
|
Packit |
fd8b60 |
SOFTWARE.
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* We only support VC 1200 and above anyway */
|
|
Packit |
fd8b60 |
#pragma once
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* _WIN32_WINNT must be 0x0501 or greater to pull in definition of
|
|
Packit |
fd8b60 |
* all required LSA data types when the Vista SDK NtSecAPI.h is used.
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
#ifndef _WIN32_WINNT
|
|
Packit |
fd8b60 |
#define _WIN32_WINNT 0x0501
|
|
Packit |
fd8b60 |
#else
|
|
Packit |
fd8b60 |
#if _WIN32_WINNT < 0x0501
|
|
Packit |
fd8b60 |
#undef _WIN32_WINNT
|
|
Packit |
fd8b60 |
#define _WIN32_WINNT 0x0501
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#include <windows.h>
|
|
Packit |
fd8b60 |
#include <npapi.h>
|
|
Packit |
fd8b60 |
#define SECURITY_WIN32
|
|
Packit |
fd8b60 |
#include <security.h>
|
|
Packit |
fd8b60 |
#include <ntsecapi.h>
|
|
Packit |
fd8b60 |
#include <tchar.h>
|
|
Packit |
fd8b60 |
#include <strsafe.h>
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef int errcode_t;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#include <loadfuncs-lsa.h>
|
|
Packit |
fd8b60 |
#include <krb5.h>
|
|
Packit |
fd8b60 |
#include <loadfuncs-com_err.h>
|
|
Packit |
fd8b60 |
#include <loadfuncs-krb5.h>
|
|
Packit |
fd8b60 |
#include <loadfuncs-profile.h>
|
|
Packit |
fd8b60 |
#include <loadfuncs-leash.h>
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
// service definitions
|
|
Packit |
fd8b60 |
#define SERVICE_DLL "advapi32.dll"
|
|
Packit |
fd8b60 |
typedef SC_HANDLE (WINAPI *FP_OpenSCManagerA)(char *, char *, DWORD);
|
|
Packit |
fd8b60 |
typedef SC_HANDLE (WINAPI *FP_OpenServiceA)(SC_HANDLE, char *, DWORD);
|
|
Packit |
fd8b60 |
typedef BOOL (WINAPI *FP_QueryServiceStatus)(SC_HANDLE, LPSERVICE_STATUS);
|
|
Packit |
fd8b60 |
typedef BOOL (WINAPI *FP_CloseServiceHandle)(SC_HANDLE);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* In order to avoid including the private CCAPI headers */
|
|
Packit |
fd8b60 |
typedef int cc_int32;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#define CC_API_VER_1 1
|
|
Packit |
fd8b60 |
#define CC_API_VER_2 2
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#define CCACHE_API cc_int32
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/*
|
|
Packit |
fd8b60 |
** The Official Error Codes
|
|
Packit |
fd8b60 |
*/
|
|
Packit |
fd8b60 |
#define CC_NOERROR 0
|
|
Packit |
fd8b60 |
#define CC_BADNAME 1
|
|
Packit |
fd8b60 |
#define CC_NOTFOUND 2
|
|
Packit |
fd8b60 |
#define CC_END 3
|
|
Packit |
fd8b60 |
#define CC_IO 4
|
|
Packit |
fd8b60 |
#define CC_WRITE 5
|
|
Packit |
fd8b60 |
#define CC_NOMEM 6
|
|
Packit |
fd8b60 |
#define CC_FORMAT 7
|
|
Packit |
fd8b60 |
#define CC_LOCKED 8
|
|
Packit |
fd8b60 |
#define CC_BAD_API_VERSION 9
|
|
Packit |
fd8b60 |
#define CC_NO_EXIST 10
|
|
Packit |
fd8b60 |
#define CC_NOT_SUPP 11
|
|
Packit |
fd8b60 |
#define CC_BAD_PARM 12
|
|
Packit |
fd8b60 |
#define CC_ERR_CACHE_ATTACH 13
|
|
Packit |
fd8b60 |
#define CC_ERR_CACHE_RELEASE 14
|
|
Packit |
fd8b60 |
#define CC_ERR_CACHE_FULL 15
|
|
Packit |
fd8b60 |
#define CC_ERR_CRED_VERSION 16
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
enum {
|
|
Packit |
fd8b60 |
CC_CRED_VUNKNOWN = 0, // For validation
|
|
Packit |
fd8b60 |
/* CC_CRED_V4 = 1, */
|
|
Packit |
fd8b60 |
CC_CRED_V5 = 2,
|
|
Packit |
fd8b60 |
CC_CRED_VMAX = 3 // For validation
|
|
Packit |
fd8b60 |
};
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
typedef struct opaque_dll_control_block_type* apiCB;
|
|
Packit |
fd8b60 |
typedef struct _infoNC {
|
|
Packit |
fd8b60 |
char* name;
|
|
Packit |
fd8b60 |
char* principal;
|
|
Packit |
fd8b60 |
cc_int32 vers;
|
|
Packit |
fd8b60 |
} infoNC;
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
TYPEDEF_FUNC(
|
|
Packit |
fd8b60 |
CCACHE_API,
|
|
Packit |
fd8b60 |
CALLCONV_C,
|
|
Packit |
fd8b60 |
cc_initialize,
|
|
Packit |
fd8b60 |
(
|
|
Packit |
fd8b60 |
apiCB** cc_ctx, // < DLL's primary control structure.
|
|
Packit |
fd8b60 |
// returned here, passed everywhere else
|
|
Packit |
fd8b60 |
cc_int32 api_version, // > ver supported by caller (use CC_API_VER_1)
|
|
Packit |
fd8b60 |
cc_int32* api_supported, // < if ~NULL, max ver supported by DLL
|
|
Packit |
fd8b60 |
const char** vendor // < if ~NULL, vendor name in read only C string
|
|
Packit |
fd8b60 |
)
|
|
Packit |
fd8b60 |
);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
TYPEDEF_FUNC(
|
|
Packit |
fd8b60 |
CCACHE_API,
|
|
Packit |
fd8b60 |
CALLCONV_C,
|
|
Packit |
fd8b60 |
cc_shutdown,
|
|
Packit |
fd8b60 |
(
|
|
Packit |
fd8b60 |
apiCB** cc_ctx // <> DLL's primary control structure. NULL after
|
|
Packit |
fd8b60 |
)
|
|
Packit |
fd8b60 |
);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
TYPEDEF_FUNC(
|
|
Packit |
fd8b60 |
CCACHE_API,
|
|
Packit |
fd8b60 |
CALLCONV_C,
|
|
Packit |
fd8b60 |
cc_get_NC_info,
|
|
Packit |
fd8b60 |
(
|
|
Packit |
fd8b60 |
apiCB* cc_ctx, // > DLL's primary control structure
|
|
Packit |
fd8b60 |
struct _infoNC*** ppNCi // < (NULL before call) null terminated,
|
|
Packit |
fd8b60 |
// list of a structs (free via cc_free_infoNC())
|
|
Packit |
fd8b60 |
)
|
|
Packit |
fd8b60 |
);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
TYPEDEF_FUNC(
|
|
Packit |
fd8b60 |
CCACHE_API,
|
|
Packit |
fd8b60 |
CALLCONV_C,
|
|
Packit |
fd8b60 |
cc_free_NC_info,
|
|
Packit |
fd8b60 |
(
|
|
Packit |
fd8b60 |
apiCB* cc_ctx,
|
|
Packit |
fd8b60 |
struct _infoNC*** ppNCi // < free list of structs returned by
|
|
Packit |
fd8b60 |
// cc_get_cache_names(). set to NULL on return
|
|
Packit |
fd8b60 |
)
|
|
Packit |
fd8b60 |
);
|
|
Packit |
fd8b60 |
/* End private ccapiv2 headers */
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#ifdef _WIN64
|
|
Packit |
fd8b60 |
#define CCAPI_DLL "krbcc64.dll"
|
|
Packit |
fd8b60 |
#else
|
|
Packit |
fd8b60 |
#define CCAPI_DLL "krbcc32.dll"
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
/* */
|
|
Packit |
fd8b60 |
#define MAX_USERNAME_LENGTH 256
|
|
Packit |
fd8b60 |
#define MAX_PASSWORD_LENGTH 256
|
|
Packit |
fd8b60 |
#define MAX_DOMAIN_LENGTH 256
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#define KFW_LOGON_EVENT_NAME TEXT("MIT Kerberos")
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
BOOLEAN APIENTRY DllEntryPoint(HANDLE dll, DWORD reason, PVOID reserved);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
DWORD APIENTRY NPGetCaps(DWORD index);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
DWORD APIENTRY NPLogonNotify(
|
|
Packit |
fd8b60 |
PLUID lpLogonId,
|
|
Packit |
fd8b60 |
LPCWSTR lpAuthentInfoType,
|
|
Packit |
fd8b60 |
LPVOID lpAuthentInfo,
|
|
Packit |
fd8b60 |
LPCWSTR lpPreviousAuthentInfoType,
|
|
Packit |
fd8b60 |
LPVOID lpPreviousAuthentInfo,
|
|
Packit |
fd8b60 |
LPWSTR lpStationName,
|
|
Packit |
fd8b60 |
LPVOID StationHandle,
|
|
Packit |
fd8b60 |
LPWSTR *lpLogonScript);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
DWORD APIENTRY NPPasswordChangeNotify(
|
|
Packit |
fd8b60 |
LPCWSTR lpAuthentInfoType,
|
|
Packit |
fd8b60 |
LPVOID lpAuthentInfo,
|
|
Packit |
fd8b60 |
LPCWSTR lpPreviousAuthentInfoType,
|
|
Packit |
fd8b60 |
LPVOID lpPreviousAuthentInfo,
|
|
Packit |
fd8b60 |
LPWSTR lpStationName,
|
|
Packit |
fd8b60 |
LPVOID StationHandle,
|
|
Packit |
fd8b60 |
DWORD dwChangeInfo);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#ifdef __cplusplus
|
|
Packit |
fd8b60 |
extern "C" {
|
|
Packit |
fd8b60 |
#endif
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
void DebugEvent0(char *a);
|
|
Packit |
fd8b60 |
void DebugEvent(char *b,...);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
DWORD MapAuthError(DWORD code);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
static BOOL WINAPI UnicodeStringToANSI(UNICODE_STRING uInputString, LPSTR lpszOutputString, int nOutStringLen);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
int KFW_is_available(void);
|
|
Packit |
fd8b60 |
int KFW_get_cred( char * username, char * password, int lifetime, char ** reasonP );
|
|
Packit |
fd8b60 |
void KFW_copy_cache_to_system_file(const char * user, const char * filename);
|
|
Packit |
fd8b60 |
int KFW_destroy_tickets_for_principal(char * user);
|
|
Packit |
fd8b60 |
int KFW_set_ccache_dacl(char *filename, HANDLE hUserToken);
|
|
Packit |
fd8b60 |
int KFW_set_ccache_dacl_with_user_sid(char *filename, PSID pUserSID);
|
|
Packit |
fd8b60 |
int KFW_obtain_user_temp_directory(HANDLE hUserToken, char *newfilename, int size);
|
|
Packit |
fd8b60 |
void KFW_cleanup_orphaned_caches(void);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
void CALLBACK LogonEventHandlerA(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
|
|
Packit |
fd8b60 |
|
|
Packit |
fd8b60 |
#ifdef __cplusplus
|
|
Packit |
fd8b60 |
}
|
|
Packit |
fd8b60 |
#endif
|