See the attached patch which applies over openssl-1.0.1e and selects the
use of existing support for the Windows API
WaitForSingleObject(..STD_INPUT_HANDLE..) to trigger a read of stdin.  That
logic is hidden currently because OPENSSL_SYS_MSDOS is defined whenever
OPENSSL_SYS_WINDOWS is defined.  By enabling that existing Windows logic,
data on stdin triggers a read without the requirement of a physical
keyboard event.

---------- Forwarded message ----------
From: Jeff Trawick <traw...@gmail.com>
Date: Fri, Oct 4, 2013 at 9:44 AM
Subject: Re: redirected input to s_client on Windows: Any trick to avoid
the keypress?
To: openssl-us...@openssl.org


On Fri, Oct 4, 2013 at 9:17 AM, Salz, Rich <rs...@akamai.com> wrote:

> When you run it interactively, does it work right away or do you need to
> hit TWO returns?
>

It works right away.

The keypresses trigger the read of stdin (since the
WaitForSingleObject(stdin) is bypassed due to the OPENSSL_SYS_MSDOS issue),
so there's no problem in interactive mode.



> ****
>
> ** **
>
> ** **
>
> --  ****
>
> Principal Security Engineer****
>
> Akamai Technology****
>
> Cambridge, MA****
>



-- 
Born in Roswell... married an alien...
http://emptyhammock.com/



-- 
Born in Roswell... married an alien...
http://emptyhammock.com/
--- /c/Users/Trawick/s_client.c 2013-10-07 07:16:51 -0400
+++ apps/s_client.c     2013-10-07 07:12:35 -0400
@@ -178,6 +178,13 @@
 #include <fcntl.h>
 #endif
 
+/* Use Windows API with STD_INPUT_HANDLE when checking for input?
+   Don't look at OPENSSL_SYS_MSDOS for this, since it is always defined if 
+   OPENSSL_SYS_WINDOWS is defined */
+#if defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_WINCE) && 
defined(STD_INPUT_HANDLE)
+#define OPENSSL_USE_STD_INPUT_HANDLE
+#endif
+
 #undef PROG
 #define PROG   s_client_main
 
@@ -1604,10 +1611,10 @@
                                        tv.tv_usec = 0;
                                        i=select(width,(void *)&readfds,(void 
*)&writefds,
                                                 NULL,&tv);
-#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
-                                       if(!i && (!_kbhit() || !read_tty) ) 
continue;
-#else
+#if defined(OPENSSL_USE_STD_INPUT_HANDLE)
                                        if(!i && (!((_kbhit()) || 
(WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || 
!read_tty) ) continue;
+#else
+                                       if(!i && (!_kbhit() || !read_tty) ) 
continue;
 #endif
                                } else  i=select(width,(void *)&readfds,(void 
*)&writefds,
                                         NULL,timeoutp);
@@ -1812,10 +1819,10 @@
                        }
 
 #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
-#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
-               else if (_kbhit())
-#else
+#if defined(OPENSSL_USE_STD_INPUT_HANDLE)
                else if ((_kbhit()) || (WAIT_OBJECT_0 == 
WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
+#else
+               else if (_kbhit())
 #endif
 #elif defined (OPENSSL_SYS_NETWARE)
                else if (_kbhit())

Reply via email to