3 #define _CRT_SECURE_NO_WARNINGS
5 #define WIN32_NO_STATUS
14 #define TELNET_PORT (23)
16 #define BUFSIZE (4096)
17 #define USERID_SIZE (64)
32 #define SUPPRESS_GO_AHEAD "\x03"
33 #define TERMINAL_TYPE "\x18"
35 #define LINEMODE "\x22"
36 #define NEWENVIRON "\x27"
39 #define HANDSHAKE_TIMEOUT (3)
45 typedef struct client_s
47 char userID
[USERID_SIZE
];
50 BOOLEAN bReadFromPipe
;
55 HANDLE hChildStdoutRd
;
66 ** Forward function declarations
68 static BOOL WINAPI
Cleanup(DWORD dwControlType
);
69 static void WaitForConnect(void);
70 static BOOLEAN
StartSocketInterface(void);
71 static void CreateSocket(void);
72 static void UserLogin(int client_socket
);
73 static DWORD WINAPI
UserLoginThread(LPVOID
);
74 static int DoTelnetHandshake(int sock
);
75 static int ReceiveLine(int sock
, char *buffer
, int len
, EchoMode echo
);
76 static void RunShell(client_t
*client
);
77 //static BOOL CreateChildProcess(const char *);
78 static DWORD WINAPI
MonitorChildThread(LPVOID
);
79 static DWORD WINAPI
WriteToPipeThread(LPVOID
);
80 static DWORD WINAPI
ReadFromPipeThread(LPVOID
);
81 static void TerminateShell(client_t
*client
);
82 static VOID
ErrorExit(LPTSTR
);
83 int kickoff_telnetd(void);