137 lines
4.6 KiB
C++
137 lines
4.6 KiB
C++
// GSSAsyncSocksifiedSocket.h: interface for the CAsyncGssSocketLayer CAsyncSocketEx.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Part of this code is copyright 2001 Massachusetts Institute of Technology
|
|
|
|
#if !defined(ASYNCGSSSOCKETLAYER_H__84779FB7_FC01_4743_996B_383E4D7045B7__INCLUDED_)
|
|
#define ASYNCGSSSOCKETLAYER_H__84779FB7_FC01_4743_996B_383E4D7045B7__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
// **************************************************************************************
|
|
// File: globals.h
|
|
// By: Arthur David Leather
|
|
// Created: 08/02/99
|
|
// Copyright @1999 Massachusetts Institute of Technology - All rights reserved.
|
|
// Description: H file for globals.cpp. Contains variables and functions
|
|
// for SoFTP
|
|
//
|
|
// History:
|
|
//
|
|
// MM/DD/YY Inits Description of Change
|
|
// 08/02/99 ADL Original
|
|
// **************************************************************************************
|
|
|
|
|
|
//#include "tlhelp32.h"
|
|
//#include <winsock.h>
|
|
#include "AsyncSocketExLayer.h"
|
|
|
|
#define GSS_INFO 0
|
|
#define GSS_ERROR 1
|
|
#define GSS_SHUTDOWN_COMPLETE 2
|
|
#define GSS_COMMAND 3
|
|
#define GSS_REPLY 4
|
|
#define GSS_AUTHFAILED 5
|
|
#define GSS_AUTHCOMPLETE 6
|
|
|
|
// Defines
|
|
#define GFTPDLL _T("FzGss.dll")
|
|
#define GSSAPI_AUTHENTICATION_SUCCEEDED 1
|
|
|
|
class CGssHelperWindow;
|
|
class CAsyncGssSocketLayer : public CAsyncSocketExLayer
|
|
{
|
|
public:
|
|
CAsyncGssSocketLayer();
|
|
virtual ~CAsyncGssSocketLayer();
|
|
|
|
BOOL InitTransferChannel(CAsyncGssSocketLayer *pSocket);
|
|
|
|
BOOL InitGSS(BOOL bSpawned = FALSE, BOOL promptPassword = FALSE);
|
|
int GetClientAuth(const char* pHost);
|
|
int ProcessCommand(const char *command, const char *args, char *sendme);
|
|
int ProcessCommand(const char *command, const char *args1, const char *args2, char *sendme);
|
|
BOOL AuthSuccessful() const;
|
|
void SetAuthState(int i) {m_gotAuth = i;}
|
|
void SetTransfer(BOOL flag) {m_transfer = flag;}
|
|
BOOL ShutDownComplete();
|
|
BOOL GetUserFromKrbTicket(char *buffer); //Should be 256 chars long
|
|
|
|
protected:
|
|
void ReceiveReply();
|
|
static int CALLBACK Callback(void *pData, int nParam1, int nParam2, int nParam3);
|
|
virtual void Close();
|
|
virtual int Receive(void* lpBuf, int nBufLen, int nFlags = 0);
|
|
virtual int Send(const void* lpBuf, int nBufLen, int nFlags = 0);
|
|
virtual BOOL ShutDown(int nHow /*=sends*/);
|
|
|
|
virtual void OnReceive(int nErrorCode);
|
|
virtual void OnSend(int nErrorCode);
|
|
virtual void OnClose(int nErrorCode);
|
|
|
|
char *m_pSendBuffer;
|
|
int m_nSendBufferLen;
|
|
int m_nSendBufferSize;
|
|
|
|
char *m_pReceiveBuffer;
|
|
unsigned int m_nReceiveBufferLen;
|
|
unsigned int m_nReceiveBufferSize;
|
|
char *m_pDecryptedReceiveBuffer;
|
|
int m_nDecryptedReceiveBufferLen;
|
|
int m_nDecryptedReceiveBufferSize;
|
|
|
|
char m_tmpBuffer[1024*32]; //32KB buffer for temporary data
|
|
|
|
BOOL m_bInitialized;
|
|
|
|
BOOL m_nAwaitingReply; //Used by client authentication, set to true if waiting for a reply from the server
|
|
BOOL m_transfer;
|
|
|
|
int m_nShutDown;
|
|
|
|
BOOL LoadGSSLibrary();
|
|
BOOL UnLoadGSSLibrary();
|
|
|
|
HINSTANCE m_hGSS_API;
|
|
void **m_pData;
|
|
BOOL m_bUseGSS;
|
|
int m_gotAuth; // authorization type
|
|
|
|
// GSS-API
|
|
typedef int (* t_FzGss_ProcessCommand)(void* m_pData, const char* command, char* args, char* sendme);
|
|
typedef int (* t_FzGss_DecryptMessage)(void*, char *msgStr, char* sendme);
|
|
typedef int (* t_FzGss_EncryptMessage)(void*, char *msgStr, char* sendme);
|
|
typedef unsigned long (* t_FzGss_EncryptData)(void*, char *chunk, int length, char* sendme);
|
|
typedef unsigned long (* t_FzGss_DecryptData)(void *pData, char *chunk, int length, char* send);
|
|
typedef BOOL (* t_FzGss_InitGSS)(void*, int (CALLBACK *)(void *, int, int, int), void *, int);
|
|
typedef BOOL (* t_FzGss_KillGSS)(void*);
|
|
typedef int (* t_FzGss_DoClientAuth)(void *pData, char *hostname, const struct sockaddr *myaddr, const struct sockaddr *hisaddr, char protLevel, int gssBufferSize);
|
|
typedef int (* t_FzGss_ProcessReply)(void *pData, char *reply);
|
|
typedef int (* t_FzGss_GetUserFromKrbTicket)(void *pData, char *buffer);
|
|
|
|
t_FzGss_ProcessCommand pFzGss_ProcessCommand;
|
|
t_FzGss_DecryptMessage pFzGss_DecryptMessage;
|
|
t_FzGss_EncryptMessage pFzGss_EncryptMessage;
|
|
t_FzGss_EncryptData pFzGss_EncryptData;
|
|
t_FzGss_DecryptData pFzGss_DecryptData;
|
|
t_FzGss_InitGSS pFzGss_InitGSS;
|
|
t_FzGss_KillGSS pFzGss_KillGSS;
|
|
t_FzGss_DoClientAuth pFzGss_DoClientAuth;
|
|
t_FzGss_ProcessReply pFzGss_ProcessReply;
|
|
t_FzGss_GetUserFromKrbTicket pFzGss_GetUserFromKrbTicket;
|
|
|
|
SOCKADDR m_myAddr;
|
|
SOCKADDR m_hisAddr;
|
|
|
|
BOOL KillGSSData();
|
|
|
|
private:
|
|
int m_nGssNetworkError;
|
|
};
|
|
|
|
|
|
#endif // !defined(ASYNCGSSSOCKETLAYER_H__84779FB7_FC01_4743_996B_383E4D7045B7__INCLUDED_)
|