133 lines
5.3 KiB
C
133 lines
5.3 KiB
C
|
/**
|
||
|
* FreeRDP: A Remote Desktop Protocol Implementation
|
||
|
* Security Support Provider Interface (SSPI)
|
||
|
*
|
||
|
* Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#ifndef FREERDP_AUTH_SSPI_H
|
||
|
#define FREERDP_AUTH_SSPI_H
|
||
|
|
||
|
#include <freerdp/api.h>
|
||
|
#include <freerdp/types.h>
|
||
|
|
||
|
#define SECPKG_ID_NONE 0xFFFF
|
||
|
|
||
|
#define SECPKG_FLAG_INTEGRITY 0x00000001
|
||
|
#define SECPKG_FLAG_PRIVACY 0x00000002
|
||
|
#define SECPKG_FLAG_TOKEN_ONLY 0x00000004
|
||
|
#define SECPKG_FLAG_DATAGRAM 0x00000008
|
||
|
#define SECPKG_FLAG_CONNECTION 0x00000010
|
||
|
#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
|
||
|
#define SECPKG_FLAG_CLIENT_ONLY 0x00000040
|
||
|
#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
|
||
|
#define SECPKG_FLAG_IMPERSONATION 0x00000100
|
||
|
#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
|
||
|
#define SECPKG_FLAG_STREAM 0x00000400
|
||
|
#define SECPKG_FLAG_NEGOTIABLE 0x00000800
|
||
|
#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
|
||
|
#define SECPKG_FLAG_LOGON 0x00002000
|
||
|
#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
|
||
|
#define SECPKG_FLAG_FRAGMENT 0x00008000
|
||
|
#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
|
||
|
#define SECPKG_FLAG_DELEGATION 0x00020000
|
||
|
#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
|
||
|
#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
|
||
|
#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
|
||
|
#define SECPKG_FLAG_NEGOTIABLE2 0x00200000
|
||
|
|
||
|
typedef uint32 SECURITY_STATUS;
|
||
|
|
||
|
#define SEC_E_OK 0x00000000
|
||
|
#define SEC_E_INSUFFICIENT_MEMORY 0x80090300
|
||
|
#define SEC_E_INVALID_HANDLE 0x80090301
|
||
|
#define SEC_E_SECPKG_NOT_FOUND 0x80090305
|
||
|
|
||
|
struct _SEC_PKG_INFO
|
||
|
{
|
||
|
uint32 fCapabilities;
|
||
|
uint16 wVersion;
|
||
|
uint16 wRPCID;
|
||
|
uint32 cbMaxToken;
|
||
|
char* Name;
|
||
|
char* Comment;
|
||
|
};
|
||
|
typedef struct _SEC_PKG_INFO SEC_PKG_INFO;
|
||
|
|
||
|
typedef SECURITY_STATUS (*ENUMERATE_SECURITY_PACKAGES_FN)(uint32* pcPackages, SEC_PKG_INFO** ppPackageInfo);
|
||
|
typedef SECURITY_STATUS (*QUERY_CREDENTIAL_ATTRIBUTES_FN)(void);
|
||
|
typedef SECURITY_STATUS (*ACQUIRE_CREDENTIALS_HANDLE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*FREE_CREDENTIALS_HANDLE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*INITIALIZE_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*ACCEPT_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*COMPLETE_AUTH_TOKEN_FN)(void);
|
||
|
typedef SECURITY_STATUS (*DELETE_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*APPLY_CONTROL_TOKEN_FN)(void);
|
||
|
typedef SECURITY_STATUS (*QUERY_CONTEXT_ATTRIBUTES_FN)(void);
|
||
|
typedef SECURITY_STATUS (*IMPERSONATE_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*REVERT_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*MAKE_SIGNATURE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*VERIFY_SIGNATURE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*FREE_CONTEXT_BUFFER_FN)(void* pvContextBuffer);
|
||
|
typedef SECURITY_STATUS (*QUERY_SECURITY_PACKAGE_INFO_FN)(char* pszPackageName, SEC_PKG_INFO** ppPackageInfo);
|
||
|
typedef SECURITY_STATUS (*EXPORT_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*IMPORT_SECURITY_CONTEXT_FN)(void);
|
||
|
typedef SECURITY_STATUS (*ADD_CREDENTIALS_FN)(void);
|
||
|
typedef SECURITY_STATUS (*QUERY_SECURITY_CONTEXT_TOKEN_FN)(void);
|
||
|
typedef SECURITY_STATUS (*ENCRYPT_MESSAGE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*DECRYPT_MESSAGE_FN)(void);
|
||
|
typedef SECURITY_STATUS (*SET_CONTEXT_ATTRIBUTES_FN)(void);
|
||
|
|
||
|
struct _SECURITY_FUNCTION_TABLE
|
||
|
{
|
||
|
uint32 dwVersion;
|
||
|
ENUMERATE_SECURITY_PACKAGES_FN EnumerateSecurityPackages;
|
||
|
void* Reserved1;
|
||
|
QUERY_CREDENTIAL_ATTRIBUTES_FN QueryCredentialsAttributes;
|
||
|
ACQUIRE_CREDENTIALS_HANDLE_FN AcquireCredentialsHandle;
|
||
|
FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
|
||
|
void* Reserved2;
|
||
|
INITIALIZE_SECURITY_CONTEXT_FN InitializeSecurityContext;
|
||
|
ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
|
||
|
COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
|
||
|
DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
|
||
|
APPLY_CONTROL_TOKEN_FN ApplyControlToken;
|
||
|
QUERY_CONTEXT_ATTRIBUTES_FN QueryContextAttributes;
|
||
|
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 QuerySecurityPackageInfo;
|
||
|
void* Reserved3;
|
||
|
void* Reserved4;
|
||
|
EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
|
||
|
IMPORT_SECURITY_CONTEXT_FN ImportSecurityContext;
|
||
|
ADD_CREDENTIALS_FN AddCredentials;
|
||
|
void* Reserved8;
|
||
|
QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
|
||
|
ENCRYPT_MESSAGE_FN EncryptMessage;
|
||
|
DECRYPT_MESSAGE_FN DecryptMessage;
|
||
|
SET_CONTEXT_ATTRIBUTES_FN SetContextAttributes;
|
||
|
};
|
||
|
typedef struct _SECURITY_FUNCTION_TABLE SECURITY_FUNCTION_TABLE;
|
||
|
|
||
|
SECURITY_FUNCTION_TABLE* InitSecurityInterface(void);
|
||
|
FREERDP_API SECURITY_STATUS EnumerateSecurityPackages(uint32* pcPackages, SEC_PKG_INFO** ppPackageInfo);
|
||
|
FREERDP_API SECURITY_STATUS QuerySecurityPackageInfo(char* pszPackageName, SEC_PKG_INFO** ppPackageInfo);
|
||
|
FREERDP_API SECURITY_STATUS FreeContextBuffer(void* pvContextBuffer);
|
||
|
|
||
|
#endif /* FREERDP_AUTH_SSPI_H */
|