From 98dc5962002701057e73840c09afc40065c8cfb9 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Mon, 19 Oct 2015 12:42:39 -0700 Subject: [PATCH 01/18] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2b7a8c9..ec04f85 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # OpenSSH Win32 port of OpenSSH + +Look at the [wiki](https://github.com/PowerShell/Win32-OpenSSH/wiki) for help From 2cfb138bb8c30bae39c9613dfca750d9841e57af Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Mon, 19 Oct 2015 17:55:55 -0500 Subject: [PATCH 02/18] Add local shell access feature in sftp.exe client This was not implemented before in Win32. !takes to the windows shell and !command runs the command in Windows shell. exit brings the user back to sftp like in Linux/Unix shell. --- sftp.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) 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 /* From c636c1ec17bc0ca3266842c3dd037616472cb25d Mon Sep 17 00:00:00 2001 From: Manoj Ampalam Date: Tue, 20 Oct 2015 10:09:00 -0700 Subject: [PATCH 03/18] Merged README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index ec04f85..c89e618 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,6 @@ 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 From 7e326eba4a3d2f80e5cbff2e1e136bf4885746c8 Mon Sep 17 00:00:00 2001 From: arif-pragmasys Date: Tue, 20 Oct 2015 13:51:00 -0500 Subject: [PATCH 04/18] remove key files, since they are supposed to be generated as needed --- id_dsa | 12 ------------ id_dsa.pub | 1 - id_rsa | 27 --------------------------- id_rsa.pub | 1 - is_rsa | 27 --------------------------- is_rsa.pub | 1 - ssh_host_dsa_key | 12 ------------ ssh_host_dsa_key.pub | 1 - ssh_host_ecdsa_key | 5 ----- ssh_host_ecdsa_key.pub | 1 - ssh_host_ed25519_key | 7 ------- ssh_host_ed25519_key.pub | 1 - ssh_host_rsa_key | 27 --------------------------- ssh_host_rsa_key.pub | 1 - 14 files changed, 124 deletions(-) delete mode 100644 id_dsa delete mode 100644 id_dsa.pub delete mode 100644 id_rsa delete mode 100644 id_rsa.pub delete mode 100644 is_rsa delete mode 100644 is_rsa.pub delete mode 100644 ssh_host_dsa_key delete mode 100644 ssh_host_dsa_key.pub delete mode 100644 ssh_host_ecdsa_key delete mode 100644 ssh_host_ecdsa_key.pub delete mode 100644 ssh_host_ed25519_key delete mode 100644 ssh_host_ed25519_key.pub delete mode 100644 ssh_host_rsa_key delete mode 100644 ssh_host_rsa_key.pub 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/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 From e2beaa0cc1d6bc8c45edad7ecb47562201edf362 Mon Sep 17 00:00:00 2001 From: arif-pragmasys Date: Tue, 20 Oct 2015 13:51:56 -0500 Subject: [PATCH 05/18] add key files to ignore list --- .gitignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitignore b/.gitignore index 904aa1f..bbb2764 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 From 9d68c58a02509bb6f1fb405702f4b6efad914743 Mon Sep 17 00:00:00 2001 From: arif-pragmasys Date: Tue, 20 Oct 2015 14:26:29 -0500 Subject: [PATCH 06/18] remove key files as they are generated when needed --- d2utmpa00408 | 1 - d2utmpa00420 | 1 - d2utmpa00672 | 12 ------------ d2utmpa01232 | 7 ------- d2utmpa01324 | 1 - d2utmpa01468 | 1 - d2utmpa02828 | 27 --------------------------- d2utmpa03344 | 5 ----- d2utmpa03516 | 1 - d2utmpa04376 | 1 - d2utmpa04792 | 1 - d2utmpa04800 | 1 - d2utmpa05272 | 12 ------------ d2utmpa06292 | 1 - d2utmpa06444 | 5 ----- d2utmpa07284 | 12 ------------ d2utmpa07336 | 1 - d2utmpa08080 | 27 --------------------------- d2utmpa08624 | 7 ------- d2utmpa08916 | 27 --------------------------- d2utmpa09000 | 27 --------------------------- d2utmpa09040 | 27 --------------------------- d2utmpa09244 | 5 ----- d2utmpa09344 | 7 ------- d2utmpa09348 | 27 --------------------------- d2utmpa09960 | 1 - d2utmpa10036 | 1 - 27 files changed, 246 deletions(-) delete mode 100644 d2utmpa00408 delete mode 100644 d2utmpa00420 delete mode 100644 d2utmpa00672 delete mode 100644 d2utmpa01232 delete mode 100644 d2utmpa01324 delete mode 100644 d2utmpa01468 delete mode 100644 d2utmpa02828 delete mode 100644 d2utmpa03344 delete mode 100644 d2utmpa03516 delete mode 100644 d2utmpa04376 delete mode 100644 d2utmpa04792 delete mode 100644 d2utmpa04800 delete mode 100644 d2utmpa05272 delete mode 100644 d2utmpa06292 delete mode 100644 d2utmpa06444 delete mode 100644 d2utmpa07284 delete mode 100644 d2utmpa07336 delete mode 100644 d2utmpa08080 delete mode 100644 d2utmpa08624 delete mode 100644 d2utmpa08916 delete mode 100644 d2utmpa09000 delete mode 100644 d2utmpa09040 delete mode 100644 d2utmpa09244 delete mode 100644 d2utmpa09344 delete mode 100644 d2utmpa09348 delete mode 100644 d2utmpa09960 delete mode 100644 d2utmpa10036 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 From f1d8b2e72d6d9846b8239434b266904a4faecaca Mon Sep 17 00:00:00 2001 From: arif-pragmasys Date: Tue, 20 Oct 2015 14:28:23 -0500 Subject: [PATCH 07/18] add temp key files to ignore list --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bbb2764..5761a39 100644 --- a/.gitignore +++ b/.gitignore @@ -272,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 From de4ae13f76e89c0c7e1e42ec1772ca4ea9bbc962 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Tue, 20 Oct 2015 18:24:52 -0500 Subject: [PATCH 08/18] ssh.exe client sends current window size and TERM value when pty-req is made This was not coded before for Win32 port. Remote sshd server is now aware of our client's screen size and VT/ANSI TERM emulation. --- channels.c | 26 ++++++++++++++++++++++++-- channels.h | 5 +++++ clientloop.c | 35 ++++++++++++++++++++++++++++++----- ssh.c | 11 ++++++++--- 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/channels.c b/channels.c index 1dd0777..4002f96 100644 --- a/channels.c +++ b/channels.c @@ -3913,10 +3913,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 +3934,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..702eb94 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 */ @@ -563,6 +569,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 */ } @@ -2571,11 +2596,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/ssh.c b/ssh.c index 24c84c3..226cfc8 100644 --- a/ssh.c +++ b/ssh.c @@ -580,6 +580,7 @@ set_addrinfo_port(struct addrinfo *addrs, int port) /* * Main program for the ssh client. */ + int main(int ac, char **av) { @@ -605,9 +606,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 +1500,13 @@ main(int ac, char **av) } } + #ifdef WIN32_FIXME + if (tty_flag) { + //AllocConsole(); + ConInit( STD_OUTPUT_HANDLE, TRUE ); + } + #endif + exit_status = compat20 ? ssh_session2() : ssh_session(); packet_close(); From 89452c8a2f5acf2bc888651443364b340d58e8cd Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Tue, 20 Oct 2015 19:23:18 -0500 Subject: [PATCH 09/18] There shouldn't be any "*" when entering a password or passphrase There shouldn't be any "*" when entering a password or passphrase for better security. Linux/Unix openssh works the same way - without any "*". Great suggestion by Mark Hahnel in comments of Issue #5 --- readpass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 } } From ce1d1340d919baf69ffd5fc68b7e81aba61eb0fb Mon Sep 17 00:00:00 2001 From: arif-pragmasys Date: Thu, 22 Oct 2015 16:03:32 -0500 Subject: [PATCH 10/18] cng digest code changes to replace openssl digest --- Makefile.in | 2 +- contrib/win32/win32compat/Makefile.in | 6 +- contrib/win32/win32compat/cng_digest.c | 225 +++++++++++++++++++++++++ 3 files changed, 229 insertions(+), 4 deletions(-) create mode 100644 contrib/win32/win32compat/cng_digest.c 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/contrib/win32/win32compat/Makefile.in b/contrib/win32/win32compat/Makefile.in index 2661cb2..2d6cdf6 100644 --- a/contrib/win32/win32compat/Makefile.in +++ b/contrib/win32/win32compat/Makefile.in @@ -23,7 +23,7 @@ WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.o \ WIN32COMPATLIB=@LIBWIN32COMPAT@ -CNGFILES=cng_cipher.o +CNGFILES=cng_cipher.o cng_digest.o .c.o: @@ -44,6 +44,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/cng_digest.c b/contrib/win32/win32compat/cng_digest.c new file mode 100644 index 0000000..c7cdb6a --- /dev/null +++ b/contrib/win32/win32compat/cng_digest.c @@ -0,0 +1,225 @@ +/* digest_cng.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. +*/ + +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, BCRYPT_HASH_REUSABLE_FLAG)) != 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; +} From 339912c24b79105739c7d60ae40eece4d529b988 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Fri, 23 Oct 2015 19:10:06 -0500 Subject: [PATCH 11/18] Use a Console as input to drive a shell in sshd.exe Fixes issues like cmd.exe shell not handling backspace, control-c. Control-c is still a work in progress and will be fixed but backspace processing works. This work when complete will make cmd.exe shell and powershell work better for interactive users. --- channels.c | 14 ++- clientloop.c | 5 +- contrib/win32/win32compat/Makefile.in | 2 +- contrib/win32/win32compat/conio.c | 164 ++++++++++++++++++++++++++ contrib/win32/win32compat/socket.c | 13 +- session.c | 73 +++++++++--- ssh.c | 27 +++++ sshd.c | 34 ++++-- 8 files changed, 299 insertions(+), 33 deletions(-) create mode 100644 contrib/win32/win32compat/conio.c diff --git a/channels.c b/channels.c index 4002f96..f68a59e 100644 --- a/channels.c +++ b/channels.c @@ -2462,13 +2462,15 @@ 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 { + 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(); diff --git a/clientloop.c b/clientloop.c index 702eb94..ebc89ac 100644 --- a/clientloop.c +++ b/clientloop.c @@ -168,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. */ diff --git a/contrib/win32/win32compat/Makefile.in b/contrib/win32/win32compat/Makefile.in index 2d6cdf6..4eb0b48 100644 --- a/contrib/win32/win32compat/Makefile.in +++ b/contrib/win32/win32compat/Makefile.in @@ -19,7 +19,7 @@ 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 WIN32COMPATLIB=@LIBWIN32COMPAT@ diff --git a/contrib/win32/win32compat/conio.c b/contrib/win32/win32compat/conio.c new file mode 100644 index 0000000..cd11034 --- /dev/null +++ b/contrib/win32/win32compat/conio.c @@ -0,0 +1,164 @@ +/* conio.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 + * + * Inserts data into Windows Console Input. WriteToConsole() API implemented. + * + * 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 +#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/socket.c b/contrib/win32/win32compat/socket.c index eb660f7..27ca505 100644 --- a/contrib/win32/win32compat/socket.c +++ b/contrib/win32/win32compat/socket.c @@ -2616,7 +2616,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 +2650,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/session.c b/session.c index 802354e..97f0e2b 100644 --- a/session.c +++ b/session.c @@ -549,6 +549,7 @@ do_exec_no_pty(Session *s, const char *command) if (!command) { exec_command = s->pw->pw_shell; + //exec_command = "c:\\tools\\echoit.exe"; // temp } else { @@ -560,8 +561,21 @@ do_exec_no_pty(Session *s, const char *command) /* * Create three socket pairs for stdin, stdout and stderr */ - - socketpair(sockin); + + HANDLE wfdtocmd = -1; + if ( (!s -> is_subsystem) && (s ->ttyfd != -1)) + { + wfdtocmd = GetStdHandle (STD_INPUT_HANDLE) ; + 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 + + //allocate_standard_descriptor(STDIN_FILENO); + //allocate_standard_descriptor(wfdtocmd); // put the std input handle in our global general handle table + } + else + socketpair(sockin); + socketpair(sockout); socketpair(sockerr); @@ -569,10 +583,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,13 +601,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.lpReserved = 0; + si.lpTitle = NULL; /* NULL means use exe name as title */ + si.dwX = 0; + si.dwY = 0; + si.dwXSize = 80; + si.dwYSize = 25; + si.dwXCountChars = 80; + si.dwYCountChars = 25; + 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]); + } + 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.wShowWindow = SW_HIDE; + //si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.lpDesktop = L"winsta0\\default"; + SetEnvironmentVariable("USER", s->pw->pw_name); SetEnvironmentVariable("USERNAME", s->pw->pw_name); SetEnvironmentVariable("LOGNAME", s->pw->pw_name); @@ -785,12 +825,12 @@ 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(); - //} + Channel *c=channel_by_id ( s->chanid ); + buffer_append(&c->input, "\033[20h", 5); + channel_output_poll(); + } //if (s ->ttyfd != -1) { // set the channel to tty interactive type @@ -876,8 +916,9 @@ 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]); diff --git a/ssh.c b/ssh.c index 226cfc8..ec031eb 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 */ 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 From a3d0255b698e57e8a2802e45de47118b1188d42d Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Sun, 25 Oct 2015 01:53:38 -0500 Subject: [PATCH 12/18] Fix Console Insertion issue of multiple sshd interactive sessions not working We create console for each sshd session from CONIN$ and CONOUT$ before starting shell cmd.exe --- session.c | 84 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 17 deletions(-) diff --git a/session.c b/session.c index 97f0e2b..c884818 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,6 +585,8 @@ 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) { @@ -565,10 +607,14 @@ do_exec_no_pty(Session *s, const char *command) HANDLE wfdtocmd = -1; if ( (!s -> is_subsystem) && (s ->ttyfd != -1)) { + //FreeConsole(); + //AllocConsole(); + MakeNewConsole(); + wfdtocmd = GetStdHandle (STD_INPUT_HANDLE) ; 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 + //if (sockin[1] >= 0) + // sfd_set_to_console(sockin[1]); // mark it as Console type //allocate_standard_descriptor(STDIN_FILENO); //allocate_standard_descriptor(wfdtocmd); // put the std input handle in our global general handle table @@ -605,10 +651,10 @@ do_exec_no_pty(Session *s, const char *command) si.lpTitle = NULL; /* NULL means use exe name as title */ si.dwX = 0; si.dwY = 0; - si.dwXSize = 80; - si.dwYSize = 25; - si.dwXCountChars = 80; - si.dwYCountChars = 25; + 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 ; @@ -619,15 +665,16 @@ do_exec_no_pty(Session *s, const char *command) 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; - si.lpDesktop = L"winsta0\\default"; SetEnvironmentVariable("USER", s->pw->pw_name); @@ -853,9 +900,10 @@ 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 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() @@ -865,7 +913,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); } @@ -887,14 +935,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 */ @@ -922,6 +962,16 @@ do_exec_no_pty(Session *s, const char *command) 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 */ + + /* + * 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 From b56534c4a673b11591b9042b13b096c769e63735 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Sun, 25 Oct 2015 17:33:46 -0500 Subject: [PATCH 13/18] Microsoft Copyright message added to all new files New files for openssh win32 port now contain MS Copyright texts. --- contrib/win32/win32compat/ansiprsr.c | 39 +++++++++++++++----- contrib/win32/win32compat/ansiprsr.h | 39 +++++++++++++++----- contrib/win32/win32compat/cng_cipher.c | 49 +++++++++++++++++-------- contrib/win32/win32compat/cng_cipher.h | 49 +++++++++++++++++-------- contrib/win32/win32compat/cng_digest.c | 51 +++++++++++++++++--------- contrib/win32/win32compat/conio.c | 37 ++++++++++++++----- contrib/win32/win32compat/console.c | 39 +++++++++++++++----- contrib/win32/win32compat/console.h | 36 ++++++++++++++---- contrib/win32/win32compat/tncon.h | 39 +++++++++++++++----- contrib/win32/win32compat/tnnet.c | 39 +++++++++++++++----- contrib/win32/win32compat/tnnet.h | 39 +++++++++++++++----- 11 files changed, 331 insertions(+), 125 deletions(-) diff --git a/contrib/win32/win32compat/ansiprsr.c b/contrib/win32/win32compat/ansiprsr.c index c3d5631..9522cb6 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 diff --git a/contrib/win32/win32compat/ansiprsr.h b/contrib/win32/win32compat/ansiprsr.h index 96e1159..ebc49da 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 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 index c7cdb6a..4847675 100644 --- a/contrib/win32/win32compat/cng_digest.c +++ b/contrib/win32/win32compat/cng_digest.c @@ -1,20 +1,37 @@ -/* digest_cng.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. -*/ +/* + * 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; diff --git a/contrib/win32/win32compat/conio.c b/contrib/win32/win32compat/conio.c index cd11034..ba84b39 100644 --- a/contrib/win32/win32compat/conio.c +++ b/contrib/win32/win32compat/conio.c @@ -1,17 +1,36 @@ -/* conio.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 * - * Inserts data into Windows Console Input. WriteToConsole() API implemented. + * 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: + * 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. * - * 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.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/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 From 11786890112f39858b82ce54b5ca70bf4ba9e5f7 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Sun, 25 Oct 2015 23:54:56 -0500 Subject: [PATCH 14/18] sshd pty console screen size set to what ssh client requests Initial remote console screen size set correctly in sshd interactive session to the value we received from the ssh client in the pty-req request. --- session.c | 8 +++++++- sshpty.c | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/session.c b/session.c index c884818..926e68f 100644 --- a/session.c +++ b/session.c @@ -610,8 +610,14 @@ do_exec_no_pty(Session *s, const char *command) //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) ; + 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 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 } From 1c258ec0aeca5ac710451e8ff3918c5cfbe65263 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Mon, 26 Oct 2015 15:19:27 -0500 Subject: [PATCH 15/18] Fix control-c working in sshd server control-c is handled correctly by sshd server and passed to shell for it to process which usually means terminating the current program or programs. --- channels.c | 14 ++++++++++++-- session.c | 10 +++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/channels.c b/channels.c index f68a59e..e6fe9fc 100644 --- a/channels.c +++ b/channels.c @@ -2463,11 +2463,21 @@ channel_input_data(int type, u_int32_t seq, void *ctxt) 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 ) { // we echo the data if it is sshd server and pty interactive mode + 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 + } } } diff --git a/session.c b/session.c index 926e68f..f86f1ed 100644 --- a/session.c +++ b/session.c @@ -605,6 +605,7 @@ do_exec_no_pty(Session *s, const char *command) */ HANDLE wfdtocmd = -1; + int retcode = -1; if ( (!s -> is_subsystem) && (s ->ttyfd != -1)) { //FreeConsole(); @@ -622,8 +623,6 @@ do_exec_no_pty(Session *s, const char *command) //if (sockin[1] >= 0) // sfd_set_to_console(sockin[1]); // mark it as Console type - //allocate_standard_descriptor(STDIN_FILENO); - //allocate_standard_descriptor(wfdtocmd); // put the std input handle in our global general handle table } else socketpair(sockin); @@ -880,8 +879,9 @@ do_exec_no_pty(Session *s, const char *command) if (!(s -> is_subsystem)) { // Send to the remote client ANSI/VT Sequence so that they send us CRLF in place of LF + char *inittermseq = "\033[20h\033[?7h\0" ; // LFtoCRLF AUTOWRAPON Channel *c=channel_by_id ( s->chanid ); - buffer_append(&c->input, "\033[20h", 5); + buffer_append(&c->input, inittermseq, strlen(inittermseq)); channel_output_poll(); } @@ -908,6 +908,7 @@ do_exec_no_pty(Session *s, const char *command) 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*/ dwStartupFlags, NULL, s -> pw -> pw_dir, &si, &pi); @@ -969,6 +970,7 @@ do_exec_no_pty(Session *s, const char *command) 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 @@ -2726,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); From d4c8ef9ac5cdb18e217871a019e30597987c271d Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Tue, 27 Oct 2015 19:05:38 -0500 Subject: [PATCH 16/18] Improved SSH client interactive mode and fixed control-c to work Console API is now used for interactive tty mode. Thus ssh.exe client can now pass each character to remote side as one types so that programs like more works correctly. Control-c now will stop the remote program instead of exiting the ssh.exe. --- channels.c | 8 +- clientloop.c | 14 +- contrib/win32/win32compat/Makefile.in | 3 +- contrib/win32/win32compat/ansiprsr.c | 2 +- contrib/win32/win32compat/ansiprsr.h | 17 + contrib/win32/win32compat/socket.c | 51 +- contrib/win32/win32compat/tncon.c | 762 ++++++++++++++++++++++++++ ssh.c | 4 +- 8 files changed, 845 insertions(+), 16 deletions(-) create mode 100644 contrib/win32/win32compat/tncon.c diff --git a/channels.c b/channels.c index e6fe9fc..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 */ diff --git a/clientloop.c b/clientloop.c index ebc89ac..6b9c60d 100644 --- a/clientloop.c +++ b/clientloop.c @@ -1348,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++; } diff --git a/contrib/win32/win32compat/Makefile.in b/contrib/win32/win32compat/Makefile.in index 4eb0b48..78de177 100644 --- a/contrib/win32/win32compat/Makefile.in +++ b/contrib/win32/win32compat/Makefile.in @@ -19,7 +19,8 @@ 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 conio.o + stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o \ + console.o tnnet.o conio.o tncon.o WIN32COMPATLIB=@LIBWIN32COMPAT@ diff --git a/contrib/win32/win32compat/ansiprsr.c b/contrib/win32/win32compat/ansiprsr.c index 9522cb6..4abf200 100644 --- a/contrib/win32/win32compat/ansiprsr.c +++ b/contrib/win32/win32compat/ansiprsr.c @@ -51,7 +51,7 @@ // items used from other modules int NetWriteString(char* pszString, size_t cbString); TelParams Parameters; -extern int lftocrlf; +int lftocrlf = 0; extern int ScreenX; extern int ScreenY; diff --git a/contrib/win32/win32compat/ansiprsr.h b/contrib/win32/win32compat/ansiprsr.h index ebc49da..8ce75aa 100644 --- a/contrib/win32/win32compat/ansiprsr.h +++ b/contrib/win32/win32compat/ansiprsr.h @@ -55,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/socket.c b/contrib/win32/win32compat/socket.c index 27ca505..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: { diff --git a/contrib/win32/win32compat/tncon.c b/contrib/win32/win32compat/tncon.c new file mode 100644 index 0000000..7e4d913 --- /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->fSendCROnly) + NetWriteString2(pParams->Socket, "\r", 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/ssh.c b/ssh.c index ec031eb..0ee3df2 100644 --- a/ssh.c +++ b/ssh.c @@ -1530,7 +1530,9 @@ main(int ac, char **av) #ifdef WIN32_FIXME if (tty_flag) { //AllocConsole(); - ConInit( STD_OUTPUT_HANDLE, TRUE ); + 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 From e743b54a61a272fc403ff288f98150ddd2065838 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Wed, 28 Oct 2015 00:31:24 -0500 Subject: [PATCH 17/18] Fix ssh client to generate LF or CRLF correctly Typically LF is sent when Return key is hit. But for sshd servers that sent us via ANSI escape sequence that CRLF is to be sent, ssh.exe client will do so which is used commonly used by sshd servers in Windows - like our own win32 port sshd. --- contrib/win32/win32compat/ansiprsr.c | 7 ++----- contrib/win32/win32compat/tncon.c | 6 +++--- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/contrib/win32/win32compat/ansiprsr.c b/contrib/win32/win32compat/ansiprsr.c index 4abf200..659a997 100644 --- a/contrib/win32/win32compat/ansiprsr.c +++ b/contrib/win32/win32compat/ansiprsr.c @@ -51,7 +51,6 @@ // items used from other modules int NetWriteString(char* pszString, size_t cbString); TelParams Parameters; -int lftocrlf = 0; extern int ScreenX; extern int ScreenY; @@ -407,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/tncon.c b/contrib/win32/win32compat/tncon.c index 7e4d913..707cb7f 100644 --- a/contrib/win32/win32compat/tncon.c +++ b/contrib/win32/win32compat/tncon.c @@ -77,7 +77,7 @@ void ConInputInitParams(void) Parameters.szDebugInputFile = NULL; Parameters.fDebugWait= FALSE; Parameters.nReceiveCRLF = ENUM_LF; - Parameters.fSendCROnly = TRUE; //FALSE; + //Parameters.fSendCROnly = TRUE; //FALSE; Parameters.sleepChar = '`'; Parameters.menuChar = '\035'; // CTRL-] Parameters.pAltKey = "\x01"; // default @@ -192,8 +192,8 @@ int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen) switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar) { case 0xd: - if (pParams->fSendCROnly) - NetWriteString2(pParams->Socket, "\r", 1, 0); + if (pParams->nReceiveCRLF == ENUM_LF) + NetWriteString2(pParams->Socket, "\n", 1, 0); else NetWriteString2(pParams->Socket, "\r\n", 2, 0); break; From 3c6c8c3ca5ee834c3dccbab68738329300bb0691 Mon Sep 17 00:00:00 2001 From: quamrulmina Date: Wed, 28 Oct 2015 15:37:02 -0500 Subject: [PATCH 18/18] Fix ssh/sshd failing in Windows 7 due to a flag use in cng_digest Avoid using BCRYPT_HASH_REUSABLE_FLAG in cng_digest.c file which was introduced in Windows 8 and not supported in previous OS like Windows 7. --- contrib/win32/win32compat/cng_digest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/win32/win32compat/cng_digest.c b/contrib/win32/win32compat/cng_digest.c index 4847675..da6bb71 100644 --- a/contrib/win32/win32compat/cng_digest.c +++ b/contrib/win32/win32compat/cng_digest.c @@ -144,7 +144,7 @@ struct ssh_digest_ctx * return NULL; } - if ((hr = BCryptCreateHash(ret->cng_alg_handle, &(ret->hash_handle), NULL, 0, NULL, 0, BCRYPT_HASH_REUSABLE_FLAG)) != S_OK) + 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);