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.
560 lines
7.2 KiB
560 lines
7.2 KiB
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1993 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
ftpdproc.h
|
|
|
|
This file contains the global procedure definitions for the
|
|
FTPD Service.
|
|
|
|
|
|
FILE HISTORY:
|
|
KeithMo 07-Mar-1993 Created.
|
|
|
|
*/
|
|
|
|
|
|
#ifndef _FTPDPROC_H_
|
|
#define _FTPDPROC_H_
|
|
|
|
|
|
//
|
|
// Global variable initialization & termination function.
|
|
//
|
|
|
|
APIERR
|
|
InitializeGlobals(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateGlobals(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
ClearStatistics(
|
|
VOID
|
|
);
|
|
|
|
#define LockGlobals() EnterCriticalSection( &csGlobalLock );
|
|
#define UnlockGlobals() LeaveCriticalSection( &csGlobalLock );
|
|
#define LockStatistics() EnterCriticalSection( &csStatisticsLock );
|
|
#define UnlockStatistics() LeaveCriticalSection( &csStatisticsLock );
|
|
#define LockUserDatabase() EnterCriticalSection( &csUserLock );
|
|
#define UnlockUserDatabase() LeaveCriticalSection( &csUserLock );
|
|
|
|
|
|
//
|
|
// Event logging functions.
|
|
//
|
|
|
|
APIERR
|
|
InitializeEventLog(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateEventLog(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
FtpdLogEvent(
|
|
DWORD idMessage,
|
|
WORD cSubStrings,
|
|
CHAR * apszSubStrings[],
|
|
DWORD errCode
|
|
);
|
|
|
|
|
|
//
|
|
// Socket utilities.
|
|
//
|
|
|
|
APIERR
|
|
InitializeSockets(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateSockets(
|
|
VOID
|
|
);
|
|
|
|
SOCKERR
|
|
CreateDataSocket(
|
|
SOCKET * psock,
|
|
ULONG addrLocal,
|
|
PORT portLocal,
|
|
ULONG addrRemote,
|
|
PORT portRemote
|
|
);
|
|
|
|
SOCKERR
|
|
CreateFtpdSocket(
|
|
SOCKET * psock,
|
|
ULONG addrLocal,
|
|
PORT portLocal
|
|
);
|
|
|
|
SOCKERR
|
|
CloseSocket(
|
|
SOCKET sock
|
|
);
|
|
|
|
SOCKERR
|
|
ResetSocket(
|
|
SOCKET sock
|
|
);
|
|
|
|
SOCKERR
|
|
AcceptSocket(
|
|
SOCKET sockListen,
|
|
SOCKET * psockNew,
|
|
LPSOCKADDR_IN paddr,
|
|
BOOL fEnforceTimeout
|
|
);
|
|
|
|
DWORD
|
|
ConnectionThread(
|
|
LPVOID Param
|
|
);
|
|
|
|
DWORD
|
|
ClientThread(
|
|
LPVOID Param
|
|
);
|
|
|
|
SOCKERR
|
|
SockSend(
|
|
SOCKET sock,
|
|
CHAR * pBuffer,
|
|
DWORD cbBuffer
|
|
);
|
|
|
|
SOCKERR
|
|
SockRecv(
|
|
USER_DATA * pUserData,
|
|
SOCKET sock,
|
|
CHAR * pBuffer,
|
|
DWORD cbBuffer,
|
|
DWORD * pbReceived
|
|
);
|
|
|
|
SOCKERR
|
|
_CRTAPI2
|
|
SockPrintf2(
|
|
SOCKET sock,
|
|
CHAR * pszFormat,
|
|
...
|
|
);
|
|
|
|
SOCKERR
|
|
_CRTAPI2
|
|
SockReply2(
|
|
SOCKET sock,
|
|
UINT ReplyCode,
|
|
CHAR * pszFormat,
|
|
...
|
|
);
|
|
|
|
SOCKERR
|
|
_CRTAPI2
|
|
SockReplyFirst2(
|
|
SOCKET sock,
|
|
UINT ReplyCode,
|
|
CHAR * pszFormat,
|
|
...
|
|
);
|
|
|
|
SOCKERR
|
|
SockReadLine(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszBuffer,
|
|
INT cchBuffer
|
|
);
|
|
|
|
SOCKERR
|
|
SendMultilineMessage2(
|
|
SOCKET sock,
|
|
UINT nReply,
|
|
CHAR * pszzMessage
|
|
);
|
|
|
|
|
|
//
|
|
// User database functions.
|
|
//
|
|
|
|
APIERR
|
|
InitializeUserDatabase(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateUserDatabase(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
DisconnectUser(
|
|
DWORD idUser
|
|
);
|
|
|
|
VOID
|
|
DisconnectAllUsers(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
DisconnectUsersWithNoAccess(
|
|
VOID
|
|
);
|
|
|
|
USER_DATA *
|
|
CreateUserData(
|
|
SOCKET sControl,
|
|
IN_ADDR inetHost
|
|
);
|
|
|
|
VOID
|
|
DeleteUserData(
|
|
USER_DATA * pUserData
|
|
);
|
|
|
|
BOOL
|
|
EnumerateUsers(
|
|
VOID * pvEnum,
|
|
DWORD * pcbBuffer
|
|
);
|
|
|
|
|
|
//
|
|
// Security functions.
|
|
//
|
|
|
|
APIERR
|
|
InitializeSecurity(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateSecurity(
|
|
VOID
|
|
);
|
|
|
|
HANDLE
|
|
ValidateUser(
|
|
CHAR * pszDomainName,
|
|
CHAR * pszUserName,
|
|
CHAR * pszPassword,
|
|
BOOL * pfAsGuest,
|
|
BOOL * pfLicenseExceeded
|
|
);
|
|
|
|
BOOL
|
|
ImpersonateUser(
|
|
HANDLE hToken
|
|
);
|
|
|
|
BOOL
|
|
DeleteUserToken(
|
|
HANDLE hToken
|
|
);
|
|
|
|
BOOL
|
|
GetAnonymousPassword(
|
|
CHAR * pszPassword
|
|
);
|
|
|
|
BOOL
|
|
PathAccessCheck(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszPath,
|
|
ACCESS_TYPE access
|
|
);
|
|
|
|
VOID
|
|
UpdateAccessMasks(
|
|
VOID
|
|
);
|
|
|
|
APIERR
|
|
ApiAccessCheck(
|
|
ACCESS_MASK maskDesiredAccess
|
|
);
|
|
|
|
DWORD
|
|
DetermineUserAccess(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// IPC functions.
|
|
//
|
|
|
|
APIERR
|
|
InitializeIPC(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateIPC(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Service control functions.
|
|
//
|
|
|
|
VOID
|
|
ServiceEntry(
|
|
DWORD cArgs,
|
|
LPWSTR pArgs[],
|
|
PTCPSVCS_GLOBAL_DATA pGlobalData
|
|
);
|
|
|
|
APIERR
|
|
UpdateServiceStatus(
|
|
DWORD State,
|
|
DWORD Win32ExitCode,
|
|
DWORD CheckPoint,
|
|
DWORD WaitHint
|
|
);
|
|
|
|
APIERR
|
|
ReportServiceStatus(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// Virtual file i/o functions.
|
|
//
|
|
|
|
APIERR
|
|
InitializeVirtualIO(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
TerminateVirtualIO(
|
|
VOID
|
|
);
|
|
|
|
APIERR
|
|
VirtualCanonicalize(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszDest,
|
|
CHAR * pszSrc,
|
|
ACCESS_TYPE access
|
|
);
|
|
|
|
APIERR
|
|
VirtualCreateFile(
|
|
USER_DATA * pUserData,
|
|
HANDLE * phFile,
|
|
CHAR * pszFile,
|
|
BOOL fAppend
|
|
);
|
|
|
|
APIERR
|
|
VirtualCreateUniqueFile(
|
|
USER_DATA * pUserData,
|
|
HANDLE * phFile,
|
|
CHAR * pszTmpFile
|
|
);
|
|
|
|
APIERR
|
|
VirtualOpenFile(
|
|
USER_DATA * pUserData,
|
|
HANDLE * phFile,
|
|
CHAR * pszFile
|
|
);
|
|
|
|
FILE *
|
|
Virtual_fopen(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszFile
|
|
);
|
|
|
|
APIERR
|
|
VirtualFindFirstFile(
|
|
USER_DATA * pUserData,
|
|
HANDLE * phSearch,
|
|
CHAR * pszSearchFile,
|
|
WIN32_FIND_DATA * pFindData
|
|
);
|
|
|
|
APIERR
|
|
VirtualDeleteFile(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszFile
|
|
);
|
|
|
|
APIERR
|
|
VirtualRenameFile(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszExisting,
|
|
CHAR * pszNew
|
|
);
|
|
|
|
APIERR
|
|
VirtualChDir(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszDir
|
|
);
|
|
|
|
APIERR
|
|
VirtualRmDir(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszDir
|
|
);
|
|
|
|
APIERR
|
|
VirtualMkDir(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszDir
|
|
);
|
|
|
|
|
|
//
|
|
// Command parser functions.
|
|
//
|
|
|
|
VOID
|
|
ParseCommand(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszCommandText
|
|
);
|
|
|
|
SOCKERR
|
|
EstablishDataConnection(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszReason
|
|
);
|
|
|
|
VOID
|
|
DestroyDataConnection(
|
|
USER_DATA * pUserData,
|
|
BOOL fSuccess
|
|
);
|
|
|
|
|
|
//
|
|
// General utility functions.
|
|
//
|
|
|
|
DWORD
|
|
ReadRegistryDword(
|
|
CHAR * pszValueName,
|
|
DWORD dwDefaultValue
|
|
);
|
|
|
|
CHAR *
|
|
ReadRegistryString(
|
|
CHAR * pszValueName,
|
|
CHAR * pszDefaultValue,
|
|
BOOL fExpand
|
|
);
|
|
|
|
APIERR
|
|
WriteRegistryDword(
|
|
CHAR * pszValueName,
|
|
DWORD dwValue
|
|
);
|
|
|
|
CHAR *
|
|
TransferType(
|
|
XFER_TYPE type
|
|
);
|
|
|
|
CHAR *
|
|
TransferMode(
|
|
XFER_MODE mode
|
|
);
|
|
|
|
CHAR *
|
|
DisplayBool(
|
|
BOOL fFlag
|
|
);
|
|
|
|
BOOL
|
|
IsDecimalNumber(
|
|
CHAR * psz
|
|
);
|
|
|
|
DWORD
|
|
GetFtpTime(
|
|
VOID
|
|
);
|
|
|
|
CHAR *
|
|
AllocErrorText(
|
|
APIERR err
|
|
);
|
|
|
|
VOID
|
|
FreeErrorText(
|
|
CHAR * pszText
|
|
);
|
|
|
|
APIERR
|
|
OpenDosPath(
|
|
HANDLE * phFile,
|
|
CHAR * pszPath,
|
|
ACCESS_MASK DesiredAccess,
|
|
ULONG ShareAccess,
|
|
ULONG OpenOptions
|
|
);
|
|
|
|
CHAR *
|
|
FlipSlashes(
|
|
CHAR * pszPath
|
|
);
|
|
|
|
FILE *
|
|
OpenLogFile(
|
|
VOID
|
|
);
|
|
|
|
|
|
//
|
|
// LS simulator functions.
|
|
//
|
|
|
|
SOCKERR
|
|
SimulateLs(
|
|
USER_DATA * pUserData,
|
|
SOCKET sock,
|
|
CHAR * pszArg
|
|
);
|
|
|
|
SOCKERR
|
|
SimulateLsDefaultLong(
|
|
USER_DATA * pUserData,
|
|
SOCKET sock,
|
|
CHAR * pszArg
|
|
);
|
|
|
|
SOCKERR
|
|
SpecialLs(
|
|
USER_DATA * pUserData,
|
|
CHAR * pszSearchPath
|
|
);
|
|
|
|
|
|
//
|
|
// Some handy macros.
|
|
//
|
|
|
|
#define IS_PATH_SEP(x) (((x) == '\\') || ((x) == '/'))
|
|
|
|
|
|
#endif // _FTPDPROC_H_
|
|
|