Blame src/windows/kfwlogon/kfwlogon.h

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