mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
7.1 KiB
240 lines
7.1 KiB
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
ftpconf.hxx
|
|
|
|
Abstract:
|
|
|
|
This file defines functions and types required for
|
|
FTP server configuration.
|
|
|
|
Author:
|
|
|
|
Murali R. Krishnan ( MuraliK ) 21-March-1995
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
# ifndef _FTPCONF_HXX_
|
|
# define _FTPCONF_HXX_
|
|
|
|
|
|
|
|
//
|
|
// Include Types declaration
|
|
//
|
|
|
|
/***********************************************************
|
|
* Type Definitions
|
|
************************************************************/
|
|
|
|
# include "type.hxx"
|
|
|
|
typedef LPUSER_DATA PICLIENT_CONNECTION;
|
|
|
|
|
|
|
|
typedef BOOL (*PFN_CLIENT_CONNECTION_ENUM)( PICLIENT_CONNECTION pcc,
|
|
LPVOID pContext);
|
|
|
|
|
|
// specifies the size of cache block for padding ==> to avoid false sharing
|
|
# define MAX_CACHE_BLOCK_SIZE ( 64)
|
|
|
|
|
|
/**********************************************************
|
|
* FTP_SERVER_CONFIG
|
|
* o Includes all local configuration information for FTP server.
|
|
*
|
|
* At startup configuration is read from registries
|
|
* or used from the default configuration encoded in the program.
|
|
*
|
|
* Generally speaking, we can put all the values here as
|
|
* global variables. But that would just complicate
|
|
* code and lead to too many globals.
|
|
* Defining this class for encapsulating configuration data
|
|
* makes code more simple and maintainable.
|
|
*
|
|
**********************************************************/
|
|
|
|
class FTP_SERVER_CONFIG {
|
|
|
|
private:
|
|
|
|
//
|
|
// Connections related data
|
|
//
|
|
// m_cMaxConnections: max connections permitted by config
|
|
// m_cCurrentConnections: count of currently connected users
|
|
// m_cMaxCurrentConnections: max connections seen in this session
|
|
// Always m_cCurrentConnections
|
|
// <= m_cMaxCurrentConnections
|
|
// <= m_cMaxConnections;
|
|
//
|
|
// DWORD m_cMaxConnections;
|
|
// replaced by TSVC_INFO::QueryMaxConnections()
|
|
|
|
DWORD m_cCurrentConnections;
|
|
DWORD m_cMaxCurrentConnections;
|
|
|
|
BOOL m_fAllowAnonymous;
|
|
BOOL m_fAllowGuestAccess;
|
|
BOOL m_fAnnotateDirectories; // annotate dirs when dir changes
|
|
BOOL m_fAnonymousOnly;
|
|
BOOL m_fEnablePortAttack;
|
|
|
|
// if m_LowercaseFiles is TRUE, then dir listings from non-case-preserving
|
|
// filesystems will be mapped to lowercase.
|
|
BOOL m_fLowercaseFiles;
|
|
|
|
BOOL m_fMsdosDirOutput; // send msdos style dir listings
|
|
|
|
LPSTR m_ExitMessage;
|
|
LPSTR m_MaxClientsMessage;
|
|
|
|
//
|
|
// Greeting Message can be a multiline message.
|
|
// We maintain two copies of the message
|
|
// 1) double null terminated seq. of strings with one line per string
|
|
// 2) single null terminated string with \n characters interspersed.
|
|
//
|
|
// Representation 1 is used for sending data to clients
|
|
// Representation 2 is used for RPC admin facility
|
|
// We maintain the string as MULTI_SZ in the registry
|
|
//
|
|
TCHAR * m_pszzGreetingMessage; // that is double null terminated.
|
|
LPTSTR m_pszGreetingMessageWithLineFeed;
|
|
|
|
CHAR m_DefaultLogonDomain[ DNLEN + 1];
|
|
BOOL m_fEnableLicensing;
|
|
DWORD m_ListenBacklog;
|
|
|
|
WORD m_dataPort;
|
|
|
|
CHAR * m_pszLocalHostName; // this machine name running ftp service
|
|
DWORD m_dwUserFlags; // user flags established at start of conn
|
|
|
|
//
|
|
// Other data related to configuration load and store
|
|
//
|
|
|
|
BOOL m_fValid;
|
|
CRITICAL_SECTION m_csLock; // used for updating this object
|
|
|
|
CHAR m_rgchCacheBlock[MAX_CACHE_BLOCK_SIZE]; // to avoid false sharing
|
|
// we should avoid cache block conflict
|
|
// Following set of data constitute the dynamic data for connections
|
|
// ==> it will be good if they are closeby, within one cache block.
|
|
|
|
CRITICAL_SECTION m_csConnectionsList;
|
|
LIST_ENTRY m_ActiveConnectionsList; // list of all active connections
|
|
LIST_ENTRY m_FreeConnectionsList; // free list for connection objects
|
|
|
|
BOOL FreeAllocCachedClientConn(VOID);
|
|
|
|
PICLIENT_CONNECTION AllocClientConnFromAllocCache(VOID);
|
|
VOID FreeClientConnToAllocCache(IN PICLIENT_CONNECTION pClient);
|
|
|
|
public:
|
|
|
|
FTP_SERVER_CONFIG( VOID);
|
|
|
|
~FTP_SERVER_CONFIG( VOID);
|
|
|
|
//
|
|
// Initialize the configuration data from registry information
|
|
//
|
|
// Arguments
|
|
// hkeyReg key to the registry entry for parameters
|
|
// FieldsToRead bitmapped flags indicating which data to be read.
|
|
//
|
|
// Returns:
|
|
// NO_ERROR on success
|
|
// Win32 error code otherwise
|
|
//
|
|
DWORD InitFromRegistry( IN HKEY hkeyReg , IN FIELD_CONTROL FieldsToRead);
|
|
|
|
DWORD
|
|
GetConfigInformation( OUT LPFTP_CONFIG_INFO pConfigInfo);
|
|
|
|
DWORD
|
|
SetConfigInformation( IN LPFTP_CONFIG_INFO pConfigInfo);
|
|
|
|
BOOL IsValid( VOID) const { return ( m_fValid); }
|
|
|
|
VOID LockConfig( VOID) { EnterCriticalSection( &m_csLock); }
|
|
|
|
VOID UnLockConfig( VOID) { LeaveCriticalSection( &m_csLock); }
|
|
|
|
VOID LockConnectionsList()
|
|
{ EnterCriticalSection(&m_csConnectionsList); }
|
|
|
|
VOID UnlockConnectionsList()
|
|
{ LeaveCriticalSection(&m_csConnectionsList); }
|
|
|
|
|
|
WORD QueryDataPort(VOID) const { return (m_dataPort); }
|
|
|
|
DWORD GetCurrentConnectionsCount( VOID) const
|
|
{ return m_cCurrentConnections; }
|
|
|
|
DWORD GetMaxCurrentConnectionsCount( VOID) const
|
|
{ return m_cMaxCurrentConnections; }
|
|
|
|
DWORD SetLocalHostName(IN LPCSTR pszHost);
|
|
LPCSTR QueryLocalHostName(VOID) const { return (m_pszLocalHostName); }
|
|
|
|
DWORD QueryUserFlags(VOID) const { return (m_dwUserFlags); }
|
|
BOOL QueryLowercaseFiles(VOID) const { return (m_fLowercaseFiles); }
|
|
BOOL AllowAnonymous(VOID) const { return (m_fAllowAnonymous); }
|
|
BOOL AllowGuestAccess(VOID) const { return (m_fAllowGuestAccess); }
|
|
BOOL IsAllowedUser(IN BOOL fAnonymous)
|
|
{
|
|
return ( (fAnonymous && m_fAllowAnonymous) ||
|
|
(!fAnonymous && !m_fAllowAnonymous) ||
|
|
(!fAnonymous && !m_fAnonymousOnly) );
|
|
}
|
|
|
|
BOOL IsEnablePortAttack(VOID) const { return (m_fEnablePortAttack); }
|
|
|
|
DWORD NumListenBacklog(VOID) const { return (m_ListenBacklog); }
|
|
|
|
// Following functions return pointers to strings which should be used
|
|
// within locked sections of config
|
|
// Marked by LockConfig() and UnLockConfig()
|
|
LPCSTR QueryMaxClientsMsg(VOID) const { return (m_MaxClientsMessage); }
|
|
LPCSTR QueryGreetingMsg(VOID) const { return (m_pszzGreetingMessage); }
|
|
LPCSTR QueryExitMsg(VOID) const { return (m_ExitMessage); }
|
|
|
|
BOOL EnumerateConnection( IN PFN_CLIENT_CONNECTION_ENUM pfnConnEnum,
|
|
IN LPVOID pContext,
|
|
IN DWORD dwConnectionId);
|
|
|
|
VOID DisconnectAllConnections( VOID);
|
|
|
|
PICLIENT_CONNECTION
|
|
AllocNewConnection( OUT LPBOOL pfMaxExceeded);
|
|
|
|
VOID RemoveConnection( IN OUT PICLIENT_CONNECTION pcc);
|
|
|
|
VOID Print( VOID) const;
|
|
|
|
}; // class FTP_SERVER_CONFIG
|
|
|
|
|
|
typedef FTP_SERVER_CONFIG * LPFTP_SERVER_CONFIG;
|
|
|
|
|
|
# endif // _FTPCONF_HXX_
|
|
|
|
/************************ End of File ***********************/
|
|
|
|
|
|
|
|
|
|
|
|
|