25 #define telnetd_printf printf 50 printf(
"Attempting to start Simple TelnetD\n");
56 ErrorExit(
"Unable to start socket interface\n");
81 WORD wVersionRequested;
85 wVersionRequested =
MAKEWORD( 2, 0 );
94 if ( wsaData.
wVersion != wVersionRequested)
95 ErrorExit(
"requested winsock version not supported\n");
116 ErrorExit(
"Cannot bind address to socket");
131 telnetd_printf(
"user connected on socket %d, port %d, address %lx\n", new_sock,
144 ErrorExit(
"failed to allocate memory for client");
146 client->socket = client_socket;
148 if (threadHandle ==
NULL)
160 char *pwdPrompt =
"\r\npass:";
175 sprintf(welcome,
"\r\nWelcome to %s, please identify yourself\r\n\r\nuser:",
hostname);
249 unsigned char client_reply[256];
251 if (
send(
sock, will_echo,
sizeof(will_echo), 0) < 0) {
265 }
else if (retval == 0) {
296 char asterisk[1] = {
'*' };
310 }
else if (retval == 0) {
340 }
else if (echo ==
Password &&
send(
sock, asterisk,
sizeof(asterisk), 0) < 0) {
380 ErrorExit(
"GetSystemDirectoryA failed\n");
389 if (!
CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
390 ErrorExit(
"Stdout pipe creation failed\n");
392 if (!
CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
393 ErrorExit(
"Stdin pipe creation failed\n");
399 client->hChildStdinWr = hChildStdinWr;
400 client->hChildStdoutRd = hChildStdoutRd;
444 if (threadHandle !=
NULL)
448 if (threadHandle !=
NULL)
452 if (threadHandle !=
NULL)
471 telnetd_printf(
"Child process terminated with code %lx\n", exitCode);
510 while (!
client->bTerminate) {
515 }
else if (iRead > 0) {
519 if (
send(
client->socket, chBuf, iRead, 0) < 0) {
569 txBuf[to] = chBuf[
from];
570 if (txBuf[to] ==
'\n') {
598 char stop[] =
"\003\r\nexit\r\n";
607 telnetd_printf(
"user shell still active, send Ctrl-Break to group-id %lu\n",
client->dwProcessId );
612 printf(
"CreateEvent error\n");
632 telnetd_printf(
"user shell still active, attempt to terminate it now...\n");
static void RunShell(client_t *client)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
static int ReceiveLine(int sock, char *buffer, int len, EchoMode echo)
ACPI_SIZE strlen(const char *String)
int kickoff_telnetd(void)
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
BOOL WINAPI GetExitCodeProcess(IN HANDLE hProcess, IN LPDWORD lpExitCode)
#define HANDSHAKE_TIMEOUT
INT WSAAPI WSACleanup(VOID)
static void UserLogin(int client_socket)
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
VOID WINAPI ExitProcess(IN UINT uExitCode)
static BOOLEAN StartSocketInterface(void)
void syslog(int pri, char *fmt,...)
static BOOL WINAPI Cleanup(DWORD dwControlType)
#define CREATE_NEW_PROCESS_GROUP
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
#define SUPPRESS_GO_AHEAD
#define sprintf(buf, format,...)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static DWORD WINAPI UserLoginThread(LPVOID data)
BOOL WINAPI DECLSPEC_HOTPATCH GenerateConsoleCtrlEvent(DWORD dwCtrlEvent, DWORD dwProcessGroupId)
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
INT WSAAPI gethostname(OUT char FAR *name, IN INT namelen)
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add)
struct _ACPI_EFI_BOOT_SERVICES * BS
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
static void TerminateShell(client_t *client)
static UINT set(struct ID3DXConstantTableImpl *table, IDirect3DDevice9 *device, struct ctab_constant *constant, const void **indata, D3DXPARAMETER_TYPE intype, UINT *size, UINT incol, D3DXPARAMETER_CLASS inclass, UINT index, BOOL is_pointer)
static DWORD WINAPI WriteToPipeThread(LPVOID data)
#define STARTF_USESTDHANDLES
INT WSAAPI WSAGetLastError(VOID)
#define GetEnvironmentVariableA(x, y, z)
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
static int DoTelnetHandshake(int sock)
static BOOLEAN bSocketInterfaceInitialised
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
T1_FIELD_DICT_PRIVATE password
static DWORD WINAPI MonitorChildThread(LPVOID data)
SOCKET WSAAPI accept(IN SOCKET s, OUT LPSOCKADDR addr, OUT INT FAR *addrlen)
char szDescription[WSADESCRIPTION_LEN+1]
BOOL WINAPI CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize)
static VOID del(LPHIST_ENTRY item)
LPVOID lpSecurityDescriptor
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
static void CreateSocket(void)
static VOID ErrorExit(LPTSTR lpszMessage)
BOOL WINAPI TerminateProcess(IN HANDLE hProcess, IN UINT uExitCode)
#define ReadFile(a, b, c, d, e)
INT WSAAPI listen(IN SOCKET s, IN INT backlog)
char * strchr(const char *String, int ch)
char * strcpy(char *DstString, const char *SrcString)
static DWORD WINAPI ReadFromPipeThread(LPVOID data)
static void WaitForConnect(void)
INT WSAAPI recv(IN SOCKET s, OUT CHAR FAR *buf, IN INT len, IN INT flags)
static struct sockaddr_in sa
BOOL WINAPI PeekNamedPipe(HANDLE hNamedPipe, LPVOID lpBuffer, DWORD nBufferSize, LPDWORD lpBytesRead, LPDWORD lpTotalBytesAvail, LPDWORD lpBytesLeftThisMessage)
struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES