8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-27 17:23:03 +01:00
firebird-mirror/src/auth/trusted/AuthSspi.h
2008-12-05 00:56:15 +00:00

70 lines
1.6 KiB
C++

#ifndef AUTH_SSPI_H
#define AUTH_SSPI_H
#include <firebird.h>
#ifdef TRUSTED_AUTH
#include <../common/classes/fb_string.h>
#include <../common/classes/array.h>
#include <../jrd/ibase.h>
#define SECURITY_WIN32
#include <windows.h>
#include <Security.h>
#include <stdio.h>
class AuthSspi
{
private:
enum {BUFSIZE = 4096};
SecHandle secHndl;
bool hasCredentials;
CtxtHandle ctxtHndl;
bool hasContext;
Firebird::string ctName;
bool wheel;
// Handle of library
static HINSTANCE library;
// declare entries, required from secur32.dll
ACQUIRE_CREDENTIALS_HANDLE_FN_A fAcquireCredentialsHandle;
DELETE_SECURITY_CONTEXT_FN fDeleteSecurityContext;
FREE_CREDENTIALS_HANDLE_FN fFreeCredentialsHandle;
QUERY_CONTEXT_ATTRIBUTES_FN_A fQueryContextAttributes;
FREE_CONTEXT_BUFFER_FN fFreeContextBuffer;
INITIALIZE_SECURITY_CONTEXT_FN_A fInitializeSecurityContext;
ACCEPT_SECURITY_CONTEXT_FN fAcceptSecurityContext;
bool checkAdminPrivilege(PCtxtHandle phContext) const;
bool initEntries();
public:
typedef Firebird::Array<unsigned char> DataHolder;
AuthSspi();
~AuthSspi();
// true when has non-empty security context,
// ready to be sent to the other side
bool isActive() const
{
return hasContext;
}
// prepare security context to be sent to the server (used by client)
bool request(DataHolder& data);
// accept security context from the client (used by server)
bool accept(DataHolder& data);
// returns Windows user name, matching accepted security context
bool getLogin(Firebird::string& login, bool& wh);
};
#endif // TRUSTED_AUTH
#endif // AUTH_SSPI_H