mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-06 13:44:45 +02:00
Enabled sshd debug mode in windows, fixed bug in STDIO close(), and tty condition in client_loop()
This commit is contained in:
parent
4ae501e179
commit
173b000a76
@ -2479,11 +2479,12 @@ channel_input_data(int type, u_int32_t seq, void *ctxt)
|
|||||||
if (c->datagram)
|
if (c->datagram)
|
||||||
buffer_put_string(&c->output, data, data_len);
|
buffer_put_string(&c->output, data, data_len);
|
||||||
else {
|
else {
|
||||||
#if(1)//ndef WIN32_FIXME
|
#if(0)//ndef WIN32_FIXME
|
||||||
buffer_append(&c->output, data, data_len);
|
buffer_append(&c->output, data, data_len);
|
||||||
#else
|
#else
|
||||||
if ( c->client_tty )
|
if ( c->client_tty )
|
||||||
telProcessNetwork ( data, data_len ); // run it by ANSI engine if it is the ssh client
|
buffer_append(&c->output, data, data_len);
|
||||||
|
//telProcessNetwork ( data, data_len ); // run it by ANSI engine if it is the ssh client
|
||||||
else {
|
else {
|
||||||
#ifdef WIN32_PRAGMA_REMCON
|
#ifdef WIN32_PRAGMA_REMCON
|
||||||
buffer_append(&c->output, data, data_len); // it is the sshd server, so pass it on
|
buffer_append(&c->output, data, data_len); // it is the sshd server, so pass it on
|
||||||
|
@ -1523,7 +1523,7 @@ client_simple_escape_filter(Channel *c, char *buf, int len)
|
|||||||
#ifdef WIN32_FIXME
|
#ifdef WIN32_FIXME
|
||||||
u_char * client_ansi_parser_filter(Channel *c, u_char **buf, u_int *len) {
|
u_char * client_ansi_parser_filter(Channel *c, u_char **buf, u_int *len) {
|
||||||
/* TODO - account fo error/extended stream*/
|
/* TODO - account fo error/extended stream*/
|
||||||
if (isatty(c->wfd)) {
|
if (c->client_tty) {
|
||||||
telProcessNetwork(buffer_ptr(&c->output), buffer_len(&c->output));
|
telProcessNetwork(buffer_ptr(&c->output), buffer_len(&c->output));
|
||||||
buffer_clear(&c->output);
|
buffer_clear(&c->output);
|
||||||
buffer_append(&c->output, " \b", 2);
|
buffer_append(&c->output, " \b", 2);
|
||||||
|
@ -590,16 +590,17 @@ fileio_close(struct w32_io* pio) {
|
|||||||
CancelIo(pio->handle);
|
CancelIo(pio->handle);
|
||||||
//let queued APCs (if any) drain
|
//let queued APCs (if any) drain
|
||||||
SleepEx(0, TRUE);
|
SleepEx(0, TRUE);
|
||||||
if (pio->type != STD_IO_FD) //STD handles are never explicitly closed
|
if (pio->type != STD_IO_FD) {//STD handles are never explicitly closed
|
||||||
CloseHandle(pio->handle);
|
CloseHandle(pio->handle);
|
||||||
|
|
||||||
if (pio->read_details.buf)
|
if (pio->read_details.buf)
|
||||||
free(pio->read_details.buf);
|
free(pio->read_details.buf);
|
||||||
|
|
||||||
if (pio->write_details.buf)
|
if (pio->write_details.buf)
|
||||||
free(pio->write_details.buf);
|
free(pio->write_details.buf);
|
||||||
|
|
||||||
free(pio);
|
free(pio);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,12 +108,12 @@ typedef void(*sighandler_t)(int);
|
|||||||
int w32_temp_DelChildToWatch(HANDLE processtowatch);
|
int w32_temp_DelChildToWatch(HANDLE processtowatch);
|
||||||
int w32_temp_AddChildToWatch(HANDLE processtowatch);
|
int w32_temp_AddChildToWatch(HANDLE processtowatch);
|
||||||
HANDLE w32_fd_to_handle(int fd);
|
HANDLE w32_fd_to_handle(int fd);
|
||||||
int w32_allocate_fd_for_handle(HANDLE h);
|
int w32_allocate_fd_for_handle(HANDLE h, BOOL is_sock);
|
||||||
|
|
||||||
/* temporary definitions to aid in transition */
|
/* temporary definitions to aid in transition */
|
||||||
#define WSHELPDelChildToWatch(a) w32_temp_DelChildToWatch((a))
|
#define WSHELPDelChildToWatch(a) w32_temp_DelChildToWatch((a))
|
||||||
#define WSHELPAddChildToWatch(a) w32_temp_AddChildToWatch((a))
|
#define WSHELPAddChildToWatch(a) w32_temp_AddChildToWatch((a))
|
||||||
#define sfd_to_handle(a) w32_fd_to_handle((a))
|
#define sfd_to_handle(a) w32_fd_to_handle((a))
|
||||||
#define allocate_sfd(a) w32_allocate_fd_for_handle((a))
|
#define allocate_sfd(a, b) w32_allocate_fd_for_handle((a, b))
|
||||||
//#define WSHELPwopen(a, b) w32_open((a, b))
|
//#define WSHELPwopen(a, b) w32_open((a, b))
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ w32_fd_to_handle(int fd) {
|
|||||||
return fd_table.w32_ios[fd]->handle;
|
return fd_table.w32_ios[fd]->handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
int w32_allocate_fd_for_handle(HANDLE h) {
|
int w32_allocate_fd_for_handle(HANDLE h, BOOL is_sock) {
|
||||||
int min_index = fd_table_get_min_index();
|
int min_index = fd_table_get_min_index();
|
||||||
struct w32_io* pio;
|
struct w32_io* pio;
|
||||||
|
|
||||||
@ -708,7 +708,7 @@ int w32_allocate_fd_for_handle(HANDLE h) {
|
|||||||
}
|
}
|
||||||
memset(pio, 0, sizeof(struct w32_io));
|
memset(pio, 0, sizeof(struct w32_io));
|
||||||
|
|
||||||
pio->type = FILE_FD;
|
pio->type = is_sock? SOCK_FD : FILE_FD;
|
||||||
pio->handle = h;
|
pio->handle = h;
|
||||||
fd_table_set(pio, min_index);
|
fd_table_set(pio, min_index);
|
||||||
return min_index;
|
return min_index;
|
||||||
|
54
sshd.c
54
sshd.c
@ -1699,6 +1699,32 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
|
|||||||
startups++;
|
startups++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Got connection. Fork a child to handle it, unless
|
||||||
|
* we are in debugging mode.
|
||||||
|
*/
|
||||||
|
if (debug_flag) {
|
||||||
|
/*
|
||||||
|
* In debugging mode. Close the listening
|
||||||
|
* socket, and start processing the
|
||||||
|
* connection without forking.
|
||||||
|
*/
|
||||||
|
debug("Server will not fork when running in debugging mode.");
|
||||||
|
close_listen_socks();
|
||||||
|
*sock_in = *newsock;
|
||||||
|
*sock_out = *newsock;
|
||||||
|
close(startup_p[0]);
|
||||||
|
close(startup_p[1]);
|
||||||
|
startup_pipe = -1;
|
||||||
|
pid = getpid();
|
||||||
|
if (rexec_flag) {
|
||||||
|
send_rexec_state(config_s[0],
|
||||||
|
&cfg);
|
||||||
|
close(config_s[0]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
#ifdef WIN32_FIXME
|
#ifdef WIN32_FIXME
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1770,32 +1796,6 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Got connection. Fork a child to handle it, unless
|
|
||||||
* we are in debugging mode.
|
|
||||||
*/
|
|
||||||
if (debug_flag) {
|
|
||||||
/*
|
|
||||||
* In debugging mode. Close the listening
|
|
||||||
* socket, and start processing the
|
|
||||||
* connection without forking.
|
|
||||||
*/
|
|
||||||
debug("Server will not fork when running in debugging mode.");
|
|
||||||
close_listen_socks();
|
|
||||||
*sock_in = *newsock;
|
|
||||||
*sock_out = *newsock;
|
|
||||||
close(startup_p[0]);
|
|
||||||
close(startup_p[1]);
|
|
||||||
startup_pipe = -1;
|
|
||||||
pid = getpid();
|
|
||||||
if (rexec_flag) {
|
|
||||||
send_rexec_state(config_s[0],
|
|
||||||
&cfg);
|
|
||||||
close(config_s[0]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Normal production daemon. Fork, and have
|
* Normal production daemon. Fork, and have
|
||||||
* the child process the connection. The
|
* the child process the connection. The
|
||||||
@ -2820,7 +2820,7 @@ main(int ac, char **av)
|
|||||||
int remotesochandle ;
|
int remotesochandle ;
|
||||||
remotesochandle = atoi( getenv("SSHD_REMSOC") );
|
remotesochandle = atoi( getenv("SSHD_REMSOC") );
|
||||||
|
|
||||||
sock_in = sock_out = newsock = allocate_sfd(remotesochandle) ; //si.hStdInput);
|
sock_in = sock_out = newsock = w32_allocate_fd_for_handle(remotesochandle, TRUE) ; //si.hStdInput);
|
||||||
|
|
||||||
// we have the socket handle, delete it for child processes we create like shell
|
// we have the socket handle, delete it for child processes we create like shell
|
||||||
SetEnvironmentVariable("SSHD_REMSOC", NULL);
|
SetEnvironmentVariable("SSHD_REMSOC", NULL);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user