Loading CHANGES +13 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,19 @@ Changes between 0.9.4 and 0.9.5 [xx XXX 1999] Changes between 0.9.4 and 0.9.5 [xx XXX 1999] *) Ugly workaround to get s_client and s_server working under Windows. The old code wouldn't work because it needed to select() on sockets and the tty (for keypresses and to see if data could be written). Win32 only supports select() on sockets so we select() with a 1s timeout on the sockets and then see if any characters are waiting to be read, if none are present then we retry, we also assume we can always write data to the tty. This isn't nice because the code then blocks until we've received a complete line of data and it is effectively polling the keyboard at 1s intervals: however it's quite a bit better than not working at all :-) A dedicated Windows application might handle this with an event loop for example. [Steve Henson] *) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign *) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions will be called when RSA_sign() and RSA_verify() are used. This is useful will be called when RSA_sign() and RSA_verify() are used. This is useful Loading apps/s_client.c +45 −7 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,11 @@ typedef unsigned int u_int; #include <openssl/pem.h> #include <openssl/pem.h> #include "s_apps.h" #include "s_apps.h" #ifdef WINDOWS #include <conio.h> #endif #if (defined(VMS) && __VMS_VER < 70000000) #if (defined(VMS) && __VMS_VER < 70000000) /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ #undef FIONBIO #undef FIONBIO Loading Loading @@ -173,7 +178,9 @@ int MAIN(int argc, char **argv) int ret=1,in_init=1,i,nbio_test=0; int ret=1,in_init=1,i,nbio_test=0; SSL_METHOD *meth=NULL; SSL_METHOD *meth=NULL; BIO *sbio; BIO *sbio; /*static struct timeval timeout={10,0};*/ #ifdef WINDOWS struct timeval tv; #endif #if !defined(NO_SSL2) && !defined(NO_SSL3) #if !defined(NO_SSL2) && !defined(NO_SSL3) meth=SSLv23_client_method(); meth=SSLv23_client_method(); Loading Loading @@ -465,12 +472,18 @@ re_start: if (read_tty) FD_SET(fileno(stdin),&readfds); if (read_tty) FD_SET(fileno(stdin),&readfds); if (write_tty) FD_SET(fileno(stdout),&writefds); if (write_tty) FD_SET(fileno(stdout),&writefds); } } #endif if (read_ssl) if (read_ssl) FD_SET(SSL_get_fd(con),&readfds); FD_SET(SSL_get_fd(con),&readfds); if (write_ssl) if (write_ssl) FD_SET(SSL_get_fd(con),&writefds); FD_SET(SSL_get_fd(con),&writefds); #else if(!tty_on || !write_tty) { if (read_ssl) FD_SET(SSL_get_fd(con),&readfds); if (write_ssl) FD_SET(SSL_get_fd(con),&writefds); } #endif /* printf("mode tty(%d %d%d) ssl(%d%d)\n", /* printf("mode tty(%d %d%d) ssl(%d%d)\n", tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ Loading @@ -480,8 +493,28 @@ re_start: * will choke the compiler: if you do have a cast then * will choke the compiler: if you do have a cast then * you can either go for (int *) or (void *). * you can either go for (int *) or (void *). */ */ #ifdef WINDOWS /* Under Windows we make the assumption that we can * always write to the tty: therefore if we need to * write to the tty we just fall through. Otherwise * we timeout the select every second and see if there * are any keypresses. Note: this is a hack, in a proper * Windows application we wouldn't do this. */ if(!write_tty) { if(read_tty) { tv.tv_sec = 1; tv.tv_usec = 0; i=select(width,(void *)&readfds,(void *)&writefds, i=select(width,(void *)&readfds,(void *)&writefds, NULL,&tv); if(!i && (!_kbhit() || !read_tty) ) continue; } else i=select(width,(void *)&readfds,(void *)&writefds, NULL,NULL); NULL,NULL); } #else i=select(width,(void *)&readfds,(void *)&writefds, NULL,NULL); #endif if ( i < 0) if ( i < 0) { { BIO_printf(bio_err,"bad select %d\n", BIO_printf(bio_err,"bad select %d\n", Loading Loading @@ -558,8 +591,12 @@ re_start: goto shut; goto shut; } } } } #ifndef WINDOWS #ifdef WINDOWS /* Assume Windows can always write */ else if (!ssl_pending && write_tty) #else else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) #endif { { #ifdef CHARSET_EBCDIC #ifdef CHARSET_EBCDIC ascii2ebcdic(&(sbuf[sbuf_off]),&(sbuf[sbuf_off]),sbuf_len); ascii2ebcdic(&(sbuf[sbuf_off]),&(sbuf[sbuf_off]),sbuf_len); Loading @@ -581,7 +618,6 @@ re_start: write_tty=0; write_tty=0; } } } } #endif else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds)) else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds)) { { #ifdef RENEG #ifdef RENEG Loading Loading @@ -636,8 +672,11 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240 } } } } #ifndef WINDOWS #ifdef WINDOWS else if (_kbhit()) #else else if (FD_ISSET(fileno(stdin),&readfds)) else if (FD_ISSET(fileno(stdin),&readfds)) #endif { { if (crlf) if (crlf) { { Loading Loading @@ -688,7 +727,6 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240 write_ssl=1; write_ssl=1; read_tty=0; read_tty=0; } } #endif } } shut: shut: SSL_shutdown(con); SSL_shutdown(con); Loading apps/s_server.c +23 −3 Original line number Original line Diff line number Diff line Loading @@ -85,6 +85,10 @@ typedef unsigned int u_int; #include <openssl/ssl.h> #include <openssl/ssl.h> #include "s_apps.h" #include "s_apps.h" #ifdef WINDOWS #include <conio.h> #endif #if (defined(VMS) && __VMS_VER < 70000000) #if (defined(VMS) && __VMS_VER < 70000000) /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ #undef FIONBIO #undef FIONBIO Loading Loading @@ -748,6 +752,9 @@ static int sv_body(char *hostname, int s, unsigned char *context) unsigned long l; unsigned long l; SSL *con=NULL; SSL *con=NULL; BIO *sbio; BIO *sbio; #ifdef WINDOWS struct timeval tv; #endif if ((buf=Malloc(bufsize)) == NULL) if ((buf=Malloc(bufsize)) == NULL) { { Loading Loading @@ -807,9 +814,22 @@ static int sv_body(char *hostname, int s, unsigned char *context) * the compiler: if you do have a cast then you can either * the compiler: if you do have a cast then you can either * go for (int *) or (void *). * go for (int *) or (void *). */ */ #ifdef WINDOWS /* Under Windows we can't select on stdin: only * on sockets. As a workaround we timeout the select every * second and check for any keypress. In a proper Windows * application we wouldn't do this because it is inefficient. */ tv.tv_sec = 1; tv.tv_usec = 0; i=select(width,(void *)&readfds,NULL,NULL,&tv); if((i < 0) || (!i && !_kbhit() ) )continue; if(_kbhit()) #else i=select(width,(void *)&readfds,NULL,NULL,NULL); i=select(width,(void *)&readfds,NULL,NULL,NULL); if (i <= 0) continue; if (i <= 0) continue; if (FD_ISSET(fileno(stdin),&readfds)) if (FD_ISSET(fileno(stdin),&readfds)) #endif { { if (s_crlf) if (s_crlf) { { Loading Loading
CHANGES +13 −0 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,19 @@ Changes between 0.9.4 and 0.9.5 [xx XXX 1999] Changes between 0.9.4 and 0.9.5 [xx XXX 1999] *) Ugly workaround to get s_client and s_server working under Windows. The old code wouldn't work because it needed to select() on sockets and the tty (for keypresses and to see if data could be written). Win32 only supports select() on sockets so we select() with a 1s timeout on the sockets and then see if any characters are waiting to be read, if none are present then we retry, we also assume we can always write data to the tty. This isn't nice because the code then blocks until we've received a complete line of data and it is effectively polling the keyboard at 1s intervals: however it's quite a bit better than not working at all :-) A dedicated Windows application might handle this with an event loop for example. [Steve Henson] *) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign *) Enhance RSA_METHOD structure. Now there are two extra methods, rsa_sign and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions and rsa_verify. When the RSA_FLAGS_SIGN_VER option is set these functions will be called when RSA_sign() and RSA_verify() are used. This is useful will be called when RSA_sign() and RSA_verify() are used. This is useful Loading
apps/s_client.c +45 −7 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,11 @@ typedef unsigned int u_int; #include <openssl/pem.h> #include <openssl/pem.h> #include "s_apps.h" #include "s_apps.h" #ifdef WINDOWS #include <conio.h> #endif #if (defined(VMS) && __VMS_VER < 70000000) #if (defined(VMS) && __VMS_VER < 70000000) /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ #undef FIONBIO #undef FIONBIO Loading Loading @@ -173,7 +178,9 @@ int MAIN(int argc, char **argv) int ret=1,in_init=1,i,nbio_test=0; int ret=1,in_init=1,i,nbio_test=0; SSL_METHOD *meth=NULL; SSL_METHOD *meth=NULL; BIO *sbio; BIO *sbio; /*static struct timeval timeout={10,0};*/ #ifdef WINDOWS struct timeval tv; #endif #if !defined(NO_SSL2) && !defined(NO_SSL3) #if !defined(NO_SSL2) && !defined(NO_SSL3) meth=SSLv23_client_method(); meth=SSLv23_client_method(); Loading Loading @@ -465,12 +472,18 @@ re_start: if (read_tty) FD_SET(fileno(stdin),&readfds); if (read_tty) FD_SET(fileno(stdin),&readfds); if (write_tty) FD_SET(fileno(stdout),&writefds); if (write_tty) FD_SET(fileno(stdout),&writefds); } } #endif if (read_ssl) if (read_ssl) FD_SET(SSL_get_fd(con),&readfds); FD_SET(SSL_get_fd(con),&readfds); if (write_ssl) if (write_ssl) FD_SET(SSL_get_fd(con),&writefds); FD_SET(SSL_get_fd(con),&writefds); #else if(!tty_on || !write_tty) { if (read_ssl) FD_SET(SSL_get_fd(con),&readfds); if (write_ssl) FD_SET(SSL_get_fd(con),&writefds); } #endif /* printf("mode tty(%d %d%d) ssl(%d%d)\n", /* printf("mode tty(%d %d%d) ssl(%d%d)\n", tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ tty_on,read_tty,write_tty,read_ssl,write_ssl);*/ Loading @@ -480,8 +493,28 @@ re_start: * will choke the compiler: if you do have a cast then * will choke the compiler: if you do have a cast then * you can either go for (int *) or (void *). * you can either go for (int *) or (void *). */ */ #ifdef WINDOWS /* Under Windows we make the assumption that we can * always write to the tty: therefore if we need to * write to the tty we just fall through. Otherwise * we timeout the select every second and see if there * are any keypresses. Note: this is a hack, in a proper * Windows application we wouldn't do this. */ if(!write_tty) { if(read_tty) { tv.tv_sec = 1; tv.tv_usec = 0; i=select(width,(void *)&readfds,(void *)&writefds, i=select(width,(void *)&readfds,(void *)&writefds, NULL,&tv); if(!i && (!_kbhit() || !read_tty) ) continue; } else i=select(width,(void *)&readfds,(void *)&writefds, NULL,NULL); NULL,NULL); } #else i=select(width,(void *)&readfds,(void *)&writefds, NULL,NULL); #endif if ( i < 0) if ( i < 0) { { BIO_printf(bio_err,"bad select %d\n", BIO_printf(bio_err,"bad select %d\n", Loading Loading @@ -558,8 +591,12 @@ re_start: goto shut; goto shut; } } } } #ifndef WINDOWS #ifdef WINDOWS /* Assume Windows can always write */ else if (!ssl_pending && write_tty) #else else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds)) #endif { { #ifdef CHARSET_EBCDIC #ifdef CHARSET_EBCDIC ascii2ebcdic(&(sbuf[sbuf_off]),&(sbuf[sbuf_off]),sbuf_len); ascii2ebcdic(&(sbuf[sbuf_off]),&(sbuf[sbuf_off]),sbuf_len); Loading @@ -581,7 +618,6 @@ re_start: write_tty=0; write_tty=0; } } } } #endif else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds)) else if (ssl_pending || FD_ISSET(SSL_get_fd(con),&readfds)) { { #ifdef RENEG #ifdef RENEG Loading Loading @@ -636,8 +672,11 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240 } } } } #ifndef WINDOWS #ifdef WINDOWS else if (_kbhit()) #else else if (FD_ISSET(fileno(stdin),&readfds)) else if (FD_ISSET(fileno(stdin),&readfds)) #endif { { if (crlf) if (crlf) { { Loading Loading @@ -688,7 +727,6 @@ printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240 write_ssl=1; write_ssl=1; read_tty=0; read_tty=0; } } #endif } } shut: shut: SSL_shutdown(con); SSL_shutdown(con); Loading
apps/s_server.c +23 −3 Original line number Original line Diff line number Diff line Loading @@ -85,6 +85,10 @@ typedef unsigned int u_int; #include <openssl/ssl.h> #include <openssl/ssl.h> #include "s_apps.h" #include "s_apps.h" #ifdef WINDOWS #include <conio.h> #endif #if (defined(VMS) && __VMS_VER < 70000000) #if (defined(VMS) && __VMS_VER < 70000000) /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ /* FIONBIO used as a switch to enable ioctl, and that isn't in VMS < 7.0 */ #undef FIONBIO #undef FIONBIO Loading Loading @@ -748,6 +752,9 @@ static int sv_body(char *hostname, int s, unsigned char *context) unsigned long l; unsigned long l; SSL *con=NULL; SSL *con=NULL; BIO *sbio; BIO *sbio; #ifdef WINDOWS struct timeval tv; #endif if ((buf=Malloc(bufsize)) == NULL) if ((buf=Malloc(bufsize)) == NULL) { { Loading Loading @@ -807,9 +814,22 @@ static int sv_body(char *hostname, int s, unsigned char *context) * the compiler: if you do have a cast then you can either * the compiler: if you do have a cast then you can either * go for (int *) or (void *). * go for (int *) or (void *). */ */ #ifdef WINDOWS /* Under Windows we can't select on stdin: only * on sockets. As a workaround we timeout the select every * second and check for any keypress. In a proper Windows * application we wouldn't do this because it is inefficient. */ tv.tv_sec = 1; tv.tv_usec = 0; i=select(width,(void *)&readfds,NULL,NULL,&tv); if((i < 0) || (!i && !_kbhit() ) )continue; if(_kbhit()) #else i=select(width,(void *)&readfds,NULL,NULL,NULL); i=select(width,(void *)&readfds,NULL,NULL,NULL); if (i <= 0) continue; if (i <= 0) continue; if (FD_ISSET(fileno(stdin),&readfds)) if (FD_ISSET(fileno(stdin),&readfds)) #endif { { if (s_crlf) if (s_crlf) { { Loading