diff -r 000000000000 -r 76b1f169d9fe mingw-5.1.4/win32/include/sspi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mingw-5.1.4/win32/include/sspi.h Fri Apr 03 17:16:45 2009 +0100 @@ -0,0 +1,338 @@ +#ifndef _SSPI_H +#define _SSPI_H +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define SECPKG_CRED_INBOUND 1 +#define SECPKG_CRED_OUTBOUND 2 +#define SECPKG_CRED_BOTH (SECPKG_CRED_OUTBOUND|SECPKG_CRED_INBOUND) +#define SECPKG_CRED_ATTR_NAMES 1 + +#define SECPKG_FLAG_INTEGRITY 1 +#define SECPKG_FLAG_PRIVACY 2 +#define SECPKG_FLAG_TOKEN_ONLY 4 +#define SECPKG_FLAG_DATAGRAM 8 +#define SECPKG_FLAG_CONNECTION 16 +#define SECPKG_FLAG_MULTI_REQUIRED 32 +#define SECPKG_FLAG_CLIENT_ONLY 64 +#define SECPKG_FLAG_EXTENDED_ERROR 128 +#define SECPKG_FLAG_IMPERSONATION 256 +#define SECPKG_FLAG_ACCEPT_WIN32_NAME 512 +#define SECPKG_FLAG_STREAM 1024 + +#define SECPKG_ATTR_AUTHORITY 6 +#define SECPKG_ATTR_CONNECTION_INFO 90 +#define SECPKG_ATTR_ISSUER_LIST 80 +#define SECPKG_ATTR_ISSUER_LIST_EX 89 +#define SECPKG_ATTR_KEY_INFO 5 +#define SECPKG_ATTR_LIFESPAN 2 +#define SECPKG_ATTR_LOCAL_CERT_CONTEXT 84 +#define SECPKG_ATTR_LOCAL_CRED 82 +#define SECPKG_ATTR_NAMES 1 +#define SECPKG_ATTR_PROTO_INFO 7 +#define SECPKG_ATTR_REMOTE_CERT_CONTEXT 83 +#define SECPKG_ATTR_REMOTE_CRED 81 +#define SECPKG_ATTR_SIZES 0 +#define SECPKG_ATTR_STREAM_SIZES 4 + +#define SECBUFFER_EMPTY 0 +#define SECBUFFER_DATA 1 +#define SECBUFFER_TOKEN 2 +#define SECBUFFER_PKG_PARAMS 3 +#define SECBUFFER_MISSING 4 +#define SECBUFFER_EXTRA 5 +#define SECBUFFER_STREAM_TRAILER 6 +#define SECBUFFER_STREAM_HEADER 7 +#define SECBUFFER_PADDING 9 +#define SECBUFFER_STREAM 10 +#define SECBUFFER_READONLY 0x80000000 +#define SECBUFFER_ATTRMASK 0xf0000000 + +#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider" +#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider" +#define SECBUFFER_VERSION 0 + +typedef struct _SecHandle { + ULONG_PTR dwLower; + ULONG_PTR dwUpper; +} SecHandle, *PSecHandle; +typedef struct _SecBuffer { + ULONG cbBuffer; + ULONG BufferType; + PVOID pvBuffer; +} SecBuffer, *PSecBuffer; +typedef SecHandle CredHandle; +typedef PSecHandle PCredHandle; +typedef SecHandle CtxtHandle; +typedef PSecHandle PCtxtHandle; +typedef struct _SECURITY_INTEGER { + unsigned long LowPart; + long HighPart; +} SECURITY_INTEGER; +typedef SECURITY_INTEGER TimeStamp, *PTimeStamp; +typedef struct _SecBufferDesc { + ULONG ulVersion; + ULONG cBuffers; + PSecBuffer pBuffers; +} SecBufferDesc, *PSecBufferDesc; +typedef struct _SecPkgContext_StreamSizes { + ULONG cbHeader; + ULONG cbTrailer; + ULONG cbMaximumMessage; + ULONG cBuffers; + ULONG cbBlockSize; +} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes; +typedef struct _SecPkgContext_Sizes { + ULONG cbMaxToken; + ULONG cbMaxSignature; + ULONG cbBlockSize; + ULONG cbSecurityTrailer; +} SecPkgContext_Sizes, *PSecPkgContext_Sizes; +typedef struct _SecPkgContext_AuthorityW { + SEC_WCHAR* sAuthorityName; +} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW; +typedef struct _SecPkgContext_AuthorityA { + SEC_CHAR* sAuthorityName; +} SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA; +typedef struct _SecPkgContext_KeyInfoW { + SEC_WCHAR* sSignatureAlgorithmName; + SEC_WCHAR* sEncryptAlgorithmName; + ULONG KeySize; + ULONG SignatureAlgorithm; + ULONG EncryptAlgorithm; +} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW; +typedef struct _SecPkgContext_KeyInfoA { + SEC_CHAR* sSignatureAlgorithmName; + SEC_CHAR* sEncryptAlgorithmName; + ULONG KeySize; + ULONG SignatureAlgorithm; + ULONG EncryptAlgorithm; +} SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA; +typedef struct _SecPkgContext_LifeSpan { + TimeStamp tsStart; + TimeStamp tsExpiry; +} SecPkgContext_LifeSpan, *PSecPkgContext_LifeSpan; +typedef struct _SecPkgContext_NamesW { + SEC_WCHAR* sUserName; +} SecPkgContext_NamesW, *PSecPkgContext_NamesW; +typedef struct _SecPkgContext_NamesA { + SEC_CHAR* sUserName; +} SecPkgContext_NamesA, *PSecPkgContext_NamesA; +typedef struct _SecPkgInfoW { + ULONG fCapabilities; + USHORT wVersion; + USHORT wRPCID; + ULONG cbMaxToken; + SEC_WCHAR* Name; + SEC_WCHAR* Comment; +} SecPkgInfoW, *PSecPkgInfoW; +typedef struct _SecPkgInfoA { + ULONG fCapabilities; + USHORT wVersion; + USHORT wRPCID; + ULONG cbMaxToken; + SEC_CHAR* Name; + SEC_CHAR* Comment; +} SecPkgInfoA, *PSecPkgInfoA; +/* supported only in win2k+, so it should be a PSecPkgInfoW */ +/* PSDK does not say it has ANSI/Unicode versions */ +typedef struct _SecPkgContext_PackageInfo { + PSecPkgInfoW PackageInfo; +} SecPkgContext_PackageInfo, *PSecPkgContext_PackageInfo; +typedef struct _SecPkgCredentials_NamesW { + SEC_WCHAR* sUserName; +} SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW; +typedef struct _SecPkgCredentials_NamesA { + SEC_CHAR* sUserName; +} SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA; + +/* TODO: missing type in SDK */ +typedef void (*SEC_GET_KEY_FN)(); + +typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,PSecPkgInfoW*); +typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,PSecPkgInfoA*); +typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,ULONG,PVOID); +typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,ULONG,PVOID); +typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); +typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); +typedef SECURITY_STATUS (WINAPI *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle); +typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_W)(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_A)(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +typedef SECURITY_STATUS (WINAPI *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +typedef SECURITY_STATUS (WINAPI *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,PSecBufferDesc); +typedef SECURITY_STATUS (WINAPI *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle); +typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN_W)(PCtxtHandle,PSecBufferDesc); +typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN_A)(PCtxtHandle,PSecBufferDesc); +typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,ULONG,PVOID); +typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,ULONG,PVOID); +typedef SECURITY_STATUS (WINAPI *IMPERSONATE_SECURITY_CONTEXT_FN)(PCtxtHandle); +typedef SECURITY_STATUS (WINAPI *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle); +typedef SECURITY_STATUS (WINAPI *MAKE_SIGNATURE_FN)(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); +typedef SECURITY_STATUS (WINAPI *VERIFY_SIGNATURE_FN)(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); +typedef SECURITY_STATUS (WINAPI *FREE_CONTEXT_BUFFER_FN)(PVOID); +typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR*,PSecPkgInfoA*); +typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_W)(SEC_WCHAR*,PSecPkgInfoW*); +typedef SECURITY_STATUS (WINAPI *ENCRYPT_MESSAGE_FN)(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); +typedef SECURITY_STATUS (WINAPI *DECRYPT_MESSAGE_FN)(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); + +/* No, it really is FreeCredentialsHandle, see the thread beginning + * http://sourceforge.net/mailarchive/message.php?msg_id=4321080 for a + * discovery discussion. */ +typedef struct _SECURITY_FUNCTION_TABLEW { + unsigned long dwVersion; + ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW; + QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW; + ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW; + FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; + void SEC_FAR* Reserved2; + INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA; + ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; + COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; + DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; + APPLY_CONTROL_TOKEN_FN_W ApplyControlTokenW; + QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW; + IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; + REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; + MAKE_SIGNATURE_FN MakeSignature; + VERIFY_SIGNATURE_FN VerifySignature; + FREE_CONTEXT_BUFFER_FN FreeContextBuffer; + QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA; + void SEC_FAR* Reserved3; + void SEC_FAR* Reserved4; + void SEC_FAR* Unknown1; + void SEC_FAR* Unknown2; + void SEC_FAR* Unknown3; + void SEC_FAR* Unknown4; + void SEC_FAR* Unknown5; + ENCRYPT_MESSAGE_FN EncryptMessage; + DECRYPT_MESSAGE_FN DecryptMessage; +} SecurityFunctionTableW, *PSecurityFunctionTableW; +typedef struct _SECURITY_FUNCTION_TABLEA { + unsigned long dwVersion; + ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA; + QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA; + ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA; + FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; + void SEC_FAR* Reserved2; + INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA; + ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; + COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; + DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; + APPLY_CONTROL_TOKEN_FN_A ApplyControlTokenA; + QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA; + IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; + REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; + MAKE_SIGNATURE_FN MakeSignature; + VERIFY_SIGNATURE_FN VerifySignature; + FREE_CONTEXT_BUFFER_FN FreeContextBuffer; + QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA; + void SEC_FAR* Reserved3; + void SEC_FAR* Reserved4; + void SEC_FAR* Unknown1; + void SEC_FAR* Unknown2; + void SEC_FAR* Unknown3; + void SEC_FAR* Unknown4; + void SEC_FAR* Unknown5; + ENCRYPT_MESSAGE_FN EncryptMessage; + DECRYPT_MESSAGE_FN DecryptMessage; +} SecurityFunctionTableA, *PSecurityFunctionTableA; +typedef PSecurityFunctionTableA (WINAPI *INIT_SECURITY_INTERFACE_A)(VOID); +typedef PSecurityFunctionTableW (WINAPI *INIT_SECURITY_INTERFACE_W)(VOID); + +SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle); +SECURITY_STATUS WINAPI EnumerateSecurityPackagesA(PULONG,PSecPkgInfoA*); +SECURITY_STATUS WINAPI EnumerateSecurityPackagesW(PULONG,PSecPkgInfoW*); +SECURITY_STATUS WINAPI AcquireCredentialsHandleA(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); +SECURITY_STATUS WINAPI AcquireCredentialsHandleW(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); +SECURITY_STATUS WINAPI AcceptSecurityContext(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +SECURITY_STATUS WINAPI InitializeSecurityContextA(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); +SECURITY_STATUS WINAPI FreeContextBuffer(PVOID); +SECURITY_STATUS WINAPI QueryContextAttributesA(PCtxtHandle,ULONG,PVOID); +SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle,ULONG,PVOID); +SECURITY_STATUS WINAPI QueryCredentialsAttributesA(PCredHandle,ULONG,PVOID); +SECURITY_STATUS WINAPI QueryCredentialsAttributesW(PCredHandle,ULONG,PVOID); +SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); +SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); +SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle); +SECURITY_STATUS WINAPI CompleteAuthToken(PCtxtHandle,PSecBufferDesc); +SECURITY_STATUS WINAPI ApplyControlTokenA(PCtxtHandle,PSecBufferDesc); +SECURITY_STATUS WINAPI ApplyControlTokenW(PCtxtHandle,PSecBufferDesc); +SECURITY_STATUS WINAPI ImpersonateSecurityContext(PCtxtHandle); +SECURITY_STATUS WINAPI RevertSecurityContext(PCtxtHandle); +SECURITY_STATUS WINAPI MakeSignature(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); +SECURITY_STATUS WINAPI VerifySignature(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); +SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR*,PSecPkgInfoA*); +SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(SEC_WCHAR*,PSecPkgInfoW*); +PSecurityFunctionTableA WINAPI InitSecurityInterfaceA(VOID); +PSecurityFunctionTableW WINAPI InitSecurityInterfaceW(VOID); + +#ifdef UNICODE +#define UNISP_NAME UNISP_NAME_W +#define SecPkgInfo SecPkgInfoW +#define PSecPkgInfo PSecPkgInfoW +#define SecPkgCredentials_Names SecPkgCredentials_NamesW +#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW +#define SecPkgContext_Authority SecPkgContext_AuthorityW +#define PSecPkgContext_Authority PSecPkgContext_AuthorityW +#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW +#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW +#define SecPkgContext_Names SecPkgContext_NamesW +#define PSecPkgContext_Names PSecPkgContext_NamesW +#define SecurityFunctionTable SecurityFunctionTableW +#define PSecurityFunctionTable PSecurityFunctionTableW +#define AcquireCredentialsHandle AcquireCredentialsHandleW +#define EnumerateSecurityPackages EnumerateSecurityPackagesW +#define InitializeSecurityContext InitializeSecurityContextW +#define QueryContextAttributes QueryContextAttributesW +#define QueryCredentialsAttributes QueryCredentialsAttributesW +#define QuerySecurityPackageInfo QuerySecurityPackageInfoW +#define ApplyControlToken ApplyControlTokenW +#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W +#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W +#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W +#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W +#define APPLY_CONTROL_TOKEN_FN APPLY_CONTROL_TOKEN_FN_W +#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W +#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W +#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W +#else +#define UNISP_NAME UNISP_NAME_A +#define SecPkgInfo SecPkgInfoA +#define PSecPkgInfo PSecPkgInfoA +#define SecPkgCredentials_Names SecPkgCredentials_NamesA +#define PSecPkgCredentials_Names PSecPkgCredentials_NamesA +#define SecPkgContext_Authority SecPkgContext_AuthorityA +#define PSecPkgContext_Authority PSecPkgContext_AuthorityA +#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoA +#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoA +#define SecPkgContext_Names SecPkgContext_NamesA +#define PSecPkgContext_Names PSecPkgContext_NamesA +#define SecurityFunctionTable SecurityFunctionTableA +#define PSecurityFunctionTable PSecurityFunctionTableA +#define AcquireCredentialsHandle AcquireCredentialsHandleA +#define EnumerateSecurityPackages EnumerateSecurityPackagesA +#define InitializeSecurityContext InitializeSecurityContextA +#define QueryContextAttributes QueryContextAttributesA +#define QueryCredentialsAttributes QueryCredentialsAttributesA +#define QuerySecurityPackageInfo QuerySecurityPackageInfoA +#define ApplyControlToken ApplyControlTokenA +#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_A +#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_A +#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_A +#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_A +#define APPLY_CONTROL_TOKEN_FN APPLY_CONTROL_TOKEN_FN_A +#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_A +#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_A +#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_A +#endif + +#ifdef __cplusplus +} +#endif +#endif