mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-22 21:45:09 +02:00
Merge remote-tracking branch 'refs/remotes/origin/L1'
This commit is contained in:
commit
b8d82456a7
12
.gitignore
vendored
12
.gitignore
vendored
@ -239,9 +239,18 @@ ssh_host_rsa_key
|
|||||||
ssh_host_rsa_key
|
ssh_host_rsa_key
|
||||||
ssh_host_rsa_key
|
ssh_host_rsa_key
|
||||||
ssh_host_dsa_key
|
ssh_host_dsa_key
|
||||||
|
ssh_host_dsa_key.pub
|
||||||
ssh_host_ecdsa_key.pub
|
ssh_host_ecdsa_key.pub
|
||||||
|
ssh_host_ecdsa_key
|
||||||
|
ssh_host_ed25519_key
|
||||||
|
ssh_host_ed25519_key.pub
|
||||||
ssh_host_rsa_key.pub
|
ssh_host_rsa_key.pub
|
||||||
id_rsa.pub
|
id_rsa.pub
|
||||||
|
id_rsa
|
||||||
|
id_dsa.pub
|
||||||
|
id_dsa
|
||||||
|
is_rsa
|
||||||
|
is_rsa.pub
|
||||||
regress/t10.out.pub
|
regress/t10.out.pub
|
||||||
regress/t12.out.pub
|
regress/t12.out.pub
|
||||||
regress/t6.out1
|
regress/t6.out1
|
||||||
@ -264,3 +273,6 @@ regress/t6.out2
|
|||||||
config.h
|
config.h
|
||||||
configure
|
configure
|
||||||
config.h
|
config.h
|
||||||
|
|
||||||
|
#temp key files
|
||||||
|
d2utmpa*
|
@ -87,7 +87,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
|
|||||||
msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o umac128.o \
|
msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o umac128.o \
|
||||||
ssh-pkcs11.o smult_curve25519_ref.o \
|
ssh-pkcs11.o smult_curve25519_ref.o \
|
||||||
poly1305.o chacha.o cipher-chachapoly.o \
|
poly1305.o chacha.o cipher-chachapoly.o \
|
||||||
ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \
|
ssh-ed25519.o digest-libc.o hmac.o \
|
||||||
sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o blocks.o \
|
sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o blocks.o \
|
||||||
kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
|
kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
|
||||||
kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \
|
kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \
|
||||||
|
@ -1,2 +1,7 @@
|
|||||||
# OpenSSH
|
# OpenSSH
|
||||||
Win32 port of OpenSSH
|
Win32 port of OpenSSH
|
||||||
|
|
||||||
|
Look at the [wiki](https://github.com/PowerShell/Win32-OpenSSH/wiki) for help
|
||||||
|
First release announcement is here:
|
||||||
|
OpenSSH for Windows Update - Windows PowerShell Blog - Site Home - MSDN Blogs
|
||||||
|
http://blogs.msdn.com/b/powershell/archive/2015/10/19/openssh-for-windows-update.aspx
|
||||||
|
52
channels.c
52
channels.c
@ -1685,6 +1685,10 @@ channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
|
|||||||
if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) {
|
if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
len = read(c->rfd, buf, sizeof(buf));
|
len = read(c->rfd, buf, sizeof(buf));
|
||||||
|
#ifdef WIN32_FIXME
|
||||||
|
if (len == 0)
|
||||||
|
return 1; // in Win32 console read, there may be no data, but is ok
|
||||||
|
#endif
|
||||||
if (len < 0 && (errno == EINTR ||
|
if (len < 0 && (errno == EINTR ||
|
||||||
((errno == EAGAIN || errno == EWOULDBLOCK) && !force)))
|
((errno == EAGAIN || errno == EWOULDBLOCK) && !force)))
|
||||||
return 1;
|
return 1;
|
||||||
@ -2395,9 +2399,7 @@ channel_output_poll(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef WIN32_FIXME
|
|
||||||
int lftocrlf = 0;
|
|
||||||
#endif
|
|
||||||
/* -- protocol input */
|
/* -- protocol input */
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
@ -2462,13 +2464,25 @@ channel_input_data(int type, u_int32_t seq, void *ctxt)
|
|||||||
#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
|
telProcessNetwork ( data, data_len ); // run it by ANSI engine if it is the ssh client
|
||||||
else
|
else {
|
||||||
|
if ( ( c->isatty) && (data_len ==1) && (data[0] == '\003') ) {
|
||||||
|
/* send control-c to the shell process */
|
||||||
|
if ( GenerateConsoleCtrlEvent ( CTRL_C_EVENT, 0 ) ) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
debug3("GenerateConsoleCtrlEvent failed with %d\n",GetLastError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
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
|
||||||
if ( c->isatty ) {
|
if ( c->isatty ) { // we echo the data if it is sshd server and pty interactive mode
|
||||||
buffer_append(&c->input, data, data_len); // we echo the data if it is sshd server and pty interactive mode
|
buffer_append(&c->input, data, data_len);
|
||||||
if ( (data_len ==1) && (data[0] == '\b') )
|
if ( (data_len ==1) && (data[0] == '\b') )
|
||||||
buffer_append(&c->input, " \b", 2); // for backspace, we need to send space and another backspace for visual erase
|
buffer_append(&c->input, " \b", 2); // for backspace, we need to send space and another backspace for visual erase
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
packet_check_eom();
|
packet_check_eom();
|
||||||
@ -3913,10 +3927,11 @@ channel_connect_to_path(const char *path, char *ctype, char *rname)
|
|||||||
return connect_to(path, PORT_STREAMLOCAL, ctype, rname);
|
return connect_to(path, PORT_STREAMLOCAL, ctype, rname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WIN32_FIXME
|
||||||
void
|
void
|
||||||
channel_send_window_changes(void)
|
channel_send_window_changes(void)
|
||||||
{
|
{
|
||||||
#ifndef WIN32_FIXME
|
|
||||||
u_int i;
|
u_int i;
|
||||||
struct winsize ws;
|
struct winsize ws;
|
||||||
|
|
||||||
@ -3933,9 +3948,30 @@ channel_send_window_changes(void)
|
|||||||
packet_put_int((u_int)ws.ws_ypixel);
|
packet_put_int((u_int)ws.ws_ypixel);
|
||||||
packet_send();
|
packet_send();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else // WIN32_FIXME
|
||||||
|
void
|
||||||
|
channel_send_window_changes(int col, int row, int xpixel, int ypixel)
|
||||||
|
{
|
||||||
|
u_int i;
|
||||||
|
struct winsize ws;
|
||||||
|
|
||||||
|
for (i = 0; i < channels_alloc; i++) {
|
||||||
|
if (channels[i] == NULL || !channels[i]->client_tty ||
|
||||||
|
channels[i]->type != SSH_CHANNEL_OPEN)
|
||||||
|
continue;
|
||||||
|
channel_request_start(i, "window-change", 0);
|
||||||
|
packet_put_int((u_int)col);
|
||||||
|
packet_put_int((u_int)row);
|
||||||
|
packet_put_int((u_int)xpixel);
|
||||||
|
packet_put_int((u_int)ypixel);
|
||||||
|
packet_send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* -- X11 forwarding */
|
/* -- X11 forwarding */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -226,7 +226,12 @@ void channel_register_status_confirm(int, channel_confirm_cb *,
|
|||||||
channel_confirm_abandon_cb *, void *);
|
channel_confirm_abandon_cb *, void *);
|
||||||
void channel_cancel_cleanup(int);
|
void channel_cancel_cleanup(int);
|
||||||
int channel_close_fd(int *);
|
int channel_close_fd(int *);
|
||||||
|
#ifndef WIN32_FIXME
|
||||||
void channel_send_window_changes(void);
|
void channel_send_window_changes(void);
|
||||||
|
#else
|
||||||
|
void channel_send_window_changes(int, int, int, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* protocol handler */
|
/* protocol handler */
|
||||||
|
|
||||||
|
54
clientloop.c
54
clientloop.c
@ -119,6 +119,12 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#define isatty(a) WSHELPisatty(a)
|
#define isatty(a) WSHELPisatty(a)
|
||||||
|
|
||||||
|
// Windows Console screen size change related
|
||||||
|
extern int ScreenX;
|
||||||
|
extern int ScrollBottom;
|
||||||
|
int win_received_window_change_signal = 1;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* import options */
|
/* import options */
|
||||||
@ -162,7 +168,10 @@ static int escape_pending1; /* Last character was an escape (proto1 only) */
|
|||||||
static int last_was_cr; /* Last character was a newline. */
|
static int last_was_cr; /* Last character was a newline. */
|
||||||
static int exit_status; /* Used to store the command exit status. */
|
static int exit_status; /* Used to store the command exit status. */
|
||||||
static int stdin_eof; /* EOF has been encountered on stderr. */
|
static int stdin_eof; /* EOF has been encountered on stderr. */
|
||||||
static Buffer stdin_buffer; /* Buffer for stdin data. */
|
#ifndef WIN32_FIXME
|
||||||
|
static
|
||||||
|
#endif
|
||||||
|
Buffer stdin_buffer; /* Buffer for stdin data. */
|
||||||
static Buffer stdout_buffer; /* Buffer for stdout data. */
|
static Buffer stdout_buffer; /* Buffer for stdout data. */
|
||||||
static Buffer stderr_buffer; /* Buffer for stderr data. */
|
static Buffer stderr_buffer; /* Buffer for stderr data. */
|
||||||
static u_int buffer_high; /* Soft max buffer size. */
|
static u_int buffer_high; /* Soft max buffer size. */
|
||||||
@ -563,6 +572,25 @@ client_check_window_change(void)
|
|||||||
packet_put_int((u_int)ws.ws_ypixel);
|
packet_put_int((u_int)ws.ws_ypixel);
|
||||||
packet_send();
|
packet_send();
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
if (! win_received_window_change_signal)
|
||||||
|
return;
|
||||||
|
/** XXX race */
|
||||||
|
win_received_window_change_signal = 0;
|
||||||
|
|
||||||
|
debug2("client_check_window_change: changed");
|
||||||
|
|
||||||
|
if (compat20) {
|
||||||
|
channel_send_window_changes(ScreenX, ScrollBottom, 640, 480);
|
||||||
|
} else {
|
||||||
|
packet_start(SSH_CMSG_WINDOW_SIZE);
|
||||||
|
packet_put_int((u_int)ScreenX);
|
||||||
|
packet_put_int((u_int)ScrollBottom);
|
||||||
|
packet_put_int((u_int)640);
|
||||||
|
packet_put_int((u_int)480);
|
||||||
|
packet_send();
|
||||||
|
}
|
||||||
#endif /* !WIN32_FIXME */
|
#endif /* !WIN32_FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1320,14 +1348,14 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
|||||||
* and append it to the buffer.
|
* and append it to the buffer.
|
||||||
*/
|
*/
|
||||||
last_was_cr = (ch == '\r' || ch == '\n');
|
last_was_cr = (ch == '\r' || ch == '\n');
|
||||||
#ifdef WIN32_FIXME
|
//#ifdef WIN32_FIXME
|
||||||
extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now
|
//extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now
|
||||||
if ( (lftocrlf == 1) && ( ch == '\n') ) {
|
//if ( (lftocrlf == 1) && ( ch == '\n') ) {
|
||||||
// add a \r before \n if sshd server sent us ESC[20h during initial tty mode setting
|
// add a \r before \n if sshd server sent us ESC[20h during initial tty mode setting
|
||||||
buffer_put_char(bin, '\r');
|
//buffer_put_char(bin, '\r');
|
||||||
bytes++;
|
//bytes++;
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
buffer_put_char(bin, ch);
|
buffer_put_char(bin, ch);
|
||||||
bytes++;
|
bytes++;
|
||||||
}
|
}
|
||||||
@ -2571,11 +2599,11 @@ client_session2_setup(int id, int want_tty, int want_subsystem,
|
|||||||
tty_make_modes(-1, tiop);
|
tty_make_modes(-1, tiop);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
packet_put_cstring(term != NULL ? term : "");
|
packet_put_cstring(term != NULL ? term : "vt220");
|
||||||
packet_put_int((u_int) 80 /*ws.ws_col*/);
|
packet_put_int((u_int) ScreenX);
|
||||||
packet_put_int((u_int) 25 /*ws.ws_row*/);
|
packet_put_int((u_int) ScrollBottom);
|
||||||
packet_put_int((u_int) 640 /*ws.ws_xpixel*/);
|
packet_put_int((u_int) 640);
|
||||||
packet_put_int((u_int) 480 /*ws.ws_ypixel*/);
|
packet_put_int((u_int) 480);
|
||||||
tty_make_modes(-1, NULL);
|
tty_make_modes(-1, NULL);
|
||||||
#endif /* else !WIN32_FIXME */
|
#endif /* else !WIN32_FIXME */
|
||||||
packet_send();
|
packet_send();
|
||||||
|
@ -19,11 +19,12 @@ LDFLAGS=-L. @LDFLAGS@ -L/lib/win32api
|
|||||||
|
|
||||||
WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.o \
|
WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.o \
|
||||||
socket.o startupneeds.o strcasecmp.o syslog.o lsalogon.o lsastring.o \
|
socket.o startupneeds.o strcasecmp.o syslog.o lsalogon.o lsastring.o \
|
||||||
stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o console.o tnnet.o
|
stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o \
|
||||||
|
console.o tnnet.o conio.o tncon.o
|
||||||
|
|
||||||
WIN32COMPATLIB=@LIBWIN32COMPAT@
|
WIN32COMPATLIB=@LIBWIN32COMPAT@
|
||||||
|
|
||||||
CNGFILES=cng_cipher.o
|
CNGFILES=cng_cipher.o cng_digest.o
|
||||||
|
|
||||||
|
|
||||||
.c.o:
|
.c.o:
|
||||||
@ -44,6 +45,6 @@ distclean: clean
|
|||||||
|
|
||||||
$(WIN32COMPATFILES): ../../../config.h
|
$(WIN32COMPATFILES): ../../../config.h
|
||||||
|
|
||||||
$(WIN32COMPATLIB): $(WIN32COMPATFILES)
|
$(WIN32COMPATLIB): $(WIN32COMPATFILES) $(CNGFILES)
|
||||||
$(AR) rv $@ $(WIN32COMPATFILES)
|
$(AR) rv $@ $(WIN32COMPATFILES) $(CNGFILES)
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
@ -1,17 +1,36 @@
|
|||||||
/* ansiprsr.c
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* ansiprsr.c
|
||||||
*
|
*
|
||||||
* ANSI Parser to run on Win32 based operating systems.
|
* ANSI Parser to run on Win32 based operating systems.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -32,7 +51,6 @@
|
|||||||
// items used from other modules
|
// items used from other modules
|
||||||
int NetWriteString(char* pszString, size_t cbString);
|
int NetWriteString(char* pszString, size_t cbString);
|
||||||
TelParams Parameters;
|
TelParams Parameters;
|
||||||
extern int lftocrlf;
|
|
||||||
|
|
||||||
extern int ScreenX;
|
extern int ScreenX;
|
||||||
extern int ScreenY;
|
extern int ScreenY;
|
||||||
@ -388,12 +406,10 @@ void ConSetExtendedMode(int iFunction, BOOL bEnable)
|
|||||||
case 20: // LNM Mode CSI 20h
|
case 20: // LNM Mode CSI 20h
|
||||||
if (bEnable){
|
if (bEnable){
|
||||||
VTMode |= MODE_LNM;
|
VTMode |= MODE_LNM;
|
||||||
Parameters.nReceiveCRLF = ENUM_LF;
|
Parameters.nReceiveCRLF = ENUM_CRLF;
|
||||||
lftocrlf = 1;
|
|
||||||
}else{
|
}else{
|
||||||
VTMode &= ~MODE_LNM;
|
VTMode &= ~MODE_LNM;
|
||||||
Parameters.nReceiveCRLF = ENUM_CRLF;
|
Parameters.nReceiveCRLF = ENUM_LF;
|
||||||
lftocrlf = 0;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 25:
|
case 25:
|
||||||
|
@ -1,17 +1,36 @@
|
|||||||
/* ansiprsr.h
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* ansiprsr.h
|
||||||
*
|
*
|
||||||
* ANSI Parser header file to run on Win32 based operating systems.
|
* ANSI Parser header file to run on Win32 based operating systems.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __ANSIPRSR_H
|
#ifndef __ANSIPRSR_H
|
||||||
@ -36,11 +55,28 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
|
|||||||
|
|
||||||
typedef struct _TelParams
|
typedef struct _TelParams
|
||||||
{
|
{
|
||||||
|
int fLogging;
|
||||||
|
FILE *fplogfile;
|
||||||
|
|
||||||
|
char *pInputFile;
|
||||||
|
|
||||||
|
char * szDebugInputFile;
|
||||||
|
BOOL fDebugWait;
|
||||||
|
|
||||||
int timeOut;
|
int timeOut;
|
||||||
int fLocalEcho;
|
int fLocalEcho;
|
||||||
int fTreatLFasCRLF;
|
int fTreatLFasCRLF;
|
||||||
int fSendCROnly;
|
int fSendCROnly;
|
||||||
int nReceiveCRLF;
|
int nReceiveCRLF;
|
||||||
|
//_crlftype nReceiveCRLF;
|
||||||
|
char sleepChar;
|
||||||
|
char menuChar;
|
||||||
|
|
||||||
|
SOCKET Socket;
|
||||||
|
BOOL bVT100Mode;
|
||||||
|
|
||||||
|
char *pAltKey;
|
||||||
|
|
||||||
} TelParams;
|
} TelParams;
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,19 +1,36 @@
|
|||||||
/* cng_cipher.c
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
*
|
*
|
||||||
* Common library for Windows Console Screen IO.
|
* Microsoft openssh win32 port
|
||||||
* Contains Windows console related definition so that emulation code can draw
|
|
||||||
* on Windows console screen surface.
|
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* cng_cipher.c
|
||||||
|
*
|
||||||
|
* Openssh ciphers implemented using Microsoft Crypto Next Generation (CNG).
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
@ -1,19 +1,36 @@
|
|||||||
/* cng_cipher.h
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
*
|
*
|
||||||
* Common library for Windows Console Screen IO.
|
* Microsoft openssh win32 port
|
||||||
* Contains Windows console related definition so that emulation code can draw
|
|
||||||
* on Windows console screen surface.
|
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* cng_cipher.h
|
||||||
|
*
|
||||||
|
* Openssh ciphers implemented using Microsoft Crypto Next Generation (CNG).
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
242
contrib/win32/win32compat/cng_digest.c
Normal file
242
contrib/win32/win32compat/cng_digest.c
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
* Author: Microsoft Corp.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* cng_digest.c
|
||||||
|
*
|
||||||
|
* Openssh digests implemented using Microsoft Crypto Next Generation (CNG).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef unsigned int u_int;
|
||||||
|
typedef unsigned char u_char;
|
||||||
|
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <digest.h>
|
||||||
|
#include <ssherr.h>
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <bcrypt.h>
|
||||||
|
|
||||||
|
|
||||||
|
const u_char *sshbuf_ptr(const struct sshbuf *buf);
|
||||||
|
size_t sshbuf_len(const struct sshbuf *buf);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct ssh_digest_ctx {
|
||||||
|
int alg;
|
||||||
|
BCRYPT_ALG_HANDLE cng_alg_handle;
|
||||||
|
BCRYPT_HASH_HANDLE hash_handle;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ssh_digest {
|
||||||
|
int id;
|
||||||
|
const char *name;
|
||||||
|
size_t digest_len;
|
||||||
|
const wchar_t * cng_alg_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* NB. Indexed directly by algorithm number */
|
||||||
|
const struct ssh_digest digests[] = {
|
||||||
|
{ SSH_DIGEST_MD5, "MD5", 16, BCRYPT_MD5_ALGORITHM },
|
||||||
|
{ SSH_DIGEST_RIPEMD160, "RIPEMD160", 20, NULL }, /* not supported */
|
||||||
|
{ SSH_DIGEST_SHA1, "SHA1", 20, BCRYPT_SHA1_ALGORITHM },
|
||||||
|
{ SSH_DIGEST_SHA256, "SHA256", 32, BCRYPT_SHA256_ALGORITHM },
|
||||||
|
{ SSH_DIGEST_SHA384, "SHA384", 48, BCRYPT_SHA384_ALGORITHM },
|
||||||
|
{ SSH_DIGEST_SHA512, "SHA512", 64, BCRYPT_SHA512_ALGORITHM },
|
||||||
|
{ -1, NULL, 0, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct ssh_digest *
|
||||||
|
ssh_digest_by_alg(int alg)
|
||||||
|
{
|
||||||
|
if (alg < 0 || alg >= SSH_DIGEST_MAX)
|
||||||
|
return NULL;
|
||||||
|
if (digests[alg].id != alg) /* sanity */
|
||||||
|
return NULL;
|
||||||
|
if (digests[alg].cng_alg_name == NULL)
|
||||||
|
return NULL;
|
||||||
|
return &(digests[alg]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_alg_by_name(const char *name)
|
||||||
|
{
|
||||||
|
int alg;
|
||||||
|
|
||||||
|
for (alg = 0; digests[alg].id != -1; alg++) {
|
||||||
|
if (_stricmp(name, digests[alg].name) == 0)
|
||||||
|
return digests[alg].id;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
ssh_digest_alg_name(int alg)
|
||||||
|
{
|
||||||
|
const struct ssh_digest *digest = ssh_digest_by_alg(alg);
|
||||||
|
|
||||||
|
return digest == NULL ? NULL : digest->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
ssh_digest_bytes(int alg)
|
||||||
|
{
|
||||||
|
const struct ssh_digest *digest = ssh_digest_by_alg(alg);
|
||||||
|
|
||||||
|
return digest == NULL ? 0 : digest->digest_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
ssh_digest_blocksize(struct ssh_digest_ctx *ctx)
|
||||||
|
{
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
DWORD blocksize = 0;
|
||||||
|
DWORD count;
|
||||||
|
|
||||||
|
hr = BCryptGetProperty(ctx->cng_alg_handle, BCRYPT_HASH_BLOCK_LENGTH, (PUCHAR)&blocksize, sizeof(DWORD), &count, 0);
|
||||||
|
|
||||||
|
return (size_t)blocksize;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ssh_digest_ctx *
|
||||||
|
ssh_digest_start(int alg)
|
||||||
|
{
|
||||||
|
const struct ssh_digest *digest = ssh_digest_by_alg(alg);
|
||||||
|
struct ssh_digest_ctx *ret;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
if (digest == NULL || ((ret = (struct ssh_digest_ctx *)malloc(sizeof(*ret))) == NULL))
|
||||||
|
return NULL;
|
||||||
|
ret->alg = alg;
|
||||||
|
|
||||||
|
if ((hr = BCryptOpenAlgorithmProvider(&(ret->cng_alg_handle), digest->cng_alg_name, NULL, 0)) != S_OK){
|
||||||
|
free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((hr = BCryptCreateHash(ret->cng_alg_handle, &(ret->hash_handle), NULL, 0, NULL, 0, 0)) != S_OK)
|
||||||
|
{
|
||||||
|
BCryptCloseAlgorithmProvider(ret->cng_alg_handle, 0);
|
||||||
|
free(ret);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_copy_state(struct ssh_digest_ctx *from, struct ssh_digest_ctx *to)
|
||||||
|
{
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
if (from->alg != to->alg)
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
if ((hr = BCryptDuplicateHash(from->hash_handle, &(to->hash_handle),NULL,0,0)) != S_OK)
|
||||||
|
return SSH_ERR_LIBCRYPTO_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_update(struct ssh_digest_ctx *ctx, const void *m, size_t mlen)
|
||||||
|
{
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
if ((hr = BCryptHashData(ctx->hash_handle, (PUCHAR)m, mlen, 0)) != S_OK)
|
||||||
|
return SSH_ERR_LIBCRYPTO_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_update_buffer(struct ssh_digest_ctx *ctx, const struct sshbuf *b)
|
||||||
|
{
|
||||||
|
return ssh_digest_update(ctx, sshbuf_ptr(b), sshbuf_len(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_final(struct ssh_digest_ctx *ctx, u_char *d, size_t dlen)
|
||||||
|
{
|
||||||
|
const struct ssh_digest *digest = ssh_digest_by_alg(ctx->alg);
|
||||||
|
u_int l = dlen;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
if (dlen > UINT_MAX)
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
if (dlen < digest->digest_len) /* No truncation allowed */
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
if ((hr = BCryptFinishHash(ctx->hash_handle, d, digest->digest_len, 0)) != S_OK)
|
||||||
|
return SSH_ERR_LIBCRYPTO_ERROR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ssh_digest_free(struct ssh_digest_ctx *ctx)
|
||||||
|
{
|
||||||
|
if (ctx != NULL) {
|
||||||
|
BCryptCloseAlgorithmProvider(ctx->cng_alg_handle, 0);
|
||||||
|
BCryptDestroyHash(ctx->hash_handle);
|
||||||
|
explicit_bzero(ctx, sizeof(*ctx));
|
||||||
|
free(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_memory(int alg, const void *m, size_t mlen, u_char *d, size_t dlen)
|
||||||
|
{
|
||||||
|
const struct ssh_digest *digest = ssh_digest_by_alg(alg);
|
||||||
|
struct ssh_digest_ctx *ctx = ssh_digest_start(alg);
|
||||||
|
u_int mdlen;
|
||||||
|
|
||||||
|
if (digest == NULL)
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
if (dlen > UINT_MAX)
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
if (dlen < digest->digest_len)
|
||||||
|
return SSH_ERR_INVALID_ARGUMENT;
|
||||||
|
mdlen = dlen;
|
||||||
|
if (ssh_digest_update(ctx, m, mlen) != 0 ||
|
||||||
|
ssh_digest_final(ctx, d, dlen) != 0)
|
||||||
|
return -1;
|
||||||
|
ssh_digest_free(ctx);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const u_char *sshbuf_ptr(const struct sshbuf *buf);
|
||||||
|
size_t sshbuf_len(const struct sshbuf *buf);
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
ssh_digest_buffer(int alg, const struct sshbuf *b, u_char *d, size_t dlen)
|
||||||
|
{
|
||||||
|
return ssh_digest_memory(alg, sshbuf_ptr(b), sshbuf_len(b), d, dlen);
|
||||||
|
return 0;
|
||||||
|
}
|
183
contrib/win32/win32compat/conio.c
Normal file
183
contrib/win32/win32compat/conio.c
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* Author: Microsoft Corp.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* conio.c
|
||||||
|
*
|
||||||
|
* Inserts data into Windows Console Input. Needed WriteToConsole() API implemented.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include <console.h>
|
||||||
|
#include <conio.h>
|
||||||
|
|
||||||
|
COORD lastCursorLoc = { 0, 0 };
|
||||||
|
BYTE KeyboardState[256];
|
||||||
|
INPUT_RECORD srec;
|
||||||
|
DWORD dwGlobalConsoleMode ;
|
||||||
|
|
||||||
|
int WriteToConsole(HANDLE fd, unsigned char *buf, size_t len, size_t *dwWritten, void *flag)
|
||||||
|
{
|
||||||
|
static KEY_EVENT_RECORD *pkey;
|
||||||
|
static KEY_EVENT_RECORD *pkey2;
|
||||||
|
static INPUT_RECORD irec[2];
|
||||||
|
static BOOL bInitKeyboard = TRUE;
|
||||||
|
size_t ctr;
|
||||||
|
int rc;
|
||||||
|
DWORD dwRecords;
|
||||||
|
DWORD vkey;
|
||||||
|
BOOL bNeedToWait = TRUE;
|
||||||
|
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||||
|
|
||||||
|
int scr_width = 80; /* screen horizontal width, e.g. 80 */
|
||||||
|
int scr_height = 25; /* screen vertical length, e.g. 25 */
|
||||||
|
char tmpbuf[2];
|
||||||
|
int local_echo = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Need to set pkey and pkey2 which we use below. Initialize the keyboard state table.
|
||||||
|
*/
|
||||||
|
if (bInitKeyboard)
|
||||||
|
{
|
||||||
|
GetKeyboardState(KeyboardState);
|
||||||
|
bInitKeyboard = FALSE;
|
||||||
|
srec.EventType = KEY_EVENT;
|
||||||
|
srec.Event.KeyEvent.bKeyDown = TRUE;
|
||||||
|
srec.Event.KeyEvent.wRepeatCount = 1;
|
||||||
|
srec.Event.KeyEvent.wVirtualKeyCode = 0x10;
|
||||||
|
srec.Event.KeyEvent.wVirtualScanCode = 0x2a;
|
||||||
|
srec.Event.KeyEvent.uChar.AsciiChar = 0;
|
||||||
|
srec.Event.KeyEvent.uChar.UnicodeChar = 0;
|
||||||
|
srec.Event.KeyEvent.dwControlKeyState = 0x10;
|
||||||
|
|
||||||
|
irec[0].EventType = KEY_EVENT; /* init key down message */
|
||||||
|
pkey = &(irec[0].Event.KeyEvent);
|
||||||
|
pkey->wRepeatCount = 1;
|
||||||
|
pkey->bKeyDown = TRUE;
|
||||||
|
|
||||||
|
irec[1].EventType = KEY_EVENT; /* init key up message */
|
||||||
|
pkey2 = &(irec[1].Event.KeyEvent);
|
||||||
|
pkey2->wRepeatCount = 1;
|
||||||
|
pkey2->bKeyDown = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stream mode processing
|
||||||
|
if (local_echo)
|
||||||
|
{
|
||||||
|
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetConsoleMode(fd, &dwGlobalConsoleMode);
|
||||||
|
|
||||||
|
ctr = 0;
|
||||||
|
while (ctr < len)
|
||||||
|
{
|
||||||
|
if (local_echo)
|
||||||
|
{
|
||||||
|
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
|
||||||
|
lastCursorLoc.Y = csbi.dwCursorPosition.Y;
|
||||||
|
lastCursorLoc.X = csbi.dwCursorPosition.X;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkey->dwControlKeyState = 0x00000000;
|
||||||
|
pkey->uChar.AsciiChar = buf[ctr]; /* next char in ascii */
|
||||||
|
|
||||||
|
mbtowc(&(pkey->uChar.UnicodeChar), (const char *)&(buf[ctr]), 1);
|
||||||
|
vkey = VkKeyScan(pkey->uChar.AsciiChar);
|
||||||
|
|
||||||
|
if ((BYTE)(vkey >> 8) != 0xFF) // high order word
|
||||||
|
{
|
||||||
|
if (vkey & 0x0100 || (KeyboardState[VK_LSHIFT] & 0x80)) /* high word gives shift, ctrl, alt status */
|
||||||
|
pkey->dwControlKeyState |= SHIFT_PRESSED; /* shift key presssed*/
|
||||||
|
if (vkey & 0x0200 || (KeyboardState[VK_LCONTROL] & 0x80))
|
||||||
|
pkey->dwControlKeyState |= LEFT_CTRL_PRESSED; /* any ctrl really*/
|
||||||
|
if ((vkey & 0x0400) || (KeyboardState[VK_LMENU] & 0x80))
|
||||||
|
pkey->dwControlKeyState |= LEFT_ALT_PRESSED; /* any ALT really*/
|
||||||
|
}
|
||||||
|
if ((BYTE)vkey != 0xFF) // low order word
|
||||||
|
{
|
||||||
|
pkey->wVirtualKeyCode = (BYTE)vkey;
|
||||||
|
pkey->wVirtualScanCode = MapVirtualKey(pkey->wVirtualKeyCode, 0);
|
||||||
|
if (pkey->uChar.UnicodeChar == 0x1b) // stream mode fix for Admark ESC sequences
|
||||||
|
pkey->wVirtualKeyCode = 0x00db;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we need to mimic key up and key down */
|
||||||
|
if (pkey->dwControlKeyState & 0x0100)
|
||||||
|
{
|
||||||
|
srec.Event.KeyEvent.bKeyDown = TRUE;
|
||||||
|
srec.Event.KeyEvent.dwControlKeyState = 0x10;
|
||||||
|
WriteConsoleInput(fd, &srec, 1, &dwRecords); /* write shift down */
|
||||||
|
tmpbuf[0] = irec[0].Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
tmpbuf[1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
pkey->bKeyDown = TRUE; /*since pkey is mucked by others we do it again*/
|
||||||
|
|
||||||
|
/* dup these into key up message structure from key down message */
|
||||||
|
pkey2->wVirtualKeyCode = pkey->wVirtualKeyCode;
|
||||||
|
pkey2->wVirtualScanCode = pkey->wVirtualScanCode;
|
||||||
|
pkey2->uChar.AsciiChar = pkey->uChar.AsciiChar;
|
||||||
|
pkey2->uChar.UnicodeChar = pkey->uChar.UnicodeChar;
|
||||||
|
pkey2->dwControlKeyState = pkey->dwControlKeyState;
|
||||||
|
|
||||||
|
WriteConsoleInput(fd, irec, 2, &dwRecords); /* key down,up msgs */
|
||||||
|
tmpbuf[0] = irec[0].Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
tmpbuf[1] = '\0';
|
||||||
|
if (pkey->dwControlKeyState & 0x0100)
|
||||||
|
{
|
||||||
|
srec.Event.KeyEvent.bKeyDown = FALSE;
|
||||||
|
srec.Event.KeyEvent.dwControlKeyState = 0x0;
|
||||||
|
WriteConsoleInput(fd, &srec, 1, &dwRecords); /* write shift up */
|
||||||
|
|
||||||
|
}
|
||||||
|
//if ((local_echo))
|
||||||
|
//{
|
||||||
|
// bNeedToWait = EchoInputCharacter(buf[ctr], &csbi.dwCursorPosition, dwGlobalConsoleMode);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
ctr++;
|
||||||
|
Sleep(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
*dwWritten = len;
|
||||||
|
|
||||||
|
//netflush();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,19 +1,38 @@
|
|||||||
/* console.c
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* console.c
|
||||||
*
|
*
|
||||||
* Common library for Windows Console Screen IO.
|
* Common library for Windows Console Screen IO.
|
||||||
* Contains Windows console related definition so that emulation code can draw
|
* Contains Windows console related definition so that emulation code can draw
|
||||||
* on Windows console screen surface.
|
* on Windows console screen surface.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -1,8 +1,33 @@
|
|||||||
/* console.h
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* console.h
|
||||||
*
|
*
|
||||||
* Common library for Windows Console Screen IO.
|
* Common library for Windows Console Screen IO.
|
||||||
* Contains Windows console related definition so that emulation code can draw
|
* Contains Windows console related definition so that emulation code can draw
|
||||||
@ -11,9 +36,6 @@
|
|||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PRAGMA_CONSOLE_h
|
#ifndef __PRAGMA_CONSOLE_h
|
||||||
|
@ -54,6 +54,7 @@ extern void debug3(const char *fmt,...);
|
|||||||
extern void error(const char *fmt,...);
|
extern void error(const char *fmt,...);
|
||||||
extern void fatal(const char *fmt,...);
|
extern void fatal(const char *fmt,...);
|
||||||
|
|
||||||
|
int glob_itissshclient = 0; // ssh client turns it to 1
|
||||||
static int winsock_initialized = 0;
|
static int winsock_initialized = 0;
|
||||||
|
|
||||||
extern int logfd;
|
extern int logfd;
|
||||||
@ -1545,7 +1546,26 @@ int socketpair(int socks[2])
|
|||||||
return SOCKET_ERROR;
|
return SOCKET_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DataAvailable ( HANDLE h )
|
||||||
|
{
|
||||||
|
INPUT_RECORD irec = {0};
|
||||||
|
|
||||||
|
DWORD events_read = 0;
|
||||||
|
|
||||||
|
int ret = PeekConsoleInput (h, &irec, 1, &events_read);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (events_read) // && irec.EventType == KEY_EVENT)
|
||||||
|
{
|
||||||
|
return events_read ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int peekConsoleRead(int sfd)
|
int peekConsoleRead(int sfd)
|
||||||
{
|
{
|
||||||
DWORD sleep_time = 0;
|
DWORD sleep_time = 0;
|
||||||
@ -2391,8 +2411,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
|||||||
SOCKET sock;
|
SOCKET sock;
|
||||||
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
int sfd_type = get_sfd_type(sfd);
|
||||||
|
|
||||||
switch(get_sfd_type(sfd))
|
switch (sfd_type)
|
||||||
{
|
{
|
||||||
case SFD_TYPE_SOCKET:
|
case SFD_TYPE_SOCKET:
|
||||||
{
|
{
|
||||||
@ -2450,8 +2471,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
|||||||
|
|
||||||
case SFD_TYPE_FD:
|
case SFD_TYPE_FD:
|
||||||
case SFD_TYPE_PIPE:
|
case SFD_TYPE_PIPE:
|
||||||
case SFD_TYPE_CONSOLE:
|
//case SFD_TYPE_CONSOLE:
|
||||||
{
|
{
|
||||||
|
|
||||||
ret = _read(sfd_to_fd(sfd), dst, max);
|
ret = _read(sfd_to_fd(sfd), dst, max);
|
||||||
|
|
||||||
if (FD_ISSET(sfd_to_fd(sfd), &debug_sfds))
|
if (FD_ISSET(sfd_to_fd(sfd), &debug_sfds))
|
||||||
@ -2470,6 +2492,25 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
|||||||
sfd, GetLastError());
|
sfd, GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SFD_TYPE_CONSOLE:
|
||||||
|
{
|
||||||
|
//if (sfd_type == SFD_TYPE_CONSOLE) {
|
||||||
|
// we could be send here due to ctrl-c input, so no data to read
|
||||||
|
//if ( DataAvailable (sfd_to_handle(sfd)) <=0 )
|
||||||
|
//return 1; // no data to read
|
||||||
|
//}
|
||||||
|
ret = ReadConsoleForTermEmul( sfd_to_handle(sfd), dst, max);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
error("read from pipe/console sfd [%d] failed with error code [%d]",
|
||||||
|
sfd, GetLastError());
|
||||||
|
}
|
||||||
|
if (ret == 0)
|
||||||
|
return 0; //1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 99:
|
case 99:
|
||||||
@ -2519,7 +2560,11 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max)
|
|||||||
|
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
switch(get_sfd_type(sfd))
|
int sfd_type = get_sfd_type(sfd);
|
||||||
|
if ( (glob_itissshclient) && ( sfd_type == SFD_TYPE_CONSOLE ) )
|
||||||
|
sfd_type = SFD_TYPE_PIPE ; // client write type uses _write() in place ofn console insertion
|
||||||
|
|
||||||
|
switch(sfd_type)
|
||||||
{
|
{
|
||||||
case SFD_TYPE_SOCKET:
|
case SFD_TYPE_SOCKET:
|
||||||
{
|
{
|
||||||
@ -2616,7 +2661,7 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max)
|
|||||||
|
|
||||||
case SFD_TYPE_FD:
|
case SFD_TYPE_FD:
|
||||||
case SFD_TYPE_PIPE:
|
case SFD_TYPE_PIPE:
|
||||||
case SFD_TYPE_CONSOLE:
|
//case SFD_TYPE_CONSOLE:
|
||||||
{
|
{
|
||||||
ret = _write(sfd_to_fd(sfd), buf, max);
|
ret = _write(sfd_to_fd(sfd), buf, max);
|
||||||
|
|
||||||
@ -2649,6 +2694,15 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SFD_TYPE_CONSOLE:
|
||||||
|
{
|
||||||
|
//ret = _write(sfd_to_fd(sfd), buf, max);
|
||||||
|
DWORD dwWritten = 0 ;
|
||||||
|
ret = WriteToConsole(sfd_to_handle(sfd), buf, max, &dwWritten, 0) ;
|
||||||
|
ret = max ;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
762
contrib/win32/win32compat/tncon.c
Normal file
762
contrib/win32/win32compat/tncon.c
Normal file
@ -0,0 +1,762 @@
|
|||||||
|
/*
|
||||||
|
* Author: Microsoft Corp.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* tncon.c
|
||||||
|
*
|
||||||
|
* Console reading calls for building an emulator over Windows Console. MS win32 port of ssh.exe client uses it.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include "ansiprsr.h"
|
||||||
|
#include "tncon.h"
|
||||||
|
#include "tnnet.h"
|
||||||
|
|
||||||
|
extern bool gbVTAppMode;
|
||||||
|
|
||||||
|
char *glob_out = NULL ;
|
||||||
|
int glob_outlen = 0;
|
||||||
|
int glob_space = 0;
|
||||||
|
|
||||||
|
// For our case, in NetWriteString2(), we do not use socket, but write the out going data to
|
||||||
|
// a global buffer setup by ReadConsoleForTermEmul() function below
|
||||||
|
int NetWriteString2(SOCKET sock, char* source, size_t len, int options)
|
||||||
|
{
|
||||||
|
while ( len > 0 ) {
|
||||||
|
//printf("[%c]", *source);
|
||||||
|
if (glob_outlen >= glob_space)
|
||||||
|
return glob_outlen; // no more room to copy, this much got done
|
||||||
|
*glob_out++ = *source++ ;
|
||||||
|
len--;
|
||||||
|
glob_outlen++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return glob_outlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
TelParams Parameters;
|
||||||
|
TelParams* pParams = &Parameters ;
|
||||||
|
|
||||||
|
void ConInputInitParams(void)
|
||||||
|
{
|
||||||
|
memset( &Parameters, '\0', sizeof( TelParams ) );
|
||||||
|
|
||||||
|
// set default values
|
||||||
|
Parameters.szDebugInputFile = NULL;
|
||||||
|
Parameters.fDebugWait= FALSE;
|
||||||
|
Parameters.nReceiveCRLF = ENUM_LF;
|
||||||
|
//Parameters.fSendCROnly = TRUE; //FALSE;
|
||||||
|
Parameters.sleepChar = '`';
|
||||||
|
Parameters.menuChar = '\035'; // CTRL-]
|
||||||
|
Parameters.pAltKey = "\x01"; // default
|
||||||
|
|
||||||
|
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
|
DWORD dwMode;
|
||||||
|
GetConsoleMode(hInput, &dwMode);
|
||||||
|
SetConsoleMode(hInput, (dwMode & ~(ENABLE_LINE_INPUT |
|
||||||
|
ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) | ENABLE_WINDOW_INPUT );
|
||||||
|
|
||||||
|
extern int glob_itissshclient;
|
||||||
|
glob_itissshclient = 1; // tell our contrib/win32/win32compat/socket.c code it is for ssh client side
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char NAWSSTR[] = { "\xff\xfa\x1f\x00\x00\x00\x00\xff\xf0"};
|
||||||
|
|
||||||
|
extern int ScreenY;
|
||||||
|
extern int ScreenX;
|
||||||
|
|
||||||
|
extern int ScrollTop;
|
||||||
|
extern int ScrollBottom;
|
||||||
|
|
||||||
|
int DataAvailableCount ( HANDLE h )
|
||||||
|
{
|
||||||
|
INPUT_RECORD irec[64];
|
||||||
|
|
||||||
|
DWORD events_read = 0;
|
||||||
|
|
||||||
|
int ret = PeekConsoleInput (h, &irec, 64, &events_read);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (events_read) // && irec.EventType == KEY_EVENT)
|
||||||
|
{
|
||||||
|
return events_read ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
|
||||||
|
{
|
||||||
|
//HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
|
HANDLE hHandle[] = {hInput, NULL};
|
||||||
|
DWORD nHandle = 1;
|
||||||
|
DWORD dwInput;
|
||||||
|
unsigned char szResponse[50];
|
||||||
|
INPUT_RECORD InputRecord;
|
||||||
|
DWORD dwControlKeyState, rc;
|
||||||
|
BOOL bCapsOn, bShift;
|
||||||
|
char aChar;
|
||||||
|
unsigned char octets[20];
|
||||||
|
|
||||||
|
glob_out = destin ;
|
||||||
|
glob_space = destinlen ;
|
||||||
|
glob_outlen = 0;
|
||||||
|
|
||||||
|
int dataavail = DataAvailableCount (hInput) ;
|
||||||
|
|
||||||
|
while (dataavail > 0)
|
||||||
|
{
|
||||||
|
if (glob_outlen >= destinlen)
|
||||||
|
return glob_outlen ; // user given space is full, so return with whatever we read so far
|
||||||
|
|
||||||
|
//rc = WaitForMultipleObjects(nHandle, hHandle, FALSE, INFINITE);
|
||||||
|
rc = WAIT_OBJECT_0 ;
|
||||||
|
switch (rc)
|
||||||
|
{
|
||||||
|
case WAIT_OBJECT_0:
|
||||||
|
{
|
||||||
|
ReadConsoleInputW(hInput, &InputRecord, 1, &dwInput);
|
||||||
|
dataavail--;
|
||||||
|
switch (InputRecord.EventType)
|
||||||
|
{
|
||||||
|
case WINDOW_BUFFER_SIZE_EVENT:
|
||||||
|
memcpy(szResponse,NAWSSTR,9);
|
||||||
|
szResponse[4] = ConScreenSizeX();
|
||||||
|
szResponse[6] = ConWindowSizeY(); // visible window size - not buffer
|
||||||
|
ScreenX = ConScreenSizeX();
|
||||||
|
ScreenY = ConWindowSizeY(); // visible window size - not buffer
|
||||||
|
//NetWriteString2(pParams->Socket,(char *) szResponse, 9,0); // it needs to got out to remote sshd
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FOCUS_EVENT:
|
||||||
|
case MENU_EVENT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_EVENT:
|
||||||
|
// Remove all of the keys we don't care about
|
||||||
|
bCapsOn = (InputRecord.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON);
|
||||||
|
bShift = (InputRecord.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED);
|
||||||
|
dwControlKeyState = InputRecord.Event.KeyEvent.dwControlKeyState & ~(CAPSLOCK_ON | ENHANCED_KEY | NUMLOCK_ON | SCROLLLOCK_ON );
|
||||||
|
if (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
|
||||||
|
{
|
||||||
|
if (InputRecord.Event.KeyEvent.bKeyDown)
|
||||||
|
{
|
||||||
|
ConRestoreViewRect();
|
||||||
|
int n = WideCharToMultiByte(GetConsoleCP(),0,&(InputRecord.Event.KeyEvent.uChar.UnicodeChar),1,(LPSTR)octets,20,NULL,NULL);
|
||||||
|
|
||||||
|
if (pParams->fLocalEcho){
|
||||||
|
// ConWriteCharW( InputRecord.Event.KeyEvent.uChar.UnicodeChar );
|
||||||
|
ConWriteString((char *)octets,n);
|
||||||
|
}
|
||||||
|
if ((dwControlKeyState == LEFT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState == RIGHT_ALT_PRESSED))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)pParams->pAltKey, 1, 0);
|
||||||
|
|
||||||
|
switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
|
||||||
|
{
|
||||||
|
case 0xd:
|
||||||
|
if (pParams->nReceiveCRLF == ENUM_LF)
|
||||||
|
NetWriteString2(pParams->Socket, "\n", 1, 0);
|
||||||
|
else
|
||||||
|
NetWriteString2(pParams->Socket, "\r\n", 2, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_ESCAPE:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)octets, n, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Non Unicode key
|
||||||
|
if (InputRecord.Event.KeyEvent.bKeyDown)
|
||||||
|
{
|
||||||
|
|
||||||
|
switch(InputRecord.Event.KeyEvent.wVirtualKeyCode)
|
||||||
|
{
|
||||||
|
case VK_UP:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_UP_ARROW:UP_ARROW), 3, 0);
|
||||||
|
break;
|
||||||
|
case VK_DOWN:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_DOWN_ARROW:DOWN_ARROW), 3, 0);
|
||||||
|
break;
|
||||||
|
case VK_RIGHT:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_RIGHT_ARROW:RIGHT_ARROW), 3, 0);
|
||||||
|
break;
|
||||||
|
case VK_LEFT:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_LEFT_ARROW:LEFT_ARROW), 3, 0);
|
||||||
|
break;
|
||||||
|
case VK_F1:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
{
|
||||||
|
if (pParams->bVT100Mode)
|
||||||
|
NetWriteString2(pParams->Socket, (char *)VT100_PF1_KEY, strlen(VT100_PF1_KEY), 0);
|
||||||
|
else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF1_KEY, strlen(PF1_KEY), 0);
|
||||||
|
}
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF1_KEY, strlen(SHIFT_PF1_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF1_KEY, strlen(CTRL_PF1_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF1_KEY, strlen(ALT_PF1_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF1_KEY, strlen(SHIFT_ALT_CTRL_PF1_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF1_KEY, strlen(ALT_CTRL_PF1_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF1_KEY, strlen(SHIFT_ALT_PF1_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF1_KEY, strlen(SHIFT_CTRL_PF1_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F2:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
{
|
||||||
|
if (pParams->bVT100Mode)
|
||||||
|
NetWriteString2(pParams->Socket, (char *)VT100_PF2_KEY, strlen(VT100_PF2_KEY), 0);
|
||||||
|
else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF2_KEY, strlen(PF2_KEY), 0);
|
||||||
|
}
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF2_KEY, strlen(SHIFT_PF2_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF2_KEY, strlen(CTRL_PF2_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF2_KEY, strlen(ALT_PF2_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF2_KEY, strlen(SHIFT_ALT_CTRL_PF2_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF2_KEY, strlen(ALT_CTRL_PF2_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF2_KEY, strlen(SHIFT_ALT_PF2_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF2_KEY, strlen(SHIFT_CTRL_PF2_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F3:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
{
|
||||||
|
if (pParams->bVT100Mode)
|
||||||
|
NetWriteString2(pParams->Socket, (char *)VT100_PF3_KEY, strlen(VT100_PF3_KEY), 0);
|
||||||
|
else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF3_KEY, strlen(PF3_KEY), 0);
|
||||||
|
}
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF3_KEY, strlen(SHIFT_PF3_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF3_KEY, strlen(CTRL_PF3_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF3_KEY, strlen(ALT_PF3_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF3_KEY, strlen(SHIFT_ALT_CTRL_PF3_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF3_KEY, strlen(ALT_CTRL_PF3_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF3_KEY, strlen(SHIFT_ALT_PF3_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF3_KEY, strlen(SHIFT_CTRL_PF3_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F4:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
{
|
||||||
|
if (pParams->bVT100Mode)
|
||||||
|
NetWriteString2(pParams->Socket, (char *)VT100_PF4_KEY, strlen(VT100_PF4_KEY), 0);
|
||||||
|
else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF4_KEY, strlen(PF4_KEY), 0);
|
||||||
|
}
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF4_KEY, strlen(SHIFT_PF4_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF4_KEY, strlen(CTRL_PF4_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF4_KEY, strlen(ALT_PF4_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF4_KEY, strlen(SHIFT_ALT_CTRL_PF4_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF4_KEY, strlen(ALT_CTRL_PF4_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF4_KEY, strlen(SHIFT_ALT_PF4_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF4_KEY, strlen(SHIFT_CTRL_PF4_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F5:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
{
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF5_KEY, strlen(PF5_KEY), 0);
|
||||||
|
}
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF5_KEY, strlen(SHIFT_PF5_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF5_KEY, strlen(CTRL_PF5_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF5_KEY, strlen(ALT_PF5_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF5_KEY, strlen(SHIFT_ALT_CTRL_PF5_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF5_KEY, strlen(ALT_CTRL_PF5_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF5_KEY, strlen(SHIFT_ALT_PF5_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF5_KEY, strlen(SHIFT_CTRL_PF5_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F6:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF6_KEY, strlen(PF6_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF6_KEY, strlen(SHIFT_PF6_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF6_KEY, strlen(CTRL_PF6_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF6_KEY, strlen(ALT_PF6_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF6_KEY, strlen(SHIFT_ALT_CTRL_PF6_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF6_KEY, strlen(ALT_CTRL_PF6_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF6_KEY, strlen(SHIFT_ALT_PF6_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF6_KEY, strlen(SHIFT_CTRL_PF6_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F7:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF7_KEY, strlen(PF7_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF7_KEY, strlen(SHIFT_PF7_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF7_KEY, strlen(CTRL_PF7_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF7_KEY, strlen(ALT_PF7_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF7_KEY, strlen(SHIFT_ALT_CTRL_PF7_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF7_KEY, strlen(ALT_CTRL_PF7_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF7_KEY, strlen(SHIFT_ALT_PF7_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF7_KEY, strlen(SHIFT_CTRL_PF7_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F8:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF8_KEY, strlen(PF8_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF8_KEY, strlen(SHIFT_PF8_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF8_KEY, strlen(CTRL_PF8_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF8_KEY, strlen(ALT_PF8_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF8_KEY, strlen(SHIFT_ALT_CTRL_PF8_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF8_KEY, strlen(ALT_CTRL_PF8_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF8_KEY, strlen(SHIFT_ALT_PF8_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF8_KEY, strlen(SHIFT_CTRL_PF8_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F9:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF9_KEY, strlen(PF9_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF9_KEY, strlen(SHIFT_PF9_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF9_KEY, strlen(CTRL_PF9_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF9_KEY, strlen(ALT_PF9_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF9_KEY, strlen(SHIFT_ALT_CTRL_PF9_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF9_KEY, strlen(ALT_CTRL_PF9_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF9_KEY, strlen(SHIFT_ALT_PF9_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF9_KEY, strlen(SHIFT_CTRL_PF9_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F10:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF10_KEY, strlen(PF10_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF10_KEY, strlen(SHIFT_PF10_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF10_KEY, strlen(CTRL_PF10_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF10_KEY, strlen(ALT_PF10_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF10_KEY, strlen(SHIFT_ALT_CTRL_PF10_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF10_KEY, strlen(ALT_CTRL_PF10_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF10_KEY, strlen(SHIFT_ALT_PF10_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF10_KEY, strlen(SHIFT_CTRL_PF10_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F11:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF11_KEY, strlen(PF11_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF11_KEY, strlen(SHIFT_PF11_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF11_KEY, strlen(CTRL_PF11_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF11_KEY, strlen(ALT_PF11_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF11_KEY, strlen(SHIFT_ALT_CTRL_PF11_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF11_KEY, strlen(ALT_CTRL_PF11_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF11_KEY, strlen(SHIFT_ALT_PF11_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF11_KEY, strlen(SHIFT_CTRL_PF11_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_F12:
|
||||||
|
if ( dwControlKeyState == 0 )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PF12_KEY, strlen(PF12_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == SHIFT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_PF12_KEY, strlen(SHIFT_PF12_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_CTRL_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_CTRL_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)CTRL_PF12_KEY, strlen(CTRL_PF12_KEY), 0);
|
||||||
|
else if ( dwControlKeyState == LEFT_ALT_PRESSED ||
|
||||||
|
dwControlKeyState == RIGHT_ALT_PRESSED )
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_PF12_KEY, strlen(ALT_PF12_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) )
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF12_KEY, strlen(SHIFT_ALT_CTRL_PF12_KEY), 0);
|
||||||
|
else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF12_KEY, strlen(ALT_CTRL_PF12_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & RIGHT_ALT_PRESSED) ||
|
||||||
|
(dwControlKeyState & LEFT_ALT_PRESSED) ))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF12_KEY, strlen(SHIFT_ALT_PF12_KEY), 0);
|
||||||
|
else if((dwControlKeyState & SHIFT_PRESSED)
|
||||||
|
&&
|
||||||
|
((dwControlKeyState & LEFT_CTRL_PRESSED) ||
|
||||||
|
(dwControlKeyState & RIGHT_CTRL_PRESSED)))
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF12_KEY, strlen(SHIFT_CTRL_PF12_KEY), 0);
|
||||||
|
break;
|
||||||
|
case VK_PRIOR:
|
||||||
|
#ifdef PHYS_KEY_MAP
|
||||||
|
NetWriteString2(pParams->Socket, (char *)REMOVE_KEY,4, 0);
|
||||||
|
#else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PREV_KEY, 4, 0);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case VK_NEXT:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)NEXT_KEY, 4, 0);
|
||||||
|
break;
|
||||||
|
case VK_END:
|
||||||
|
#ifdef PHYS_KEY_MAP
|
||||||
|
NetWriteString2(pParams->Socket, (char *)PREV_KEY,4, 0);
|
||||||
|
#else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SELECT_KEY, 4, 0);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_HOME:
|
||||||
|
#ifdef PHYS_KEY_MAP
|
||||||
|
NetWriteString2(pParams->Socket, (char *)INSERT_KEY,4, 0);
|
||||||
|
#else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)FIND_KEY, 4, 0);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case VK_INSERT:
|
||||||
|
#ifdef PHYS_KEY_MAP
|
||||||
|
NetWriteString2(pParams->Socket, (char *)FIND_KEY,4, 0);
|
||||||
|
#else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)INSERT_KEY, 4, 0);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case VK_DELETE:
|
||||||
|
#ifdef PHYS_KEY_MAP
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SELECT_KEY,4, 0);
|
||||||
|
#else
|
||||||
|
NetWriteString2(pParams->Socket, (char *)REMOVE_KEY, 4, 0);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case VK_TAB:
|
||||||
|
if (dwControlKeyState == SHIFT_PRESSED)
|
||||||
|
NetWriteString2(pParams->Socket, (char *)SHIFT_TAB_KEY, 3, 0);
|
||||||
|
break;
|
||||||
|
case VK_ESCAPE:
|
||||||
|
NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0);
|
||||||
|
break;
|
||||||
|
case VK_SHIFT:
|
||||||
|
case VK_CONTROL:
|
||||||
|
case VK_CAPITAL:
|
||||||
|
// NOP on these
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
aChar = InputRecord.Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
NetWriteString2(pParams->Socket, (char *)&aChar, 1, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return glob_outlen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return glob_outlen ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,17 +1,36 @@
|
|||||||
/* tncon.h
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* tncon.h
|
||||||
*
|
*
|
||||||
* Contains terminal emulation console related key definition
|
* Contains terminal emulation console related key definition
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
#ifndef __TNCON_H
|
#ifndef __TNCON_H
|
||||||
#define __TNCON_H
|
#define __TNCON_H
|
||||||
|
@ -1,17 +1,36 @@
|
|||||||
/* tnnet.c
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* tnnet.c
|
||||||
*
|
*
|
||||||
* Contains terminal emulation related network calls to invoke ANSI parsing engine
|
* Contains terminal emulation related network calls to invoke ANSI parsing engine
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -1,17 +1,36 @@
|
|||||||
/* tnnet.h
|
/*
|
||||||
* Author: Pragma Systems, Inc. <www.pragmasys.com>
|
* Author: Microsoft Corp.
|
||||||
* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port
|
*
|
||||||
* Copyright (c) 2011, 2015 Pragma Systems, Inc.
|
* Copyright (c) 2015 Microsoft Corp.
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
|
*
|
||||||
|
* Microsoft openssh win32 port
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
/* tnnet.h
|
||||||
*
|
*
|
||||||
* Contains terminal emulation related network calls to invoke ANSI parsing engine
|
* Contains terminal emulation related network calls to invoke ANSI parsing engine
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice.
|
|
||||||
* 2. Binaries produced provide no direct or implied warranties or any
|
|
||||||
* guarantee of performance or suitability.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TNNET_H
|
#ifndef __TNNET_H
|
||||||
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis
|
|
12
d2utmpa00672
12
d2utmpa00672
@ -1,12 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
MIIBuwIBAAKBgQC8GRz9p5YiVi9BA7jNO3MXV2NkPlMfCv2xjieBE6bflmHKoKhC
|
|
||||||
ewlyrk1SfLJQgVbOZvdrgtsuYGgKfpqu8qWlVnEHOLYSa6f6CDcjRXa5X+T2+tBZ
|
|
||||||
zYZ7UBlEFuDLoCEpSOopsDzPz+wvyGBH7/DPtHhbLB/ipIZYXMe/QXcyFwIVAIA9
|
|
||||||
pz8MNAL+c9x9cNW9V40GIlnBAoGAWXg5YYAHb/+ZRHXBTTULmY8LT8Mhp8JDrIWY
|
|
||||||
TE+JHlFmGtHJsajoQNo5yFCj6ep1YqeKSZdj3x0JXSJDLLQNuiaGL74MdEasYt3g
|
|
||||||
rG04HE7k3tXfSwSM0cKhSFU/MKo9rhXStRcKdG5ZN4d+pTnoyV/ncfooiRJprqXH
|
|
||||||
l4yv2vMCgYEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sK
|
|
||||||
sus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLK
|
|
||||||
bbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6jsCFH3IbB4V
|
|
||||||
XAMosp5QzPxxeQQtAjVD
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
|
||||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
|
||||||
QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+
|
|
||||||
TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA
|
|
||||||
AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi
|
|
||||||
yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc=
|
|
||||||
-----END OPENSSH PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis
|
|
27
d2utmpa02828
27
d2utmpa02828
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAupkFt/flL8uwzwiXemhydEVw5y/jQu1bAvklAL6LMjMG9z68
|
|
||||||
YxaG8iduMpehxKXR75pWzZIqTm3sN0/3azUNECvx+Frf+5pCHcTeiGxfYaRWi7fB
|
|
||||||
cndMne3KXcRh42FRI7lAR4LDiP9pNld82cf3N9V/O2Y8G9fCTPAyjZP3sCgY9TGV
|
|
||||||
Q3AXSFkE+VjkT5qQlVewnixNU4l3OW9v9sDTjgXSj7g2AQxnT0oag/dSGl5iLPSh
|
|
||||||
VKOIxQRP1fiun3rFJ4LnZ6LinYRc0qJKF2yKRTcouS9k1EbUvXm8JtGZGs9sVvOg
|
|
||||||
yem0jLbjKoVA7CTmRZh4fDZ08Lkgz1FV4Zc22QIDAQABAoIBAGkkUFSZGksUO0xt
|
|
||||||
Su1ubQ+XEUczdJsBo4bJXFBPDZ/7oLEwaHZs+xz3muBnEH/9741TKhYrhisrRS7l
|
|
||||||
oESIYBP8rxuCGTNseFTN2ZaFejlKoHmZ0Sbukf1rP9wWDBJTg6TdfZrN0+AeCurT
|
|
||||||
4UXVpzeO1WJi+Pu3V4SC0/lypt5aw2F1urfoWSaUR43xiYpnjMNQ6dDvVoXA4R2X
|
|
||||||
lMvvdAimTyA3XFDQILlUz6UHH01nEDO6n3T7VjB8UxiJrV5Oyy/aREBIJRiEHf5t
|
|
||||||
dkZjVmtoKhAxKsOCyne/BZ3G1dYIGAhEM/SPqMQtPWy7U95ZaKQbF/Y5BhZb+5d6
|
|
||||||
88HG6QECgYEA3VXddhNh8Ore1rrmlG/5/hwFg9BfP74Gt+lZcmT1Gwh9EBdcn3he
|
|
||||||
xn4kBiw3m1kYyJw3wUfg/zINerqPz57EV669aVaDOVXbqTsFHOsFa74wMERYfV+/
|
|
||||||
eBn7lFdwxOXq4vfDMzq0Ph+wtFvA+C2IkQVk60PR94dJMTn5VLm26nsCgYEA19Jm
|
|
||||||
Hfvm/P/9oc4+rtkTUrs5BDHloBJ28TydZ84bI4B4n1/pJOWKrZ4y4kATic00+otW
|
|
||||||
sncOVAeFq7Nj8yJ1XRCxKnjbhR2q/FZQf8f0c5xVWh4iXRt6Zf5hVcCmkle8SV6M
|
|
||||||
vQb5zpRbzQTx+nrbut6RMbQPVHy5BIXhdzIeHbsCgYAik41bKr/8INTa+quWuL93
|
|
||||||
AO2jn+OhU5A9HskIY9kedf8DioK/rtAvdfkuta2iKRMEE9Np8E6nzyvn5kkdCBJo
|
|
||||||
GDYixI8PX+hG0Z+E2von0Lg6chLY0yJYIsb4b4iAWeKNvmLSF/OcWNsD8el9W6+f
|
|
||||||
6BXR4vBkGNBITmQy5ig7DQKBgQCcfVLOKvkyOewOhx2sano4YsjU4dk+WCUmhm0b
|
|
||||||
97Z155GO/lxvBIGpoiwDIbMJGGJxyNb0UJ9zDoE+HrU6dqHi+Vd9FGUYAIsarPtx
|
|
||||||
q+r0aUb6MR95o5L8oZayNx6Qvk0oZgZmichYofpujkdm9+6bcQaWo5j6CfWd8fWq
|
|
||||||
GAz+QQKBgHBOyyzXC7HSy+IAu/Jo3kpkgTqjYUIsmig5QKamHo/5FP8FCq4ZVR1L
|
|
||||||
CYrpCVzbvjAjBnSm1/3UngjS3PPldUYjGIbez3gK/jJTfnzfsVghnQsZOd97YxuX
|
|
||||||
TusifzCTcDZEUIZSdxL72EpbGtkYqVeDl4SjU0ZMfSIyiEsfyDFw
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1,5 +0,0 @@
|
|||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g
|
|
||||||
uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis
|
|
12
d2utmpa05272
12
d2utmpa05272
@ -1,12 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
MIIBuwIBAAKBgQC8GRz9p5YiVi9BA7jNO3MXV2NkPlMfCv2xjieBE6bflmHKoKhC
|
|
||||||
ewlyrk1SfLJQgVbOZvdrgtsuYGgKfpqu8qWlVnEHOLYSa6f6CDcjRXa5X+T2+tBZ
|
|
||||||
zYZ7UBlEFuDLoCEpSOopsDzPz+wvyGBH7/DPtHhbLB/ipIZYXMe/QXcyFwIVAIA9
|
|
||||||
pz8MNAL+c9x9cNW9V40GIlnBAoGAWXg5YYAHb/+ZRHXBTTULmY8LT8Mhp8JDrIWY
|
|
||||||
TE+JHlFmGtHJsajoQNo5yFCj6ep1YqeKSZdj3x0JXSJDLLQNuiaGL74MdEasYt3g
|
|
||||||
rG04HE7k3tXfSwSM0cKhSFU/MKo9rhXStRcKdG5ZN4d+pTnoyV/ncfooiRJprqXH
|
|
||||||
l4yv2vMCgYEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sK
|
|
||||||
sus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLK
|
|
||||||
bbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6jsCFH3IbB4V
|
|
||||||
XAMosp5QzPxxeQQtAjVD
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis
|
|
@ -1,5 +0,0 @@
|
|||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g
|
|
||||||
uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
12
d2utmpa07284
12
d2utmpa07284
@ -1,12 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
MIIBuwIBAAKBgQC8GRz9p5YiVi9BA7jNO3MXV2NkPlMfCv2xjieBE6bflmHKoKhC
|
|
||||||
ewlyrk1SfLJQgVbOZvdrgtsuYGgKfpqu8qWlVnEHOLYSa6f6CDcjRXa5X+T2+tBZ
|
|
||||||
zYZ7UBlEFuDLoCEpSOopsDzPz+wvyGBH7/DPtHhbLB/ipIZYXMe/QXcyFwIVAIA9
|
|
||||||
pz8MNAL+c9x9cNW9V40GIlnBAoGAWXg5YYAHb/+ZRHXBTTULmY8LT8Mhp8JDrIWY
|
|
||||||
TE+JHlFmGtHJsajoQNo5yFCj6ep1YqeKSZdj3x0JXSJDLLQNuiaGL74MdEasYt3g
|
|
||||||
rG04HE7k3tXfSwSM0cKhSFU/MKo9rhXStRcKdG5ZN4d+pTnoyV/ncfooiRJprqXH
|
|
||||||
l4yv2vMCgYEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sK
|
|
||||||
sus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLK
|
|
||||||
bbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6jsCFH3IbB4V
|
|
||||||
XAMosp5QzPxxeQQtAjVD
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis
|
|
27
d2utmpa08080
27
d2utmpa08080
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAupkFt/flL8uwzwiXemhydEVw5y/jQu1bAvklAL6LMjMG9z68
|
|
||||||
YxaG8iduMpehxKXR75pWzZIqTm3sN0/3azUNECvx+Frf+5pCHcTeiGxfYaRWi7fB
|
|
||||||
cndMne3KXcRh42FRI7lAR4LDiP9pNld82cf3N9V/O2Y8G9fCTPAyjZP3sCgY9TGV
|
|
||||||
Q3AXSFkE+VjkT5qQlVewnixNU4l3OW9v9sDTjgXSj7g2AQxnT0oag/dSGl5iLPSh
|
|
||||||
VKOIxQRP1fiun3rFJ4LnZ6LinYRc0qJKF2yKRTcouS9k1EbUvXm8JtGZGs9sVvOg
|
|
||||||
yem0jLbjKoVA7CTmRZh4fDZ08Lkgz1FV4Zc22QIDAQABAoIBAGkkUFSZGksUO0xt
|
|
||||||
Su1ubQ+XEUczdJsBo4bJXFBPDZ/7oLEwaHZs+xz3muBnEH/9741TKhYrhisrRS7l
|
|
||||||
oESIYBP8rxuCGTNseFTN2ZaFejlKoHmZ0Sbukf1rP9wWDBJTg6TdfZrN0+AeCurT
|
|
||||||
4UXVpzeO1WJi+Pu3V4SC0/lypt5aw2F1urfoWSaUR43xiYpnjMNQ6dDvVoXA4R2X
|
|
||||||
lMvvdAimTyA3XFDQILlUz6UHH01nEDO6n3T7VjB8UxiJrV5Oyy/aREBIJRiEHf5t
|
|
||||||
dkZjVmtoKhAxKsOCyne/BZ3G1dYIGAhEM/SPqMQtPWy7U95ZaKQbF/Y5BhZb+5d6
|
|
||||||
88HG6QECgYEA3VXddhNh8Ore1rrmlG/5/hwFg9BfP74Gt+lZcmT1Gwh9EBdcn3he
|
|
||||||
xn4kBiw3m1kYyJw3wUfg/zINerqPz57EV669aVaDOVXbqTsFHOsFa74wMERYfV+/
|
|
||||||
eBn7lFdwxOXq4vfDMzq0Ph+wtFvA+C2IkQVk60PR94dJMTn5VLm26nsCgYEA19Jm
|
|
||||||
Hfvm/P/9oc4+rtkTUrs5BDHloBJ28TydZ84bI4B4n1/pJOWKrZ4y4kATic00+otW
|
|
||||||
sncOVAeFq7Nj8yJ1XRCxKnjbhR2q/FZQf8f0c5xVWh4iXRt6Zf5hVcCmkle8SV6M
|
|
||||||
vQb5zpRbzQTx+nrbut6RMbQPVHy5BIXhdzIeHbsCgYAik41bKr/8INTa+quWuL93
|
|
||||||
AO2jn+OhU5A9HskIY9kedf8DioK/rtAvdfkuta2iKRMEE9Np8E6nzyvn5kkdCBJo
|
|
||||||
GDYixI8PX+hG0Z+E2von0Lg6chLY0yJYIsb4b4iAWeKNvmLSF/OcWNsD8el9W6+f
|
|
||||||
6BXR4vBkGNBITmQy5ig7DQKBgQCcfVLOKvkyOewOhx2sano4YsjU4dk+WCUmhm0b
|
|
||||||
97Z155GO/lxvBIGpoiwDIbMJGGJxyNb0UJ9zDoE+HrU6dqHi+Vd9FGUYAIsarPtx
|
|
||||||
q+r0aUb6MR95o5L8oZayNx6Qvk0oZgZmichYofpujkdm9+6bcQaWo5j6CfWd8fWq
|
|
||||||
GAz+QQKBgHBOyyzXC7HSy+IAu/Jo3kpkgTqjYUIsmig5QKamHo/5FP8FCq4ZVR1L
|
|
||||||
CYrpCVzbvjAjBnSm1/3UngjS3PPldUYjGIbez3gK/jJTfnzfsVghnQsZOd97YxuX
|
|
||||||
TusifzCTcDZEUIZSdxL72EpbGtkYqVeDl4SjU0ZMfSIyiEsfyDFw
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
|
||||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
|
||||||
QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+
|
|
||||||
TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA
|
|
||||||
AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi
|
|
||||||
yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc=
|
|
||||||
-----END OPENSSH PRIVATE KEY-----
|
|
27
d2utmpa08916
27
d2utmpa08916
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpQIBAAKCAQEAnIuKMu05Sh8vXfPuLJYZuujMxPYWhm2rCN1sLei6q7yul9I7
|
|
||||||
VQgPtOJwVqAR+5vvFCa3epqpXUrDlRE4mRS5uLDZfeTJioq1h5qEnictdsMqL0F2
|
|
||||||
JMmER9E+CdpQ52uiW4Aj7mmaYCKvPLMW/2fEVX/X40rXemjSMjPeQWpUZy/N/ZmC
|
|
||||||
cV6XzzTAZFxhA98P5uUuhoMV/Faz9XAujfpF2qOZ8nLWahWQEG7Y9dtiwHhTVjel
|
|
||||||
tBIcuZsdVRExSCPofb0idi8AzRza2AT1diDrSf7UPGo0qHOtGzbyYybYJXf4Xtyp
|
|
||||||
Zq4I7SnAuAJK9QZnoJvoiOKYNlYFJ6aHE3Q32wIDAQABAoIBAAg70qYBEi1S3JPt
|
|
||||||
e45+ypWpHvQRGXgylndd5g24GvFjeC9mEFbVmLXj3xK/UpLQTc/ahXX+YoAUqZrS
|
|
||||||
kA6FJ4uOSbI0cWFHEGs0dls3Jk4Dz9kycTtYGgwI9mFgSTcS0zRK1hj5FvSNfngL
|
|
||||||
117Rn2L72WgMDK9UihG35q28IPpYVUTN7W+qU5YdG9m5KutBjmq9lStc6eeHqMYH
|
|
||||||
EBo3WwMh43oBhcqbebowgQLIkQTcnVdDwsjT8GYEI7onH4SnQWapch7ogXERu34w
|
|
||||||
SDNhcQ5N4gSV/Urj5+RuA78s3eKb3zZMW3lLvmr4re6BZWa/E6XmYq8k2KAB12TX
|
|
||||||
5QaYqnECgYEAzlhlLMPXuOqcQp1O1TyVNxWwJ9Q8TqhLjnbFASLCzFU2E0lup0mH
|
|
||||||
2wK0cL8KhljT6rYzKFFp2ik5+1TzHKxEvnyzB89IJ3z/5e0AYssyv1oRnzMx9amg
|
|
||||||
+04BxP4iAo1Fs9xN60PhsjHfIBj8jH3EJcla0G/zY0JE510cDRCa/YkCgYEAwjdG
|
|
||||||
JBjva6vgwZiiZ5QoOmH0WIsOnNB5VjzOONXUrpYSNMBDGougnt9eOeyUbAGgPBLT
|
|
||||||
10eR9oR06DLacn/jw75u07NCBfqxTSdW+xziG54DnK24vONBS4KmbA/v4u1mMaIn
|
|
||||||
OxRfx++3lcOvrMeUqjA5ZrUUW5VXV/dNg0IStUMCgYEAxSEptzR6GMz576H9ODYi
|
|
||||||
j3eGzOYznymk1TueRdGBrFgTyyUyM1tKEO9qlvPMCEFAY1EhWnk82RDdtcCYaWIi
|
|
||||||
YqEbIHDki+UdS/m5jqh1mN1hTGhKaFlf0/XYNuxabXmth4EGZ6Z4Lhb7BN0aGNXl
|
|
||||||
1/ufaNYq/T7IOQh4zfp5N5ECgYEAgcpYmIUFc4owsJAlcF0FqUaO+aEsicWUYPpP
|
|
||||||
wpG8CVSHJDOcZKANHj8eBE3DPo6zm5Hlekf9FqacThS2AbDP8J9SBy4ToFVRqcLx
|
|
||||||
kO1TeatWtJ0wCSNCHolYWH0qDhgipGa+GvBZtg7QPEjDHQ9fnYCOy8GVskKSVVoS
|
|
||||||
tfYw9GsCgYEAjhgQ2pedGUGHdRY8upI7iQkGIAjsmNKExIIc7oPCiFO5d23XXsuV
|
|
||||||
lNjHie84Ty7mimuGn9kCX0GzJAHOJBV1cVAannZ+SA+PxcsIez3wAt1KxQIkfw6o
|
|
||||||
3vzanOICnGhZ22SFyib1h+0OveVXshJc3DeWlgiDxQN2Ox8BUN2KBFs=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
27
d2utmpa09000
27
d2utmpa09000
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpQIBAAKCAQEAnIuKMu05Sh8vXfPuLJYZuujMxPYWhm2rCN1sLei6q7yul9I7
|
|
||||||
VQgPtOJwVqAR+5vvFCa3epqpXUrDlRE4mRS5uLDZfeTJioq1h5qEnictdsMqL0F2
|
|
||||||
JMmER9E+CdpQ52uiW4Aj7mmaYCKvPLMW/2fEVX/X40rXemjSMjPeQWpUZy/N/ZmC
|
|
||||||
cV6XzzTAZFxhA98P5uUuhoMV/Faz9XAujfpF2qOZ8nLWahWQEG7Y9dtiwHhTVjel
|
|
||||||
tBIcuZsdVRExSCPofb0idi8AzRza2AT1diDrSf7UPGo0qHOtGzbyYybYJXf4Xtyp
|
|
||||||
Zq4I7SnAuAJK9QZnoJvoiOKYNlYFJ6aHE3Q32wIDAQABAoIBAAg70qYBEi1S3JPt
|
|
||||||
e45+ypWpHvQRGXgylndd5g24GvFjeC9mEFbVmLXj3xK/UpLQTc/ahXX+YoAUqZrS
|
|
||||||
kA6FJ4uOSbI0cWFHEGs0dls3Jk4Dz9kycTtYGgwI9mFgSTcS0zRK1hj5FvSNfngL
|
|
||||||
117Rn2L72WgMDK9UihG35q28IPpYVUTN7W+qU5YdG9m5KutBjmq9lStc6eeHqMYH
|
|
||||||
EBo3WwMh43oBhcqbebowgQLIkQTcnVdDwsjT8GYEI7onH4SnQWapch7ogXERu34w
|
|
||||||
SDNhcQ5N4gSV/Urj5+RuA78s3eKb3zZMW3lLvmr4re6BZWa/E6XmYq8k2KAB12TX
|
|
||||||
5QaYqnECgYEAzlhlLMPXuOqcQp1O1TyVNxWwJ9Q8TqhLjnbFASLCzFU2E0lup0mH
|
|
||||||
2wK0cL8KhljT6rYzKFFp2ik5+1TzHKxEvnyzB89IJ3z/5e0AYssyv1oRnzMx9amg
|
|
||||||
+04BxP4iAo1Fs9xN60PhsjHfIBj8jH3EJcla0G/zY0JE510cDRCa/YkCgYEAwjdG
|
|
||||||
JBjva6vgwZiiZ5QoOmH0WIsOnNB5VjzOONXUrpYSNMBDGougnt9eOeyUbAGgPBLT
|
|
||||||
10eR9oR06DLacn/jw75u07NCBfqxTSdW+xziG54DnK24vONBS4KmbA/v4u1mMaIn
|
|
||||||
OxRfx++3lcOvrMeUqjA5ZrUUW5VXV/dNg0IStUMCgYEAxSEptzR6GMz576H9ODYi
|
|
||||||
j3eGzOYznymk1TueRdGBrFgTyyUyM1tKEO9qlvPMCEFAY1EhWnk82RDdtcCYaWIi
|
|
||||||
YqEbIHDki+UdS/m5jqh1mN1hTGhKaFlf0/XYNuxabXmth4EGZ6Z4Lhb7BN0aGNXl
|
|
||||||
1/ufaNYq/T7IOQh4zfp5N5ECgYEAgcpYmIUFc4owsJAlcF0FqUaO+aEsicWUYPpP
|
|
||||||
wpG8CVSHJDOcZKANHj8eBE3DPo6zm5Hlekf9FqacThS2AbDP8J9SBy4ToFVRqcLx
|
|
||||||
kO1TeatWtJ0wCSNCHolYWH0qDhgipGa+GvBZtg7QPEjDHQ9fnYCOy8GVskKSVVoS
|
|
||||||
tfYw9GsCgYEAjhgQ2pedGUGHdRY8upI7iQkGIAjsmNKExIIc7oPCiFO5d23XXsuV
|
|
||||||
lNjHie84Ty7mimuGn9kCX0GzJAHOJBV1cVAannZ+SA+PxcsIez3wAt1KxQIkfw6o
|
|
||||||
3vzanOICnGhZ22SFyib1h+0OveVXshJc3DeWlgiDxQN2Ox8BUN2KBFs=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
27
d2utmpa09040
27
d2utmpa09040
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpQIBAAKCAQEAnIuKMu05Sh8vXfPuLJYZuujMxPYWhm2rCN1sLei6q7yul9I7
|
|
||||||
VQgPtOJwVqAR+5vvFCa3epqpXUrDlRE4mRS5uLDZfeTJioq1h5qEnictdsMqL0F2
|
|
||||||
JMmER9E+CdpQ52uiW4Aj7mmaYCKvPLMW/2fEVX/X40rXemjSMjPeQWpUZy/N/ZmC
|
|
||||||
cV6XzzTAZFxhA98P5uUuhoMV/Faz9XAujfpF2qOZ8nLWahWQEG7Y9dtiwHhTVjel
|
|
||||||
tBIcuZsdVRExSCPofb0idi8AzRza2AT1diDrSf7UPGo0qHOtGzbyYybYJXf4Xtyp
|
|
||||||
Zq4I7SnAuAJK9QZnoJvoiOKYNlYFJ6aHE3Q32wIDAQABAoIBAAg70qYBEi1S3JPt
|
|
||||||
e45+ypWpHvQRGXgylndd5g24GvFjeC9mEFbVmLXj3xK/UpLQTc/ahXX+YoAUqZrS
|
|
||||||
kA6FJ4uOSbI0cWFHEGs0dls3Jk4Dz9kycTtYGgwI9mFgSTcS0zRK1hj5FvSNfngL
|
|
||||||
117Rn2L72WgMDK9UihG35q28IPpYVUTN7W+qU5YdG9m5KutBjmq9lStc6eeHqMYH
|
|
||||||
EBo3WwMh43oBhcqbebowgQLIkQTcnVdDwsjT8GYEI7onH4SnQWapch7ogXERu34w
|
|
||||||
SDNhcQ5N4gSV/Urj5+RuA78s3eKb3zZMW3lLvmr4re6BZWa/E6XmYq8k2KAB12TX
|
|
||||||
5QaYqnECgYEAzlhlLMPXuOqcQp1O1TyVNxWwJ9Q8TqhLjnbFASLCzFU2E0lup0mH
|
|
||||||
2wK0cL8KhljT6rYzKFFp2ik5+1TzHKxEvnyzB89IJ3z/5e0AYssyv1oRnzMx9amg
|
|
||||||
+04BxP4iAo1Fs9xN60PhsjHfIBj8jH3EJcla0G/zY0JE510cDRCa/YkCgYEAwjdG
|
|
||||||
JBjva6vgwZiiZ5QoOmH0WIsOnNB5VjzOONXUrpYSNMBDGougnt9eOeyUbAGgPBLT
|
|
||||||
10eR9oR06DLacn/jw75u07NCBfqxTSdW+xziG54DnK24vONBS4KmbA/v4u1mMaIn
|
|
||||||
OxRfx++3lcOvrMeUqjA5ZrUUW5VXV/dNg0IStUMCgYEAxSEptzR6GMz576H9ODYi
|
|
||||||
j3eGzOYznymk1TueRdGBrFgTyyUyM1tKEO9qlvPMCEFAY1EhWnk82RDdtcCYaWIi
|
|
||||||
YqEbIHDki+UdS/m5jqh1mN1hTGhKaFlf0/XYNuxabXmth4EGZ6Z4Lhb7BN0aGNXl
|
|
||||||
1/ufaNYq/T7IOQh4zfp5N5ECgYEAgcpYmIUFc4owsJAlcF0FqUaO+aEsicWUYPpP
|
|
||||||
wpG8CVSHJDOcZKANHj8eBE3DPo6zm5Hlekf9FqacThS2AbDP8J9SBy4ToFVRqcLx
|
|
||||||
kO1TeatWtJ0wCSNCHolYWH0qDhgipGa+GvBZtg7QPEjDHQ9fnYCOy8GVskKSVVoS
|
|
||||||
tfYw9GsCgYEAjhgQ2pedGUGHdRY8upI7iQkGIAjsmNKExIIc7oPCiFO5d23XXsuV
|
|
||||||
lNjHie84Ty7mimuGn9kCX0GzJAHOJBV1cVAannZ+SA+PxcsIez3wAt1KxQIkfw6o
|
|
||||||
3vzanOICnGhZ22SFyib1h+0OveVXshJc3DeWlgiDxQN2Ox8BUN2KBFs=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1,5 +0,0 @@
|
|||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g
|
|
||||||
uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
|
||||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
|
||||||
QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+
|
|
||||||
TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA
|
|
||||||
AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi
|
|
||||||
yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc=
|
|
||||||
-----END OPENSSH PRIVATE KEY-----
|
|
27
d2utmpa09348
27
d2utmpa09348
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAupkFt/flL8uwzwiXemhydEVw5y/jQu1bAvklAL6LMjMG9z68
|
|
||||||
YxaG8iduMpehxKXR75pWzZIqTm3sN0/3azUNECvx+Frf+5pCHcTeiGxfYaRWi7fB
|
|
||||||
cndMne3KXcRh42FRI7lAR4LDiP9pNld82cf3N9V/O2Y8G9fCTPAyjZP3sCgY9TGV
|
|
||||||
Q3AXSFkE+VjkT5qQlVewnixNU4l3OW9v9sDTjgXSj7g2AQxnT0oag/dSGl5iLPSh
|
|
||||||
VKOIxQRP1fiun3rFJ4LnZ6LinYRc0qJKF2yKRTcouS9k1EbUvXm8JtGZGs9sVvOg
|
|
||||||
yem0jLbjKoVA7CTmRZh4fDZ08Lkgz1FV4Zc22QIDAQABAoIBAGkkUFSZGksUO0xt
|
|
||||||
Su1ubQ+XEUczdJsBo4bJXFBPDZ/7oLEwaHZs+xz3muBnEH/9741TKhYrhisrRS7l
|
|
||||||
oESIYBP8rxuCGTNseFTN2ZaFejlKoHmZ0Sbukf1rP9wWDBJTg6TdfZrN0+AeCurT
|
|
||||||
4UXVpzeO1WJi+Pu3V4SC0/lypt5aw2F1urfoWSaUR43xiYpnjMNQ6dDvVoXA4R2X
|
|
||||||
lMvvdAimTyA3XFDQILlUz6UHH01nEDO6n3T7VjB8UxiJrV5Oyy/aREBIJRiEHf5t
|
|
||||||
dkZjVmtoKhAxKsOCyne/BZ3G1dYIGAhEM/SPqMQtPWy7U95ZaKQbF/Y5BhZb+5d6
|
|
||||||
88HG6QECgYEA3VXddhNh8Ore1rrmlG/5/hwFg9BfP74Gt+lZcmT1Gwh9EBdcn3he
|
|
||||||
xn4kBiw3m1kYyJw3wUfg/zINerqPz57EV669aVaDOVXbqTsFHOsFa74wMERYfV+/
|
|
||||||
eBn7lFdwxOXq4vfDMzq0Ph+wtFvA+C2IkQVk60PR94dJMTn5VLm26nsCgYEA19Jm
|
|
||||||
Hfvm/P/9oc4+rtkTUrs5BDHloBJ28TydZ84bI4B4n1/pJOWKrZ4y4kATic00+otW
|
|
||||||
sncOVAeFq7Nj8yJ1XRCxKnjbhR2q/FZQf8f0c5xVWh4iXRt6Zf5hVcCmkle8SV6M
|
|
||||||
vQb5zpRbzQTx+nrbut6RMbQPVHy5BIXhdzIeHbsCgYAik41bKr/8INTa+quWuL93
|
|
||||||
AO2jn+OhU5A9HskIY9kedf8DioK/rtAvdfkuta2iKRMEE9Np8E6nzyvn5kkdCBJo
|
|
||||||
GDYixI8PX+hG0Z+E2von0Lg6chLY0yJYIsb4b4iAWeKNvmLSF/OcWNsD8el9W6+f
|
|
||||||
6BXR4vBkGNBITmQy5ig7DQKBgQCcfVLOKvkyOewOhx2sano4YsjU4dk+WCUmhm0b
|
|
||||||
97Z155GO/lxvBIGpoiwDIbMJGGJxyNb0UJ9zDoE+HrU6dqHi+Vd9FGUYAIsarPtx
|
|
||||||
q+r0aUb6MR95o5L8oZayNx6Qvk0oZgZmichYofpujkdm9+6bcQaWo5j6CfWd8fWq
|
|
||||||
GAz+QQKBgHBOyyzXC7HSy+IAu/Jo3kpkgTqjYUIsmig5QKamHo/5FP8FCq4ZVR1L
|
|
||||||
CYrpCVzbvjAjBnSm1/3UngjS3PPldUYjGIbez3gK/jJTfnzfsVghnQsZOd97YxuX
|
|
||||||
TusifzCTcDZEUIZSdxL72EpbGtkYqVeDl4SjU0ZMfSIyiEsfyDFw
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis
|
|
@ -1 +0,0 @@
|
|||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis
|
|
12
id_dsa
12
id_dsa
@ -1,12 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
MIIBuwIBAAKBgQC8GRz9p5YiVi9BA7jNO3MXV2NkPlMfCv2xjieBE6bflmHKoKhC
|
|
||||||
ewlyrk1SfLJQgVbOZvdrgtsuYGgKfpqu8qWlVnEHOLYSa6f6CDcjRXa5X+T2+tBZ
|
|
||||||
zYZ7UBlEFuDLoCEpSOopsDzPz+wvyGBH7/DPtHhbLB/ipIZYXMe/QXcyFwIVAIA9
|
|
||||||
pz8MNAL+c9x9cNW9V40GIlnBAoGAWXg5YYAHb/+ZRHXBTTULmY8LT8Mhp8JDrIWY
|
|
||||||
TE+JHlFmGtHJsajoQNo5yFCj6ep1YqeKSZdj3x0JXSJDLLQNuiaGL74MdEasYt3g
|
|
||||||
rG04HE7k3tXfSwSM0cKhSFU/MKo9rhXStRcKdG5ZN4d+pTnoyV/ncfooiRJprqXH
|
|
||||||
l4yv2vMCgYEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sK
|
|
||||||
sus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLK
|
|
||||||
bbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6jsCFH3IbB4V
|
|
||||||
XAMosp5QzPxxeQQtAjVD
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis
|
|
27
id_rsa
27
id_rsa
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAupkFt/flL8uwzwiXemhydEVw5y/jQu1bAvklAL6LMjMG9z68
|
|
||||||
YxaG8iduMpehxKXR75pWzZIqTm3sN0/3azUNECvx+Frf+5pCHcTeiGxfYaRWi7fB
|
|
||||||
cndMne3KXcRh42FRI7lAR4LDiP9pNld82cf3N9V/O2Y8G9fCTPAyjZP3sCgY9TGV
|
|
||||||
Q3AXSFkE+VjkT5qQlVewnixNU4l3OW9v9sDTjgXSj7g2AQxnT0oag/dSGl5iLPSh
|
|
||||||
VKOIxQRP1fiun3rFJ4LnZ6LinYRc0qJKF2yKRTcouS9k1EbUvXm8JtGZGs9sVvOg
|
|
||||||
yem0jLbjKoVA7CTmRZh4fDZ08Lkgz1FV4Zc22QIDAQABAoIBAGkkUFSZGksUO0xt
|
|
||||||
Su1ubQ+XEUczdJsBo4bJXFBPDZ/7oLEwaHZs+xz3muBnEH/9741TKhYrhisrRS7l
|
|
||||||
oESIYBP8rxuCGTNseFTN2ZaFejlKoHmZ0Sbukf1rP9wWDBJTg6TdfZrN0+AeCurT
|
|
||||||
4UXVpzeO1WJi+Pu3V4SC0/lypt5aw2F1urfoWSaUR43xiYpnjMNQ6dDvVoXA4R2X
|
|
||||||
lMvvdAimTyA3XFDQILlUz6UHH01nEDO6n3T7VjB8UxiJrV5Oyy/aREBIJRiEHf5t
|
|
||||||
dkZjVmtoKhAxKsOCyne/BZ3G1dYIGAhEM/SPqMQtPWy7U95ZaKQbF/Y5BhZb+5d6
|
|
||||||
88HG6QECgYEA3VXddhNh8Ore1rrmlG/5/hwFg9BfP74Gt+lZcmT1Gwh9EBdcn3he
|
|
||||||
xn4kBiw3m1kYyJw3wUfg/zINerqPz57EV669aVaDOVXbqTsFHOsFa74wMERYfV+/
|
|
||||||
eBn7lFdwxOXq4vfDMzq0Ph+wtFvA+C2IkQVk60PR94dJMTn5VLm26nsCgYEA19Jm
|
|
||||||
Hfvm/P/9oc4+rtkTUrs5BDHloBJ28TydZ84bI4B4n1/pJOWKrZ4y4kATic00+otW
|
|
||||||
sncOVAeFq7Nj8yJ1XRCxKnjbhR2q/FZQf8f0c5xVWh4iXRt6Zf5hVcCmkle8SV6M
|
|
||||||
vQb5zpRbzQTx+nrbut6RMbQPVHy5BIXhdzIeHbsCgYAik41bKr/8INTa+quWuL93
|
|
||||||
AO2jn+OhU5A9HskIY9kedf8DioK/rtAvdfkuta2iKRMEE9Np8E6nzyvn5kkdCBJo
|
|
||||||
GDYixI8PX+hG0Z+E2von0Lg6chLY0yJYIsb4b4iAWeKNvmLSF/OcWNsD8el9W6+f
|
|
||||||
6BXR4vBkGNBITmQy5ig7DQKBgQCcfVLOKvkyOewOhx2sano4YsjU4dk+WCUmhm0b
|
|
||||||
97Z155GO/lxvBIGpoiwDIbMJGGJxyNb0UJ9zDoE+HrU6dqHi+Vd9FGUYAIsarPtx
|
|
||||||
q+r0aUb6MR95o5L8oZayNx6Qvk0oZgZmichYofpujkdm9+6bcQaWo5j6CfWd8fWq
|
|
||||||
GAz+QQKBgHBOyyzXC7HSy+IAu/Jo3kpkgTqjYUIsmig5QKamHo/5FP8FCq4ZVR1L
|
|
||||||
CYrpCVzbvjAjBnSm1/3UngjS3PPldUYjGIbez3gK/jJTfnzfsVghnQsZOd97YxuX
|
|
||||||
TusifzCTcDZEUIZSdxL72EpbGtkYqVeDl4SjU0ZMfSIyiEsfyDFw
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis
|
|
27
is_rsa
27
is_rsa
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpQIBAAKCAQEAnIuKMu05Sh8vXfPuLJYZuujMxPYWhm2rCN1sLei6q7yul9I7
|
|
||||||
VQgPtOJwVqAR+5vvFCa3epqpXUrDlRE4mRS5uLDZfeTJioq1h5qEnictdsMqL0F2
|
|
||||||
JMmER9E+CdpQ52uiW4Aj7mmaYCKvPLMW/2fEVX/X40rXemjSMjPeQWpUZy/N/ZmC
|
|
||||||
cV6XzzTAZFxhA98P5uUuhoMV/Faz9XAujfpF2qOZ8nLWahWQEG7Y9dtiwHhTVjel
|
|
||||||
tBIcuZsdVRExSCPofb0idi8AzRza2AT1diDrSf7UPGo0qHOtGzbyYybYJXf4Xtyp
|
|
||||||
Zq4I7SnAuAJK9QZnoJvoiOKYNlYFJ6aHE3Q32wIDAQABAoIBAAg70qYBEi1S3JPt
|
|
||||||
e45+ypWpHvQRGXgylndd5g24GvFjeC9mEFbVmLXj3xK/UpLQTc/ahXX+YoAUqZrS
|
|
||||||
kA6FJ4uOSbI0cWFHEGs0dls3Jk4Dz9kycTtYGgwI9mFgSTcS0zRK1hj5FvSNfngL
|
|
||||||
117Rn2L72WgMDK9UihG35q28IPpYVUTN7W+qU5YdG9m5KutBjmq9lStc6eeHqMYH
|
|
||||||
EBo3WwMh43oBhcqbebowgQLIkQTcnVdDwsjT8GYEI7onH4SnQWapch7ogXERu34w
|
|
||||||
SDNhcQ5N4gSV/Urj5+RuA78s3eKb3zZMW3lLvmr4re6BZWa/E6XmYq8k2KAB12TX
|
|
||||||
5QaYqnECgYEAzlhlLMPXuOqcQp1O1TyVNxWwJ9Q8TqhLjnbFASLCzFU2E0lup0mH
|
|
||||||
2wK0cL8KhljT6rYzKFFp2ik5+1TzHKxEvnyzB89IJ3z/5e0AYssyv1oRnzMx9amg
|
|
||||||
+04BxP4iAo1Fs9xN60PhsjHfIBj8jH3EJcla0G/zY0JE510cDRCa/YkCgYEAwjdG
|
|
||||||
JBjva6vgwZiiZ5QoOmH0WIsOnNB5VjzOONXUrpYSNMBDGougnt9eOeyUbAGgPBLT
|
|
||||||
10eR9oR06DLacn/jw75u07NCBfqxTSdW+xziG54DnK24vONBS4KmbA/v4u1mMaIn
|
|
||||||
OxRfx++3lcOvrMeUqjA5ZrUUW5VXV/dNg0IStUMCgYEAxSEptzR6GMz576H9ODYi
|
|
||||||
j3eGzOYznymk1TueRdGBrFgTyyUyM1tKEO9qlvPMCEFAY1EhWnk82RDdtcCYaWIi
|
|
||||||
YqEbIHDki+UdS/m5jqh1mN1hTGhKaFlf0/XYNuxabXmth4EGZ6Z4Lhb7BN0aGNXl
|
|
||||||
1/ufaNYq/T7IOQh4zfp5N5ECgYEAgcpYmIUFc4owsJAlcF0FqUaO+aEsicWUYPpP
|
|
||||||
wpG8CVSHJDOcZKANHj8eBE3DPo6zm5Hlekf9FqacThS2AbDP8J9SBy4ToFVRqcLx
|
|
||||||
kO1TeatWtJ0wCSNCHolYWH0qDhgipGa+GvBZtg7QPEjDHQ9fnYCOy8GVskKSVVoS
|
|
||||||
tfYw9GsCgYEAjhgQ2pedGUGHdRY8upI7iQkGIAjsmNKExIIc7oPCiFO5d23XXsuV
|
|
||||||
lNjHie84Ty7mimuGn9kCX0GzJAHOJBV1cVAannZ+SA+PxcsIez3wAt1KxQIkfw6o
|
|
||||||
3vzanOICnGhZ22SFyib1h+0OveVXshJc3DeWlgiDxQN2Ox8BUN2KBFs=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis
|
|
@ -362,7 +362,7 @@ read_passphrase(const char *prompt, int flags)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
_putch( (int) '*' ); // show a star in place of what is typed
|
//_putch( (int) '*' ); // show a star in place of what is typed
|
||||||
len++; // keep reading in the loop
|
len++; // keep reading in the loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
139
session.c
139
session.c
@ -494,6 +494,46 @@ do_authenticated1(Authctxt *authctxt)
|
|||||||
#ifndef WIN32_FIXME
|
#ifndef WIN32_FIXME
|
||||||
#define USE_PIPES 1
|
#define USE_PIPES 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32_FIXME
|
||||||
|
HANDLE hConIn = NULL;
|
||||||
|
HANDLE hConOut = NULL;
|
||||||
|
HANDLE hConErr = NULL;
|
||||||
|
|
||||||
|
BOOL MakeNewConsole(void)
|
||||||
|
{
|
||||||
|
BOOL bRet = TRUE;
|
||||||
|
|
||||||
|
if (!(bRet = FreeConsole())) return bRet;
|
||||||
|
if (!(bRet = AllocConsole())) return bRet;
|
||||||
|
HANDLE hTemp;
|
||||||
|
|
||||||
|
hTemp = CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
|
||||||
|
if (INVALID_HANDLE_VALUE != hTemp)
|
||||||
|
{
|
||||||
|
DuplicateHandle(GetCurrentProcess(),hTemp,GetCurrentProcess(),&hConIn, 0,TRUE,DUPLICATE_SAME_ACCESS);
|
||||||
|
CloseHandle(hTemp);
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
hTemp = CreateFile("CONOUT$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
|
||||||
|
if (INVALID_HANDLE_VALUE != hTemp)
|
||||||
|
{
|
||||||
|
DuplicateHandle(GetCurrentProcess(),hTemp,GetCurrentProcess(),&hConOut, 0,TRUE,DUPLICATE_SAME_ACCESS);
|
||||||
|
DuplicateHandle(GetCurrentProcess(),hTemp,GetCurrentProcess(),&hConErr, 0,TRUE,DUPLICATE_SAME_ACCESS);
|
||||||
|
CloseHandle(hTemp);
|
||||||
|
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
SetStdHandle(STD_INPUT_HANDLE,hConIn);
|
||||||
|
SetStdHandle(STD_OUTPUT_HANDLE,hConOut);
|
||||||
|
SetStdHandle(STD_ERROR_HANDLE,hConErr);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* This is called to fork and execute a command when we have no tty. This
|
* This is called to fork and execute a command when we have no tty. This
|
||||||
* will call do_child from the child, and server_loop from the parent after
|
* will call do_child from the child, and server_loop from the parent after
|
||||||
@ -545,10 +585,13 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
char *exec_command;
|
char *exec_command;
|
||||||
char *laddr;
|
char *laddr;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
int prot_scr_width = 80;
|
||||||
|
int prot_scr_height = 25;
|
||||||
|
|
||||||
if (!command)
|
if (!command)
|
||||||
{
|
{
|
||||||
exec_command = s->pw->pw_shell;
|
exec_command = s->pw->pw_shell;
|
||||||
|
//exec_command = "c:\\tools\\echoit.exe"; // temp
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -561,7 +604,29 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
* Create three socket pairs for stdin, stdout and stderr
|
* Create three socket pairs for stdin, stdout and stderr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
HANDLE wfdtocmd = -1;
|
||||||
|
int retcode = -1;
|
||||||
|
if ( (!s -> is_subsystem) && (s ->ttyfd != -1))
|
||||||
|
{
|
||||||
|
//FreeConsole();
|
||||||
|
//AllocConsole();
|
||||||
|
MakeNewConsole();
|
||||||
|
prot_scr_width = s->col;
|
||||||
|
prot_scr_height = s->row;
|
||||||
|
extern HANDLE hConsole ;
|
||||||
|
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
|
||||||
|
ConSetScreenSize( s->col, s->row );
|
||||||
|
s->ptyfd = hConsole ; // the pty is the Windows console output handle in our Win32 port
|
||||||
|
|
||||||
|
wfdtocmd = GetStdHandle (STD_INPUT_HANDLE) ; // we use this console handle to feed input to Windows shell cmd.exe
|
||||||
|
sockin[1] = allocate_sfd((int)wfdtocmd); // put the std input handle in our global general handle table
|
||||||
|
//if (sockin[1] >= 0)
|
||||||
|
// sfd_set_to_console(sockin[1]); // mark it as Console type
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
socketpair(sockin);
|
socketpair(sockin);
|
||||||
|
|
||||||
socketpair(sockout);
|
socketpair(sockout);
|
||||||
socketpair(sockerr);
|
socketpair(sockerr);
|
||||||
|
|
||||||
@ -569,10 +634,14 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
debug3("sockout[0]: %d sockout[1]: %d", sockout[0], sockout[1]);
|
debug3("sockout[0]: %d sockout[1]: %d", sockout[0], sockout[1]);
|
||||||
debug3("sockerr[0]: %d sockerr[1]: %d", sockerr[0], sockerr[1]);
|
debug3("sockerr[0]: %d sockerr[1]: %d", sockerr[0], sockerr[1]);
|
||||||
|
|
||||||
|
if ( (s -> is_subsystem) || (s ->ttyfd == -1))
|
||||||
crlf_sfd(sockin[1]);
|
crlf_sfd(sockin[1]);
|
||||||
|
|
||||||
crlf_sfd(sockout[1]);
|
crlf_sfd(sockout[1]);
|
||||||
|
|
||||||
|
if ( (s -> is_subsystem) || (s ->ttyfd == -1))
|
||||||
SetHandleInformation(sfd_to_handle(sockin[1]), HANDLE_FLAG_INHERIT, 0);
|
SetHandleInformation(sfd_to_handle(sockin[1]), HANDLE_FLAG_INHERIT, 0);
|
||||||
|
|
||||||
SetHandleInformation(sfd_to_handle(sockout[1]), HANDLE_FLAG_INHERIT, 0);
|
SetHandleInformation(sfd_to_handle(sockout[1]), HANDLE_FLAG_INHERIT, 0);
|
||||||
SetHandleInformation(sfd_to_handle(sockerr[1]), HANDLE_FLAG_INHERIT, 0);
|
SetHandleInformation(sfd_to_handle(sockerr[1]), HANDLE_FLAG_INHERIT, 0);
|
||||||
|
|
||||||
@ -583,12 +652,35 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
memset(&si, 0 , sizeof(STARTUPINFO));
|
memset(&si, 0 , sizeof(STARTUPINFO));
|
||||||
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
|
si.lpReserved = 0;
|
||||||
|
si.lpTitle = NULL; /* NULL means use exe name as title */
|
||||||
|
si.dwX = 0;
|
||||||
|
si.dwY = 0;
|
||||||
|
si.dwXSize = prot_scr_width;
|
||||||
|
si.dwYSize = prot_scr_height;
|
||||||
|
si.dwXCountChars = prot_scr_width;
|
||||||
|
si.dwYCountChars = prot_scr_height;
|
||||||
|
si.dwFillAttribute = 0;
|
||||||
|
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESIZE | STARTF_USECOUNTCHARS; // | STARTF_USESHOWWINDOW ;
|
||||||
|
si.wShowWindow = 0; // FALSE ;
|
||||||
|
si.cbReserved2 = 0;
|
||||||
|
si.lpReserved2 = 0;
|
||||||
|
|
||||||
|
if ( (!s -> is_subsystem) && (s ->ttyfd != -1) ) {
|
||||||
|
si.hStdInput = GetStdHandle (STD_INPUT_HANDLE) ; // shell tty interactive session gets a console input for Win32
|
||||||
|
si.hStdOutput = (HANDLE) sfd_to_handle(sockout[0]);
|
||||||
|
si.hStdError = (HANDLE) sfd_to_handle(sockerr[0]);
|
||||||
|
si.lpDesktop = NULL ; //winstadtname_w ;
|
||||||
|
}
|
||||||
|
else {
|
||||||
si.hStdInput = (HANDLE) sfd_to_handle(sockin[0]);
|
si.hStdInput = (HANDLE) sfd_to_handle(sockin[0]);
|
||||||
si.hStdOutput = (HANDLE) sfd_to_handle(sockout[0]);
|
si.hStdOutput = (HANDLE) sfd_to_handle(sockout[0]);
|
||||||
si.hStdError = (HANDLE) sfd_to_handle(sockerr[0]);
|
si.hStdError = (HANDLE) sfd_to_handle(sockerr[0]);
|
||||||
si.wShowWindow = SW_HIDE;
|
si.lpDesktop = NULL; //L"winsta0\\default";
|
||||||
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
|
}
|
||||||
si.lpDesktop = L"winsta0\\default";
|
//si.wShowWindow = SW_HIDE;
|
||||||
|
//si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
|
||||||
|
|
||||||
|
|
||||||
SetEnvironmentVariable("USER", s->pw->pw_name);
|
SetEnvironmentVariable("USER", s->pw->pw_name);
|
||||||
SetEnvironmentVariable("USERNAME", s->pw->pw_name);
|
SetEnvironmentVariable("USERNAME", s->pw->pw_name);
|
||||||
@ -785,12 +877,13 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
|
|
||||||
GetUserName(name, &size);
|
GetUserName(name, &size);
|
||||||
|
|
||||||
//if (!(s -> is_subsystem)) {
|
if (!(s -> is_subsystem)) {
|
||||||
// Send to the remote client ANSI/VT Sequence so that they send us CRLF in place of LF
|
// Send to the remote client ANSI/VT Sequence so that they send us CRLF in place of LF
|
||||||
//Channel *c=channel_by_id ( s->chanid );
|
char *inittermseq = "\033[20h\033[?7h\0" ; // LFtoCRLF AUTOWRAPON
|
||||||
//buffer_append(&c->input, "\033[20h", 5);
|
Channel *c=channel_by_id ( s->chanid );
|
||||||
//channel_output_poll();
|
buffer_append(&c->input, inittermseq, strlen(inittermseq));
|
||||||
//}
|
channel_output_poll();
|
||||||
|
}
|
||||||
|
|
||||||
//if (s ->ttyfd != -1) {
|
//if (s ->ttyfd != -1) {
|
||||||
// set the channel to tty interactive type
|
// set the channel to tty interactive type
|
||||||
@ -813,9 +906,11 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
wchar_t exec_command_w[MAX_PATH];
|
wchar_t exec_command_w[MAX_PATH];
|
||||||
|
|
||||||
MultiByteToWideChar(CP_UTF8, 0, exec_command, -1, exec_command_w, MAX_PATH);
|
MultiByteToWideChar(CP_UTF8, 0, exec_command, -1, exec_command_w, MAX_PATH);
|
||||||
|
DWORD dwStartupFlags = CREATE_SUSPENDED ; // 0
|
||||||
|
|
||||||
|
SetConsoleCtrlHandler(NULL, FALSE);
|
||||||
b = CreateProcessAsUserW(hToken, NULL, exec_command_w, NULL, NULL, TRUE,
|
b = CreateProcessAsUserW(hToken, NULL, exec_command_w, NULL, NULL, TRUE,
|
||||||
CREATE_NEW_PROCESS_GROUP, NULL, s -> pw -> pw_dir,
|
/*CREATE_NEW_PROCESS_GROUP*/ dwStartupFlags, NULL, s -> pw -> pw_dir,
|
||||||
&si, &pi);
|
&si, &pi);
|
||||||
/*
|
/*
|
||||||
* If CreateProcessAsUser() fails we will try CreateProcess()
|
* If CreateProcessAsUser() fails we will try CreateProcess()
|
||||||
@ -825,7 +920,7 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
if ((!b) && (strcmp(name, s -> pw -> pw_name) == 0))
|
if ((!b) && (strcmp(name, s -> pw -> pw_name) == 0))
|
||||||
{
|
{
|
||||||
b = CreateProcessW(NULL, exec_command_w, NULL, NULL, TRUE,
|
b = CreateProcessW(NULL, exec_command_w, NULL, NULL, TRUE,
|
||||||
CREATE_NEW_PROCESS_GROUP, NULL, s -> pw -> pw_dir,
|
/*CREATE_NEW_PROCESS_GROUP*/ dwStartupFlags, NULL, s -> pw -> pw_dir,
|
||||||
&si, &pi);
|
&si, &pi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,14 +942,6 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
|
|
||||||
s -> authctxt -> currentToken_ = hToken;
|
s -> authctxt -> currentToken_ = hToken;
|
||||||
|
|
||||||
/*
|
|
||||||
* Close child thread and process handles so it can go away
|
|
||||||
*/
|
|
||||||
|
|
||||||
CloseHandle(pi.hThread);
|
|
||||||
|
|
||||||
// CloseHandle(pi.hProcess);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Log the process handle (fake it as the pid) for termination lookups
|
* Log the process handle (fake it as the pid) for termination lookups
|
||||||
*/
|
*/
|
||||||
@ -876,11 +963,23 @@ do_exec_no_pty(Session *s, const char *command)
|
|||||||
/*
|
/*
|
||||||
* We are the parent. Close the child sides of the socket pairs.
|
* We are the parent. Close the child sides of the socket pairs.
|
||||||
*/
|
*/
|
||||||
|
if ( (s -> is_subsystem) || (s ->ttyfd == -1))
|
||||||
close(sockin[0]);
|
close(sockin[0]);
|
||||||
|
|
||||||
close(sockout[0]);
|
close(sockout[0]);
|
||||||
close(sockerr[0]);
|
close(sockerr[0]);
|
||||||
|
|
||||||
|
ResumeThread ( pi.hThread ); /* now let cmd shell main thread be active s we have closed all i/o file handle that cmd will use */
|
||||||
|
SetConsoleCtrlHandler(NULL, TRUE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close child thread handles as we do not need it. Process handle we keep so that we can know if it has died o not
|
||||||
|
*/
|
||||||
|
|
||||||
|
CloseHandle(pi.hThread);
|
||||||
|
|
||||||
|
// CloseHandle(pi.hProcess);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear loginmsg, since it's the child's responsibility to display
|
* Clear loginmsg, since it's the child's responsibility to display
|
||||||
* it to the user, otherwise multiple sessions may accumulate
|
* it to the user, otherwise multiple sessions may accumulate
|
||||||
@ -2629,7 +2728,9 @@ session_pty_req(Session *s)
|
|||||||
pty_setowner(s->pw, s->tty);
|
pty_setowner(s->pw, s->tty);
|
||||||
|
|
||||||
/* Set window size from the packet. */
|
/* Set window size from the packet. */
|
||||||
|
#ifndef WIN32_FIXME
|
||||||
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
|
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
|
||||||
|
#endif
|
||||||
|
|
||||||
packet_check_eom();
|
packet_check_eom();
|
||||||
session_proctitle(s);
|
session_proctitle(s);
|
||||||
|
10
sftp.c
10
sftp.c
@ -294,12 +294,10 @@ local_do_shell(const char *args)
|
|||||||
{
|
{
|
||||||
#ifdef WIN32_FIXME
|
#ifdef WIN32_FIXME
|
||||||
|
|
||||||
/*
|
if (!*args) {
|
||||||
* Not implemented on native Win32.
|
args = (char *) getenv("ComSpec"); // get name of Windows cmd shell
|
||||||
*/
|
}
|
||||||
|
system(args); // execute the shell or cmd given
|
||||||
fprintf(stderr, "Local shell is not implemented on Win32.\n");
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
40
ssh.c
40
ssh.c
@ -296,12 +296,38 @@ static void CleanUpProxyProcess()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern Buffer stdin_buffer; /* Buffer for stdin data. */
|
||||||
/*
|
/*
|
||||||
* This function handles exit signal.
|
* This function handles exit signal.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType)
|
BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
switch( dwCtrlType )
|
||||||
|
{
|
||||||
|
// Handle the CTRL-C signal.
|
||||||
|
case CTRL_C_EVENT:
|
||||||
|
// send CTRL_C code to the remote app via sshd server
|
||||||
|
//buffer_put_char(&stdin_buffer, 0x3); // control-c is decimal 3
|
||||||
|
//Beep( 750, 300 );
|
||||||
|
//return( TRUE ); // we have handled it. FALSE would be go to next handler
|
||||||
|
|
||||||
|
case CTRL_BREAK_EVENT:
|
||||||
|
// send CTRL_BREAK to the remote side ?
|
||||||
|
//return TRUE;
|
||||||
|
|
||||||
|
case CTRL_CLOSE_EVENT:
|
||||||
|
case CTRL_LOGOFF_EVENT:
|
||||||
|
case CTRL_SHUTDOWN_EVENT:
|
||||||
|
// send SHELL_CODE_TERMINATE to the remote side
|
||||||
|
//return FALSE ; // go to next handler
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
//return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
debug("Exit signal received...");
|
debug("Exit signal received...");
|
||||||
|
|
||||||
CleanUpProxyProcess();
|
CleanUpProxyProcess();
|
||||||
@ -311,6 +337,7 @@ BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType)
|
|||||||
cleanup_exit(0);
|
cleanup_exit(0);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* WIN32_FIXME */
|
#endif /* WIN32_FIXME */
|
||||||
@ -580,6 +607,7 @@ set_addrinfo_port(struct addrinfo *addrs, int port)
|
|||||||
/*
|
/*
|
||||||
* Main program for the ssh client.
|
* Main program for the ssh client.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int ac, char **av)
|
main(int ac, char **av)
|
||||||
{
|
{
|
||||||
@ -606,9 +634,6 @@ main(int ac, char **av)
|
|||||||
* parent server is stopped.
|
* parent server is stopped.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
AllocConsole();
|
|
||||||
ConInit( STD_OUTPUT_HANDLE, TRUE );
|
|
||||||
|
|
||||||
SetConsoleCtrlHandler(CtrlHandlerRoutine, TRUE);
|
SetConsoleCtrlHandler(CtrlHandlerRoutine, TRUE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1502,6 +1527,15 @@ main(int ac, char **av)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WIN32_FIXME
|
||||||
|
if (tty_flag) {
|
||||||
|
//AllocConsole();
|
||||||
|
ConInputInitParams(); // init the Console input side with global parameters
|
||||||
|
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||||
|
ConInit( STD_OUTPUT_HANDLE, TRUE ); //init the output console surface for us to write
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
exit_status = compat20 ? ssh_session2() : ssh_session();
|
exit_status = compat20 ? ssh_session2() : ssh_session();
|
||||||
packet_close();
|
packet_close();
|
||||||
|
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
-----BEGIN DSA PRIVATE KEY-----
|
|
||||||
MIIBvAIBAAKBgQC6S1DTs1okCcExu9s0TzZ1I9O2SJIBKFImynjNqZcwohAiO40n
|
|
||||||
GSLEUR3A/lhE87zLSXRGdcGGgwL9EZ7J99G+0w0JPiec4/6VhrExZ+sLf0Wucepv
|
|
||||||
r/iVblp3j61EVjJXAAiCk2tLC8BywAMlAJfnTcYaho0aHlNm1slk3kDBTwIVAMi1
|
|
||||||
PXi8QETGZ044NO7EpNE2+C0NAoGBAKnvjaX/u8Gr+LUP+nz73Owbr43X44D01ZbG
|
|
||||||
Dy66ahBQxXO9I+lu8MCazcMZhhxdsEaEY0qBd2WNVLaI2aiIszVQ2nhgIRtjbiyC
|
|
||||||
gvJZjVqfVQntbLzFSvL6C2KXzdWHu/0zszpOq+4CBXOioZ0R+/nt4p+9IjWOg0XJ
|
|
||||||
DeeLAkpKAoGBAJVMlVzMtmEMmk4QN64FJ6l3DxGSbNBM+FeflgUneTu0l8FxQfR0
|
|
||||||
ELl+lW39JzeqFoCHwTbDlifw5tNJOQZO+lDKj+gCNopuXPA9ZuPJKWFxmRxt9Bpk
|
|
||||||
B04V+ldSN2TnrlBSEmaDrmw7mCj+8gXYg3leSTWPYhzrIeTNgtyk9TzIAhQlwADD
|
|
||||||
GP+ZNisGS0TgHf0GVxvQSw==
|
|
||||||
-----END DSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-dss AAAAB3NzaC1kc3MAAACBAOundiq2N+PFt35FSi7+j0uZo+wNil5dtOvmo+dbAUHD1V0AXL6s99aVZHkilDNUpbdtxqUrdmTIoRjFbOtDQv3YQhBsqF8SZds2tD6BPclw0RRODcmQxU5ZdaqnzJdUoOhVvXgZ8KzDklkaDNhKp+HFxIe0Mbo9FKpwP5nWkLVbAAAAFQC1Cke3wXxqdmYqXKq0eSmwtpHI4QAAAIEAzxx3GUs75EGaH1bm6K4Qj2Gnh1fW79hpm2UkiWyUZfVtUBRz8FCAOqq8XTXbr17K6kHHRjbS7Cq2OG4rdcadrLmr2QQ63OslQf4Y3HYeppcRnpkxARH1QtkVBqbNVaNN8Cr4yB9NPKVza0kZIjdGLKZybMYBIPxKNsyR+U3pNmAAAACAFDgF4qswcm0KqCW+xe4cnHXVMCoFBTsPWKtAFQHG5z4LMglZJxQvizULQNlBwNfxlfzaGDo3URxh3p2db1m3qpWOVTWy7ytmiEJbf/HQlg9JELyhvcMhY8LAmz1JUPjKyQHhttOPykScZFeF9x9jkDIP+KcN6EsjceyscogCPbA= @oasis
|
|
@ -1,5 +0,0 @@
|
|||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g
|
|
||||||
uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF5Bn/WpIRkQpXgX7pvEuQ9dblnTp4AAWj7RY+zhxpOLvIJ3Ehn94LkI/Y+TEgrfQVeexlyl4G9F7tEx9MF2zag= @oasis
|
|
@ -1,7 +0,0 @@
|
|||||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
|
||||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
|
||||||
QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+
|
|
||||||
TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA
|
|
||||||
AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi
|
|
||||||
yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc=
|
|
||||||
-----END OPENSSH PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis
|
|
@ -1,27 +0,0 @@
|
|||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpAIBAAKCAQEArlGMB9Z1b5AdNfsQTg2IsemKin/UsDLKVwJ5GFFYRXTLlDm9
|
|
||||||
LkGQqn7VCwdwR1Ff7oTJu16kpRIIXjEpMh9Mhcc2LfPiv2po4oXeEx6sreYM3TDv
|
|
||||||
votqlKUrrjKuK1vxbabl6zgrOpJ9v1ssEREYG/D1Xquejj8p5VVnPTCh24JVDRhX
|
|
||||||
PGU2O8CKI29T86N60ziyt4Y0Op61BKDbivgiXpNn+mM0y2R6eLpXuplb8Beh7wUS
|
|
||||||
Whjz2TNqPk3lYYSfLGEDK3Owwxj12hVjBlY3VqZLFZ0Y6FMPohf5rDg9lpAInCg9
|
|
||||||
qRc8K0/iaMkEhCGd/9arIVjTHHQT0OtutfGSKwIDAQABAoIBAQCYBWH7i9oKm0H+
|
|
||||||
S5+ikkb98U/zDRwtNX4kd3Gn9Xjnyb2o3NnRNzi0l7uvzKLsb1kcKA3OK/GmS52k
|
|
||||||
l3b30TfpCxyC4siCaohh1KEhR4UMey4I0J6kK+2dCJaZanVeNubL29tzUR7SC+NC
|
|
||||||
OH6ru56s72ztTPoPz6H38I0CXiEpzoReKP9+2r1DPHhDeY0J1T4ebLYiWEvd4uLx
|
|
||||||
7i6nKyCzmjOWuVSIG5uQzBvqk59ycPrVK/EpKCGlJDLgnVrTcQAb9VexOYKfxcDi
|
|
||||||
grbl3RO1aucd5HvvPpu0r802j82ccnwj/WbNLNG+UCCISDNXxeBPgo/rdfdgJLQc
|
|
||||||
R74/9+7RAoGBAOPbZZzHXWvWMdtZr9RRtMX3Ovz2Z+NRP/eKYz8vv9HUp4JpkA76
|
|
||||||
UDVFofk1vHjAOrbUDL5977i4Grv23ZRxcDV+yKlpiwo2N4PTON/n5rk+VmTt6OLs
|
|
||||||
cL8bbLrNCutThyA5ZrDSyh6/c0lewlEvikssH8KZeoZuK6eWRk4HxPwHAoGBAMPZ
|
|
||||||
UaGibgfXav7Nrnm/7rBT9M2PiFYGpGw0XsWIB7d3P5jqLeOiuoKUaP/PLHISIOx5
|
|
||||||
rFeZgYCDo0z61e6gWiDA7fLDCoW9TF5BN5x+ulc2xHYg6lZg0HKSEOeAFKP8o/IT
|
|
||||||
k3u3HockPbXfuyFfrQwDx9L1i3V1USfrAb6iMje9AoGAYoVt1TE6yrLN0etgpGxD
|
|
||||||
vslcfx5H4zkxcGYs7ZhG14Kcfz4HpQJEhhQ6qde7S3bKrFzZudAYRAWOwbFHM7Us
|
|
||||||
8GSGfQH+tYal0GEXGXFbCMPUdUWNSfkz8t330Hlx/Dicl6laJqCt9kePoKzRVms4
|
|
||||||
37IPdYQJP3EJfSfz9C9V1CcCgYEAtfGqmJKhzb8es2C5enoIcN9OSbnSWrkI/00X
|
|
||||||
zkK1iIfMGW9U+mkvBCiD80Kwc7jLxWSz6x285XtlthpBrNJjaJJTfHgdymk2DUph
|
|
||||||
M42351YF5ghmK6D9hbKU6bxfcIlAdaAiH4jbX4kXm2MiIbsUtFi+xwk+afx3TLJS
|
|
||||||
iJt+M7ECgYAG7rcLKuooI6mOpPVtqugFGBWKxrh2GC9Hj22H3uHW9UcIfU5TO763
|
|
||||||
i/mcS5VrXIGUZn1qw+FE7vnwG5ypBbV03R9CON+LXVnuT7r0jff2yhMJ7n3ieXc5
|
|
||||||
otjABjFJr9wX2mQ2kn5ugs57rPpOHbQldRqfawBXklHwY7swXm2OAg==
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
@ -1 +0,0 @@
|
|||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGVZzgrkEiQwiqb3F7bu39dayPGJqdCg1xLhS4S7nrFfcCFqHmuOqzp4wwxUacYaCOXitTJK0pmfgfT2O67xSRDWemTQhadN29E9BfYMWtkNgbA4sfYJUXIcVZtLJNqoNTmPC5mvbJJub6E3wm8800aiVCyZIVdTsumLnOlPXvguE0rKN62g39PiDzVHwexkoxbtbs52wh2IodDkN4Fma+r9YTlm3FMipo/3HDo75G/SQNeOA9TKhS1MEQ4kQ1eTW+UzMMFuQyNzt8q6OcyaGYhxN6zgmFiW8Hp/yQJDcw/QDhoPVdXAONnLsNE89s63e85nPdm70pyswOadEdlIeX @oasis
|
|
32
sshd.c
32
sshd.c
@ -1707,8 +1707,12 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
|
|||||||
|
|
||||||
memset(&si, 0 , sizeof(STARTUPINFO));
|
memset(&si, 0 , sizeof(STARTUPINFO));
|
||||||
|
|
||||||
|
char remotesoc[64];
|
||||||
|
snprintf ( remotesoc, sizeof(remotesoc), "%d", sfd_to_handle(*newsock));
|
||||||
|
SetEnvironmentVariable("SSHD_REMSOC", remotesoc);
|
||||||
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
si.hStdInput = (HANDLE) sfd_to_handle(*newsock);
|
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); //(HANDLE) sfd_to_handle(*newsock);
|
||||||
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
||||||
si.wShowWindow = SW_HIDE;
|
si.wShowWindow = SW_HIDE;
|
||||||
@ -1886,6 +1890,19 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
|
|||||||
|
|
||||||
BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType)
|
BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType)
|
||||||
{
|
{
|
||||||
|
switch( dwCtrlType )
|
||||||
|
{
|
||||||
|
case CTRL_C_EVENT:
|
||||||
|
return TRUE; // control C will be passed to shell but sshd wil not exit
|
||||||
|
|
||||||
|
case CTRL_BREAK_EVENT:
|
||||||
|
case CTRL_LOGOFF_EVENT:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
debug("Exit signal received...");
|
debug("Exit signal received...");
|
||||||
|
|
||||||
cleanup_exit(0);
|
cleanup_exit(0);
|
||||||
@ -2776,19 +2793,22 @@ main(int ac, char **av)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
STARTUPINFO si;
|
//STARTUPINFO si;
|
||||||
|
|
||||||
memset(&si, 0 , sizeof(STARTUPINFO));
|
//memset(&si, 0 , sizeof(STARTUPINFO));
|
||||||
|
|
||||||
si.cb = sizeof(STARTUPINFO);
|
//si.cb = sizeof(STARTUPINFO);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the stdin handle from process info to use for client
|
* Get the stdin handle from process info to use for client
|
||||||
*/
|
*/
|
||||||
|
|
||||||
GetStartupInfo(&si);
|
//GetStartupInfo(&si);
|
||||||
|
|
||||||
sock_in = sock_out = newsock = allocate_sfd(si.hStdInput);
|
int remotesochandle ;
|
||||||
|
remotesochandle = atoi( getenv("SSHD_REMSOC") );
|
||||||
|
|
||||||
|
sock_in = sock_out = newsock = allocate_sfd(remotesochandle) ; //si.hStdInput);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't have a startup_pipe
|
* We don't have a startup_pipe
|
||||||
|
4
sshpty.c
4
sshpty.c
@ -211,6 +211,10 @@ pty_change_window_size(int ptyfd, u_int row, u_int col,
|
|||||||
w.ws_xpixel = xpixel;
|
w.ws_xpixel = xpixel;
|
||||||
w.ws_ypixel = ypixel;
|
w.ws_ypixel = ypixel;
|
||||||
(void) ioctl(ptyfd, TIOCSWINSZ, &w);
|
(void) ioctl(ptyfd, TIOCSWINSZ, &w);
|
||||||
|
#else
|
||||||
|
extern HANDLE hConsole ;
|
||||||
|
hConsole = ptyfd;
|
||||||
|
ConSetScreenSize( col, row );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user