diff --git a/.gitignore b/.gitignore index 904aa1f..5761a39 100644 --- a/.gitignore +++ b/.gitignore @@ -239,9 +239,18 @@ ssh_host_rsa_key ssh_host_rsa_key ssh_host_rsa_key ssh_host_dsa_key +ssh_host_dsa_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 id_rsa.pub +id_rsa +id_dsa.pub +id_dsa +is_rsa +is_rsa.pub regress/t10.out.pub regress/t12.out.pub regress/t6.out1 @@ -263,4 +272,7 @@ regress/t7.out.pub regress/t6.out2 config.h configure -config.h \ No newline at end of file +config.h + +#temp key files +d2utmpa* \ No newline at end of file diff --git a/Makefile.in b/Makefile.in index 7db8384..277f4c3 100644 --- a/Makefile.in +++ b/Makefile.in @@ -87,7 +87,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ msg.o progressmeter.o dns.o entropy.o gss-genr.o umac.o umac128.o \ ssh-pkcs11.o smult_curve25519_ref.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 \ kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \ diff --git a/README.md b/README.md index 2b7a8c9..c89e618 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ # 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 diff --git a/channels.c b/channels.c index 1dd0777..b30e92a 100644 --- a/channels.c +++ b/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))) { errno = 0; 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 || ((errno == EAGAIN || errno == EWOULDBLOCK) && !force))) return 1; @@ -2395,9 +2399,7 @@ channel_output_poll(void) } } } -#ifdef WIN32_FIXME -int lftocrlf = 0; -#endif + /* -- protocol input */ /* ARGSUSED */ @@ -2462,13 +2464,25 @@ channel_input_data(int type, u_int32_t seq, void *ctxt) #else if ( c->client_tty ) telProcessNetwork ( data, data_len ); // run it by ANSI engine if it is the ssh client - else - buffer_append(&c->output, data, data_len); // it is the sshd server, so pass it on - if ( c->isatty ) { - buffer_append(&c->input, data, data_len); // we echo the data if it is sshd server and pty interactive mode - 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 + 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 + if ( c->isatty ) { // 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') ) + buffer_append(&c->input, " \b", 2); // for backspace, we need to send space and another backspace for visual erase + } + } } + #endif } 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); } +#ifndef WIN32_FIXME void channel_send_window_changes(void) { -#ifndef WIN32_FIXME + u_int i; struct winsize ws; @@ -3933,9 +3948,30 @@ channel_send_window_changes(void) packet_put_int((u_int)ws.ws_ypixel); 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 */ /* diff --git a/channels.h b/channels.h index 9d76c9d..e7288db 100644 --- a/channels.h +++ b/channels.h @@ -226,7 +226,12 @@ void channel_register_status_confirm(int, channel_confirm_cb *, channel_confirm_abandon_cb *, void *); void channel_cancel_cleanup(int); int channel_close_fd(int *); +#ifndef WIN32_FIXME void channel_send_window_changes(void); +#else +void channel_send_window_changes(int, int, int, int); +#endif + /* protocol handler */ diff --git a/clientloop.c b/clientloop.c index 6a52f8e..6b9c60d 100644 --- a/clientloop.c +++ b/clientloop.c @@ -119,6 +119,12 @@ #include #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 /* 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 exit_status; /* Used to store the command exit status. */ 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 stderr_buffer; /* Buffer for stderr data. */ 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_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 */ } @@ -1320,14 +1348,14 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr, * and append it to the buffer. */ last_was_cr = (ch == '\r' || ch == '\n'); - #ifdef WIN32_FIXME - extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now - if ( (lftocrlf == 1) && ( ch == '\n') ) { + //#ifdef WIN32_FIXME + //extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now + //if ( (lftocrlf == 1) && ( ch == '\n') ) { // add a \r before \n if sshd server sent us ESC[20h during initial tty mode setting - buffer_put_char(bin, '\r'); - bytes++; - } - #endif + //buffer_put_char(bin, '\r'); + //bytes++; + //} + //#endif buffer_put_char(bin, ch); bytes++; } @@ -2571,11 +2599,11 @@ client_session2_setup(int id, int want_tty, int want_subsystem, tty_make_modes(-1, tiop); #else - packet_put_cstring(term != NULL ? term : ""); - packet_put_int((u_int) 80 /*ws.ws_col*/); - packet_put_int((u_int) 25 /*ws.ws_row*/); - packet_put_int((u_int) 640 /*ws.ws_xpixel*/); - packet_put_int((u_int) 480 /*ws.ws_ypixel*/); + packet_put_cstring(term != NULL ? term : "vt220"); + packet_put_int((u_int) ScreenX); + packet_put_int((u_int) ScrollBottom); + packet_put_int((u_int) 640); + packet_put_int((u_int) 480); tty_make_modes(-1, NULL); #endif /* else !WIN32_FIXME */ packet_send(); diff --git a/contrib/win32/win32compat/Makefile.in b/contrib/win32/win32compat/Makefile.in index 2661cb2..78de177 100644 --- a/contrib/win32/win32compat/Makefile.in +++ b/contrib/win32/win32compat/Makefile.in @@ -19,11 +19,12 @@ LDFLAGS=-L. @LDFLAGS@ -L/lib/win32api WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.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@ -CNGFILES=cng_cipher.o +CNGFILES=cng_cipher.o cng_digest.o .c.o: @@ -44,6 +45,6 @@ distclean: clean $(WIN32COMPATFILES): ../../../config.h -$(WIN32COMPATLIB): $(WIN32COMPATFILES) - $(AR) rv $@ $(WIN32COMPATFILES) +$(WIN32COMPATLIB): $(WIN32COMPATFILES) $(CNGFILES) + $(AR) rv $@ $(WIN32COMPATFILES) $(CNGFILES) $(RANLIB) $@ diff --git a/contrib/win32/win32compat/ansiprsr.c b/contrib/win32/win32compat/ansiprsr.c index c3d5631..659a997 100644 --- a/contrib/win32/win32compat/ansiprsr.c +++ b/contrib/win32/win32compat/ansiprsr.c @@ -1,17 +1,36 @@ -/* ansiprsr.c - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* ansiprsr.c * * 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 @@ -32,7 +51,6 @@ // items used from other modules int NetWriteString(char* pszString, size_t cbString); TelParams Parameters; -extern int lftocrlf; extern int ScreenX; extern int ScreenY; @@ -388,12 +406,10 @@ void ConSetExtendedMode(int iFunction, BOOL bEnable) case 20: // LNM Mode CSI 20h if (bEnable){ VTMode |= MODE_LNM; - Parameters.nReceiveCRLF = ENUM_LF; - lftocrlf = 1; + Parameters.nReceiveCRLF = ENUM_CRLF; }else{ VTMode &= ~MODE_LNM; - Parameters.nReceiveCRLF = ENUM_CRLF; - lftocrlf = 0; + Parameters.nReceiveCRLF = ENUM_LF; } break; case 25: diff --git a/contrib/win32/win32compat/ansiprsr.h b/contrib/win32/win32compat/ansiprsr.h index 96e1159..8ce75aa 100644 --- a/contrib/win32/win32compat/ansiprsr.h +++ b/contrib/win32/win32compat/ansiprsr.h @@ -1,17 +1,36 @@ -/* ansiprsr.h - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* ansiprsr.h * * 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 @@ -36,11 +55,28 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn typedef struct _TelParams { + int fLogging; + FILE *fplogfile; + + char *pInputFile; + + char * szDebugInputFile; + BOOL fDebugWait; + int timeOut; int fLocalEcho; int fTreatLFasCRLF; int fSendCROnly; int nReceiveCRLF; + //_crlftype nReceiveCRLF; + char sleepChar; + char menuChar; + + SOCKET Socket; + BOOL bVT100Mode; + + char *pAltKey; + } TelParams; #endif \ No newline at end of file diff --git a/contrib/win32/win32compat/cng_cipher.c b/contrib/win32/win32compat/cng_cipher.c index d95db8c..208e75b 100644 --- a/contrib/win32/win32compat/cng_cipher.c +++ b/contrib/win32/win32compat/cng_cipher.c @@ -1,20 +1,37 @@ +/* + * 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_cipher.c -* Author: Pragma Systems, Inc. -* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port -* Copyright (c) 2011, 2015 Pragma Systems, Inc. -* All rights reserved -* -* Common library for Windows Console Screen IO. -* 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 -* 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. -*/ + * + * Openssh ciphers implemented using Microsoft Crypto Next Generation (CNG). + * + */ #include #include diff --git a/contrib/win32/win32compat/cng_cipher.h b/contrib/win32/win32compat/cng_cipher.h index 8b9ca9d..80b4a31 100644 --- a/contrib/win32/win32compat/cng_cipher.h +++ b/contrib/win32/win32compat/cng_cipher.h @@ -1,20 +1,37 @@ +/* + * 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_cipher.h -* Author: Pragma Systems, Inc. -* Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port -* Copyright (c) 2011, 2015 Pragma Systems, Inc. -* All rights reserved -* -* Common library for Windows Console Screen IO. -* 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 -* 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. -*/ + * + * Openssh ciphers implemented using Microsoft Crypto Next Generation (CNG). + * + */ #ifndef CNG_CIPHER_H diff --git a/contrib/win32/win32compat/cng_digest.c b/contrib/win32/win32compat/cng_digest.c new file mode 100644 index 0000000..da6bb71 --- /dev/null +++ b/contrib/win32/win32compat/cng_digest.c @@ -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 +#include + +#include +#include + +#include +#include + + +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; +} diff --git a/contrib/win32/win32compat/conio.c b/contrib/win32/win32compat/conio.c new file mode 100644 index 0000000..ba84b39 --- /dev/null +++ b/contrib/win32/win32compat/conio.c @@ -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 +#include +#include + +#include + +#include +#include + +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; +} + + diff --git a/contrib/win32/win32compat/console.c b/contrib/win32/win32compat/console.c index 4ed1b8b..d0c98f4 100644 --- a/contrib/win32/win32compat/console.c +++ b/contrib/win32/win32compat/console.c @@ -1,19 +1,38 @@ -/* console.c - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* console.c * * Common library for Windows Console Screen IO. * 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 - * 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 diff --git a/contrib/win32/win32compat/console.h b/contrib/win32/win32compat/console.h index 6f39a88..c4ae7a0 100644 --- a/contrib/win32/win32compat/console.h +++ b/contrib/win32/win32compat/console.h @@ -1,8 +1,33 @@ -/* console.h - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* console.h * * Common library for Windows Console Screen IO. * 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 * 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 diff --git a/contrib/win32/win32compat/socket.c b/contrib/win32/win32compat/socket.c index eb660f7..28fb8eb 100644 --- a/contrib/win32/win32compat/socket.c +++ b/contrib/win32/win32compat/socket.c @@ -54,6 +54,7 @@ extern void debug3(const char *fmt,...); extern void error(const char *fmt,...); extern void fatal(const char *fmt,...); +int glob_itissshclient = 0; // ssh client turns it to 1 static int winsock_initialized = 0; extern int logfd; @@ -1545,7 +1546,26 @@ int socketpair(int socks[2]) 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) { DWORD sleep_time = 0; @@ -2391,8 +2411,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max) SOCKET sock; int ret = -1; + int sfd_type = get_sfd_type(sfd); - switch(get_sfd_type(sfd)) + switch (sfd_type) { case SFD_TYPE_SOCKET: { @@ -2450,8 +2471,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max) case SFD_TYPE_FD: case SFD_TYPE_PIPE: - case SFD_TYPE_CONSOLE: + //case SFD_TYPE_CONSOLE: { + ret = _read(sfd_to_fd(sfd), dst, max); if (FD_ISSET(sfd_to_fd(sfd), &debug_sfds)) @@ -2470,6 +2492,25 @@ int WSHELPread(int sfd, char *dst, unsigned int max) 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; } case 99: @@ -2519,7 +2560,11 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max) 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: { @@ -2616,7 +2661,7 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max) case SFD_TYPE_FD: case SFD_TYPE_PIPE: - case SFD_TYPE_CONSOLE: + //case SFD_TYPE_CONSOLE: { ret = _write(sfd_to_fd(sfd), buf, max); @@ -2650,7 +2695,16 @@ 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; + } } DBG_MSG("<- WSHELPwrite(sfd = %d, ret = %d)...\n", sfd, ret); diff --git a/contrib/win32/win32compat/tncon.c b/contrib/win32/win32compat/tncon.c new file mode 100644 index 0000000..707cb7f --- /dev/null +++ b/contrib/win32/win32compat/tncon.c @@ -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 +#include +#include +#include + +#include +#include + +#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 ; +} + + diff --git a/contrib/win32/win32compat/tncon.h b/contrib/win32/win32compat/tncon.h index 9920e96..924e25a 100644 --- a/contrib/win32/win32compat/tncon.h +++ b/contrib/win32/win32compat/tncon.h @@ -1,17 +1,36 @@ -/* tncon.h - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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.h * * 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 #define __TNCON_H diff --git a/contrib/win32/win32compat/tnnet.c b/contrib/win32/win32compat/tnnet.c index a9c8716..f1b3a6a 100644 --- a/contrib/win32/win32compat/tnnet.c +++ b/contrib/win32/win32compat/tnnet.c @@ -1,17 +1,36 @@ -/* tnnet.c - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* tnnet.c * * 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 diff --git a/contrib/win32/win32compat/tnnet.h b/contrib/win32/win32compat/tnnet.h index d4f99eb..8a9ac1b 100644 --- a/contrib/win32/win32compat/tnnet.h +++ b/contrib/win32/win32compat/tnnet.h @@ -1,17 +1,36 @@ -/* tnnet.h - * Author: Pragma Systems, Inc. - * Contribution by Pragma Systems, Inc. for Microsoft openssh win32 port - * Copyright (c) 2011, 2015 Pragma Systems, Inc. +/* + * 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. + */ +/* tnnet.h * * 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 diff --git a/d2utmpa00408 b/d2utmpa00408 deleted file mode 100644 index d064585..0000000 --- a/d2utmpa00408 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis diff --git a/d2utmpa00420 b/d2utmpa00420 deleted file mode 100644 index 4e8153f..0000000 --- a/d2utmpa00420 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis diff --git a/d2utmpa00672 b/d2utmpa00672 deleted file mode 100644 index c236aab..0000000 --- a/d2utmpa00672 +++ /dev/null @@ -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----- diff --git a/d2utmpa01232 b/d2utmpa01232 deleted file mode 100644 index 281890d..0000000 --- a/d2utmpa01232 +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+ -TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA -AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi -yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc= ------END OPENSSH PRIVATE KEY----- diff --git a/d2utmpa01324 b/d2utmpa01324 deleted file mode 100644 index 58f8ff4..0000000 --- a/d2utmpa01324 +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis diff --git a/d2utmpa01468 b/d2utmpa01468 deleted file mode 100644 index 4e8153f..0000000 --- a/d2utmpa01468 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis diff --git a/d2utmpa02828 b/d2utmpa02828 deleted file mode 100644 index c58bc9d..0000000 --- a/d2utmpa02828 +++ /dev/null @@ -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----- diff --git a/d2utmpa03344 b/d2utmpa03344 deleted file mode 100644 index ed84c9f..0000000 --- a/d2utmpa03344 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49 -AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g -uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA== ------END EC PRIVATE KEY----- diff --git a/d2utmpa03516 b/d2utmpa03516 deleted file mode 100644 index d064585..0000000 --- a/d2utmpa03516 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis diff --git a/d2utmpa04376 b/d2utmpa04376 deleted file mode 100644 index a7c1e5e..0000000 --- a/d2utmpa04376 +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis diff --git a/d2utmpa04792 b/d2utmpa04792 deleted file mode 100644 index 58f8ff4..0000000 --- a/d2utmpa04792 +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis diff --git a/d2utmpa04800 b/d2utmpa04800 deleted file mode 100644 index 58f8ff4..0000000 --- a/d2utmpa04800 +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis diff --git a/d2utmpa05272 b/d2utmpa05272 deleted file mode 100644 index c236aab..0000000 --- a/d2utmpa05272 +++ /dev/null @@ -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----- diff --git a/d2utmpa06292 b/d2utmpa06292 deleted file mode 100644 index d064585..0000000 --- a/d2utmpa06292 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis diff --git a/d2utmpa06444 b/d2utmpa06444 deleted file mode 100644 index ed84c9f..0000000 --- a/d2utmpa06444 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49 -AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g -uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA== ------END EC PRIVATE KEY----- diff --git a/d2utmpa07284 b/d2utmpa07284 deleted file mode 100644 index c236aab..0000000 --- a/d2utmpa07284 +++ /dev/null @@ -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----- diff --git a/d2utmpa07336 b/d2utmpa07336 deleted file mode 100644 index 4e8153f..0000000 --- a/d2utmpa07336 +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis diff --git a/d2utmpa08080 b/d2utmpa08080 deleted file mode 100644 index c58bc9d..0000000 --- a/d2utmpa08080 +++ /dev/null @@ -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----- diff --git a/d2utmpa08624 b/d2utmpa08624 deleted file mode 100644 index 281890d..0000000 --- a/d2utmpa08624 +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+ -TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA -AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi -yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc= ------END OPENSSH PRIVATE KEY----- diff --git a/d2utmpa08916 b/d2utmpa08916 deleted file mode 100644 index e23f76c..0000000 --- a/d2utmpa08916 +++ /dev/null @@ -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----- diff --git a/d2utmpa09000 b/d2utmpa09000 deleted file mode 100644 index e23f76c..0000000 --- a/d2utmpa09000 +++ /dev/null @@ -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----- diff --git a/d2utmpa09040 b/d2utmpa09040 deleted file mode 100644 index e23f76c..0000000 --- a/d2utmpa09040 +++ /dev/null @@ -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----- diff --git a/d2utmpa09244 b/d2utmpa09244 deleted file mode 100644 index ed84c9f..0000000 --- a/d2utmpa09244 +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49 -AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g -uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA== ------END EC PRIVATE KEY----- diff --git a/d2utmpa09344 b/d2utmpa09344 deleted file mode 100644 index 281890d..0000000 --- a/d2utmpa09344 +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+ -TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA -AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi -yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc= ------END OPENSSH PRIVATE KEY----- diff --git a/d2utmpa09348 b/d2utmpa09348 deleted file mode 100644 index c58bc9d..0000000 --- a/d2utmpa09348 +++ /dev/null @@ -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----- diff --git a/d2utmpa09960 b/d2utmpa09960 deleted file mode 100644 index a7c1e5e..0000000 --- a/d2utmpa09960 +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis diff --git a/d2utmpa10036 b/d2utmpa10036 deleted file mode 100644 index a7c1e5e..0000000 --- a/d2utmpa10036 +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis diff --git a/id_dsa b/id_dsa deleted file mode 100644 index c236aab..0000000 --- a/id_dsa +++ /dev/null @@ -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----- diff --git a/id_dsa.pub b/id_dsa.pub deleted file mode 100644 index 58f8ff4..0000000 --- a/id_dsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBALwZHP2nliJWL0EDuM07cxdXY2Q+Ux8K/bGOJ4ETpt+WYcqgqEJ7CXKuTVJ8slCBVs5m92uC2y5gaAp+mq7ypaVWcQc4thJrp/oINyNFdrlf5Pb60FnNhntQGUQW4MugISlI6imwPM/P7C/IYEfv8M+0eFssH+Kkhlhcx79BdzIXAAAAFQCAPac/DDQC/nPcfXDVvVeNBiJZwQAAAIBZeDlhgAdv/5lEdcFNNQuZjwtPwyGnwkOshZhMT4keUWYa0cmxqOhA2jnIUKPp6nVip4pJl2PfHQldIkMstA26JoYvvgx0Rqxi3eCsbTgcTuTe1d9LBIzRwqFIVT8wqj2uFdK1Fwp0blk3h36lOejJX+dx+iiJEmmupceXjK/a8wAAAIEAp8OaX5N4UtY0KID34SNj5b3hsAoK5IZ3mBsX7Ngg6Rbnr7h2s5sKsus5FiMtmymVssY84YZTRVP6oZWSShG/WOcUQrzo8zxKH9cj6pc/haSraTakSXLKbbsI2Bj1nMYmXZxSelLUZS0Xwsp3EVxxLYmrzduXyV3ewvrHFZ1q6js= @oasis diff --git a/id_rsa b/id_rsa deleted file mode 100644 index c58bc9d..0000000 --- a/id_rsa +++ /dev/null @@ -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----- diff --git a/id_rsa.pub b/id_rsa.pub deleted file mode 100644 index d064585..0000000 --- a/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6mQW39+Uvy7DPCJd6aHJ0RXDnL+NC7VsC+SUAvosyMwb3PrxjFobyJ24yl6HEpdHvmlbNkipObew3T/drNQ0QK/H4Wt/7mkIdxN6IbF9hpFaLt8Fyd0yd7cpdxGHjYVEjuUBHgsOI/2k2V3zZx/c31X87Zjwb18JM8DKNk/ewKBj1MZVDcBdIWQT5WORPmpCVV7CeLE1TiXc5b2/2wNOOBdKPuDYBDGdPShqD91IaXmIs9KFUo4jFBE/V+K6fesUngudnouKdhFzSokoXbIpFNyi5L2TURtS9ebwm0Zkaz2xW86DJ6bSMtuMqhUDsJOZFmHh8NnTwuSDPUVXhlzbZ @oasis diff --git a/is_rsa b/is_rsa deleted file mode 100644 index e23f76c..0000000 --- a/is_rsa +++ /dev/null @@ -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----- diff --git a/is_rsa.pub b/is_rsa.pub deleted file mode 100644 index 4e8153f..0000000 --- a/is_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCci4oy7TlKHy9d8+4slhm66MzE9haGbasI3Wwt6LqrvK6X0jtVCA+04nBWoBH7m+8UJrd6mqldSsOVETiZFLm4sNl95MmKirWHmoSeJy12wyovQXYkyYRH0T4J2lDna6JbgCPuaZpgIq88sxb/Z8RVf9fjStd6aNIyM95BalRnL839mYJxXpfPNMBkXGED3w/m5S6GgxX8VrP1cC6N+kXao5nyctZqFZAQbtj122LAeFNWN6W0Ehy5mx1VETFII+h9vSJ2LwDNHNrYBPV2IOtJ/tQ8ajSoc60bNvJjJtgld/he3KlmrgjtKcC4Akr1Bmegm+iI4pg2VgUnpocTdDfb @oasis diff --git a/readpass.c b/readpass.c index 9b9206b..10486e5 100644 --- a/readpass.c +++ b/readpass.c @@ -362,7 +362,7 @@ read_passphrase(const char *prompt, int flags) } 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 } } diff --git a/session.c b/session.c index 802354e..f86f1ed 100644 --- a/session.c +++ b/session.c @@ -494,6 +494,46 @@ do_authenticated1(Authctxt *authctxt) #ifndef WIN32_FIXME #define USE_PIPES 1 #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 * 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 *laddr; char buf[256]; + int prot_scr_width = 80; + int prot_scr_height = 25; if (!command) { exec_command = s->pw->pw_shell; + //exec_command = "c:\\tools\\echoit.exe"; // temp } else { @@ -560,8 +603,30 @@ do_exec_no_pty(Session *s, const char *command) /* * Create three socket pairs for stdin, stdout and stderr */ - - socketpair(sockin); + + 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(sockout); 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("sockerr[0]: %d sockerr[1]: %d", sockerr[0], sockerr[1]); - crlf_sfd(sockin[1]); + if ( (s -> is_subsystem) || (s ->ttyfd == -1)) + crlf_sfd(sockin[1]); + crlf_sfd(sockout[1]); - SetHandleInformation(sfd_to_handle(sockin[1]), HANDLE_FLAG_INHERIT, 0); + if ( (s -> is_subsystem) || (s ->ttyfd == -1)) + SetHandleInformation(sfd_to_handle(sockin[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); @@ -583,12 +652,35 @@ do_exec_no_pty(Session *s, const char *command) memset(&si, 0 , sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); - si.hStdInput = (HANDLE) sfd_to_handle(sockin[0]); - si.hStdOutput = (HANDLE) sfd_to_handle(sockout[0]); - si.hStdError = (HANDLE) sfd_to_handle(sockerr[0]); - si.wShowWindow = SW_HIDE; - si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; - si.lpDesktop = L"winsta0\\default"; + 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.hStdOutput = (HANDLE) sfd_to_handle(sockout[0]); + si.hStdError = (HANDLE) sfd_to_handle(sockerr[0]); + si.lpDesktop = NULL; //L"winsta0\\default"; + } + //si.wShowWindow = SW_HIDE; + //si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; + SetEnvironmentVariable("USER", 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); - //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 - //Channel *c=channel_by_id ( s->chanid ); - //buffer_append(&c->input, "\033[20h", 5); - //channel_output_poll(); - //} + char *inittermseq = "\033[20h\033[?7h\0" ; // LFtoCRLF AUTOWRAPON + Channel *c=channel_by_id ( s->chanid ); + buffer_append(&c->input, inittermseq, strlen(inittermseq)); + channel_output_poll(); + } //if (s ->ttyfd != -1) { // 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]; 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, - CREATE_NEW_PROCESS_GROUP, NULL, s -> pw -> pw_dir, + /*CREATE_NEW_PROCESS_GROUP*/ dwStartupFlags, NULL, s -> pw -> pw_dir, &si, &pi); /* * 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)) { 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); } @@ -847,14 +942,6 @@ do_exec_no_pty(Session *s, const char *command) 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 */ @@ -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. */ - - close(sockin[0]); + if ( (s -> is_subsystem) || (s ->ttyfd == -1)) + close(sockin[0]); + close(sockout[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 * it to the user, otherwise multiple sessions may accumulate @@ -2629,7 +2728,9 @@ session_pty_req(Session *s) pty_setowner(s->pw, s->tty); /* Set window size from the packet. */ + #ifndef WIN32_FIXME pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel); + #endif packet_check_eom(); session_proctitle(s); diff --git a/sftp.c b/sftp.c index c785bcc..2f7a277 100644 --- a/sftp.c +++ b/sftp.c @@ -292,14 +292,12 @@ help(void) static void local_do_shell(const char *args) { - #ifdef WIN32_FIXME + #ifdef WIN32_FIXME - /* - * Not implemented on native Win32. - */ - - fprintf(stderr, "Local shell is not implemented on Win32.\n"); - + if (!*args) { + args = (char *) getenv("ComSpec"); // get name of Windows cmd shell + } + system(args); // execute the shell or cmd given #else /* diff --git a/ssh.c b/ssh.c index 24c84c3..0ee3df2 100644 --- a/ssh.c +++ b/ssh.c @@ -296,12 +296,38 @@ static void CleanUpProxyProcess() } } +extern Buffer stdin_buffer; /* Buffer for stdin data. */ /* * This function handles exit signal. */ 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..."); CleanUpProxyProcess(); @@ -311,6 +337,7 @@ BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType) cleanup_exit(0); return TRUE; + } #endif /* WIN32_FIXME */ @@ -580,6 +607,7 @@ set_addrinfo_port(struct addrinfo *addrs, int port) /* * Main program for the ssh client. */ + int main(int ac, char **av) { @@ -605,9 +633,6 @@ main(int ac, char **av) * Setup exit signal handler for receiving signal, when * parent server is stopped. */ - - AllocConsole(); - ConInit( STD_OUTPUT_HANDLE, 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(); packet_close(); diff --git a/ssh_host_dsa_key b/ssh_host_dsa_key deleted file mode 100644 index bd2140b..0000000 --- a/ssh_host_dsa_key +++ /dev/null @@ -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----- diff --git a/ssh_host_dsa_key.pub b/ssh_host_dsa_key.pub deleted file mode 100644 index 9ef638e..0000000 --- a/ssh_host_dsa_key.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-dss AAAAB3NzaC1kc3MAAACBAOundiq2N+PFt35FSi7+j0uZo+wNil5dtOvmo+dbAUHD1V0AXL6s99aVZHkilDNUpbdtxqUrdmTIoRjFbOtDQv3YQhBsqF8SZds2tD6BPclw0RRODcmQxU5ZdaqnzJdUoOhVvXgZ8KzDklkaDNhKp+HFxIe0Mbo9FKpwP5nWkLVbAAAAFQC1Cke3wXxqdmYqXKq0eSmwtpHI4QAAAIEAzxx3GUs75EGaH1bm6K4Qj2Gnh1fW79hpm2UkiWyUZfVtUBRz8FCAOqq8XTXbr17K6kHHRjbS7Cq2OG4rdcadrLmr2QQ63OslQf4Y3HYeppcRnpkxARH1QtkVBqbNVaNN8Cr4yB9NPKVza0kZIjdGLKZybMYBIPxKNsyR+U3pNmAAAACAFDgF4qswcm0KqCW+xe4cnHXVMCoFBTsPWKtAFQHG5z4LMglZJxQvizULQNlBwNfxlfzaGDo3URxh3p2db1m3qpWOVTWy7ytmiEJbf/HQlg9JELyhvcMhY8LAmz1JUPjKyQHhttOPykScZFeF9x9jkDIP+KcN6EsjceyscogCPbA= @oasis diff --git a/ssh_host_ecdsa_key b/ssh_host_ecdsa_key deleted file mode 100644 index ed84c9f..0000000 --- a/ssh_host_ecdsa_key +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN EC PRIVATE KEY----- -MHcCAQEEIOrwk5LCELxzRGufJcI3ogOmaqYwNGYg0KIZqnQysKsPoAoGCCqGSM49 -AwEHoUQDQgAEXkGf9akhGRCleBfum8S5D11uWdOngABaPtFj7OHGk4u8gncSGf3g -uQj9j5MSCt9BV57GXKXgb0Xu0TH0wXbNqA== ------END EC PRIVATE KEY----- diff --git a/ssh_host_ecdsa_key.pub b/ssh_host_ecdsa_key.pub deleted file mode 100644 index 176b105..0000000 --- a/ssh_host_ecdsa_key.pub +++ /dev/null @@ -1 +0,0 @@ -ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF5Bn/WpIRkQpXgX7pvEuQ9dblnTp4AAWj7RY+zhxpOLvIJ3Ehn94LkI/Y+TEgrfQVeexlyl4G9F7tEx9MF2zag= @oasis diff --git a/ssh_host_ed25519_key b/ssh_host_ed25519_key deleted file mode 100644 index 281890d..0000000 --- a/ssh_host_ed25519_key +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyAAAAJAJSj5MCUo+ -TAAAAAtzc2gtZWQyNTUxOQAAACDsm6kHU3O2x/KuzcbAUhZGYsoc4Gn6YiFcuulsx4gsyA -AAAECGe69spV/5acdoNqiARzB79o5ASCy2SQ6Ng7SWENmDguybqQdTc7bH8q7NxsBSFkZi -yhzgafpiIVy66WzHiCzIAAAABkBvYXNpcwECAwQFBgc= ------END OPENSSH PRIVATE KEY----- diff --git a/ssh_host_ed25519_key.pub b/ssh_host_ed25519_key.pub deleted file mode 100644 index a7c1e5e..0000000 --- a/ssh_host_ed25519_key.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOybqQdTc7bH8q7NxsBSFkZiyhzgafpiIVy66WzHiCzI @oasis diff --git a/ssh_host_rsa_key b/ssh_host_rsa_key deleted file mode 100644 index 99adfb8..0000000 --- a/ssh_host_rsa_key +++ /dev/null @@ -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----- diff --git a/ssh_host_rsa_key.pub b/ssh_host_rsa_key.pub deleted file mode 100644 index 7169c3c..0000000 --- a/ssh_host_rsa_key.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGVZzgrkEiQwiqb3F7bu39dayPGJqdCg1xLhS4S7nrFfcCFqHmuOqzp4wwxUacYaCOXitTJK0pmfgfT2O67xSRDWemTQhadN29E9BfYMWtkNgbA4sfYJUXIcVZtLJNqoNTmPC5mvbJJub6E3wm8800aiVCyZIVdTsumLnOlPXvguE0rKN62g39PiDzVHwexkoxbtbs52wh2IodDkN4Fma+r9YTlm3FMipo/3HDo75G/SQNeOA9TKhS1MEQ4kQ1eTW+UzMMFuQyNzt8q6OcyaGYhxN6zgmFiW8Hp/yQJDcw/QDhoPVdXAONnLsNE89s63e85nPdm70pyswOadEdlIeX @oasis diff --git a/sshd.c b/sshd.c index 8c34aee..0e31ea7 100644 --- a/sshd.c +++ b/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)); + char remotesoc[64]; + snprintf ( remotesoc, sizeof(remotesoc), "%d", sfd_to_handle(*newsock)); + SetEnvironmentVariable("SSHD_REMSOC", remotesoc); + 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.hStdError = GetStdHandle(STD_ERROR_HANDLE); si.wShowWindow = SW_HIDE; @@ -1886,7 +1890,20 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s) BOOL WINAPI CtrlHandlerRoutine(DWORD dwCtrlType) { - debug("Exit signal received..."); + 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..."); cleanup_exit(0); @@ -2776,19 +2793,22 @@ main(int ac, char **av) } 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 */ - 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 diff --git a/sshpty.c b/sshpty.c index 2fba470..8f8b5d6 100644 --- a/sshpty.c +++ b/sshpty.c @@ -211,6 +211,10 @@ pty_change_window_size(int ptyfd, u_int row, u_int col, w.ws_xpixel = xpixel; w.ws_ypixel = ypixel; (void) ioctl(ptyfd, TIOCSWINSZ, &w); +#else + extern HANDLE hConsole ; + hConsole = ptyfd; + ConSetScreenSize( col, row ); #endif }