projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Typo corretced.
[oweals/openssl.git]
/
apps
/
s_client.c
diff --git
a/apps/s_client.c
b/apps/s_client.c
index 9c0dbc2bf6f86a4814d2695569abbac79047c1ed..eb6fd7c1c34268c6f3a36b13e0f56e95ea6e11cd 100644
(file)
--- a/
apps/s_client.c
+++ b/
apps/s_client.c
@@
-136,8
+136,12
@@
typedef unsigned int u_int;
#include <openssl/rand.h>
#include "s_apps.h"
#include <openssl/rand.h>
#include "s_apps.h"
-#ifdef OPENSSL_SYS_WINDOWS
-#include <conio.h>
+#ifdef OPENSSL_SYS_WINCE
+/* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
+#ifdef fileno
+#undef fileno
+#endif
+#define fileno(a) (int)_fileno(a)
#endif
#endif
@@
-213,8
+217,10
@@
static void sc_usage(void)
BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
BIO_printf(bio_err," for those protocols that support it, where\n");
BIO_printf(bio_err," 'prot' defines which one to assume. Currently,\n");
BIO_printf(bio_err," -starttls prot - use the STARTTLS command before starting TLS\n");
BIO_printf(bio_err," for those protocols that support it, where\n");
BIO_printf(bio_err," 'prot' defines which one to assume. Currently,\n");
- BIO_printf(bio_err," only \"smtp\" is supported.\n");
+ BIO_printf(bio_err," only \"smtp\" and \"pop3\" are supported.\n");
+#ifndef OPENSSL_NO_ENGINE
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
BIO_printf(bio_err," -engine id - Initialise and use the specified engine\n");
+#endif
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
}
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
}
@@
-241,14
+247,16
@@
int MAIN(int argc, char **argv)
int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
SSL_CTX *ctx=NULL;
int ret=1,in_init=1,i,nbio_test=0;
int write_tty,read_tty,write_ssl,read_ssl,tty_on,ssl_pending;
SSL_CTX *ctx=NULL;
int ret=1,in_init=1,i,nbio_test=0;
- int s
mtp_starttls
= 0;
+ int s
tarttls_proto
= 0;
int prexit = 0, vflags = 0;
SSL_METHOD *meth=NULL;
BIO *sbio;
char *inrand=NULL;
int prexit = 0, vflags = 0;
SSL_METHOD *meth=NULL;
BIO *sbio;
char *inrand=NULL;
+#ifndef OPENSSL_NO_ENGINE
char *engine_id=NULL;
ENGINE *e=NULL;
char *engine_id=NULL;
ENGINE *e=NULL;
-#ifdef OPENSSL_SYS_WINDOWS
+#endif
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
struct timeval tv;
#endif
struct timeval tv;
#endif
@@
-403,15
+411,19
@@
int MAIN(int argc, char **argv)
if (--argc < 1) goto bad;
++argv;
if (strcmp(*argv,"smtp") == 0)
if (--argc < 1) goto bad;
++argv;
if (strcmp(*argv,"smtp") == 0)
- smtp_starttls = 1;
+ starttls_proto = 1;
+ else if (strcmp(*argv,"pop3") == 0)
+ starttls_proto = 2;
else
goto bad;
}
else
goto bad;
}
+#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine_id = *(++argv);
}
else if (strcmp(*argv,"-engine") == 0)
{
if (--argc < 1) goto bad;
engine_id = *(++argv);
}
+#endif
else if (strcmp(*argv,"-rand") == 0)
{
if (--argc < 1) goto bad;
else if (strcmp(*argv,"-rand") == 0)
{
if (--argc < 1) goto bad;
@@
-433,6
+445,13
@@
bad:
goto end;
}
goto end;
}
+ OpenSSL_add_ssl_algorithms();
+ SSL_load_error_strings();
+
+#ifndef OPENSSL_NO_ENGINE
+ e = setup_engine(bio_err, engine_id, 1);
+#endif
+
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
&& !RAND_status())
{
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
&& !RAND_status())
{
@@
-455,11
+474,6
@@
bad:
}
}
}
}
- OpenSSL_add_ssl_algorithms();
- SSL_load_error_strings();
-
- e = setup_engine(bio_err, engine_id, 1);
-
ctx=SSL_CTX_new(meth);
if (ctx == NULL)
{
ctx=SSL_CTX_new(meth);
if (ctx == NULL)
{
@@
-571,12
+585,18
@@
re_start:
sbuf_off=0;
/* This is an ugly hack that does a lot of assumptions */
sbuf_off=0;
/* This is an ugly hack that does a lot of assumptions */
- if (s
mtp_starttls
)
+ if (s
tarttls_proto == 1
)
{
BIO_read(sbio,mbuf,BUFSIZZ);
BIO_printf(sbio,"STARTTLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
{
BIO_read(sbio,mbuf,BUFSIZZ);
BIO_printf(sbio,"STARTTLS\r\n");
BIO_read(sbio,sbuf,BUFSIZZ);
}
+ if (starttls_proto == 2)
+ {
+ BIO_read(sbio,mbuf,BUFSIZZ);
+ BIO_printf(sbio,"STLS\r\n");
+ BIO_read(sbio,sbuf,BUFSIZZ);
+ }
for (;;)
{
for (;;)
{
@@
-597,11
+617,11
@@
re_start:
print_stuff(bio_c_out,con,full_log);
if (full_log > 0) full_log--;
print_stuff(bio_c_out,con,full_log);
if (full_log > 0) full_log--;
- if (s
mtp_starttls
)
+ if (s
tarttls_proto
)
{
BIO_printf(bio_err,"%s",mbuf);
/* We don't need to know any more */
{
BIO_printf(bio_err,"%s",mbuf);
/* We don't need to know any more */
- s
mtp_starttls
= 0;
+ s
tarttls_proto
= 0;
}
if (reconnect)
}
if (reconnect)
@@
-620,7
+640,7
@@
re_start:
if (!ssl_pending)
{
if (!ssl_pending)
{
-#if
ndef OPENSSL_SYS_WINDOWS
+#if
!defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
if (tty_on)
{
if (read_tty) FD_SET(fileno(stdin),&readfds);
if (tty_on)
{
if (read_tty) FD_SET(fileno(stdin),&readfds);
@@
-647,8
+667,8
@@
re_start:
* will choke the compiler: if you do have a cast then
* you can either go for (int *) or (void *).
*/
* will choke the compiler: if you do have a cast then
* you can either go for (int *) or (void *).
*/
-#if
def OPENSSL_SYS_WINDOWS
-
/* Under Windows
we make the assumption that we can
+#if
defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
+
/* Under Windows/DOS
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
* 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
@@
-662,7
+682,11
@@
re_start:
tv.tv_usec = 0;
i=select(width,(void *)&readfds,(void *)&writefds,
NULL,&tv);
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(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
if(!i && (!((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0))) || !read_tty) ) continue;
+#endif
} else i=select(width,(void *)&readfds,(void *)&writefds,
NULL,NULL);
}
} else i=select(width,(void *)&readfds,(void *)&writefds,
NULL,NULL);
}
@@
-746,8
+770,8
@@
re_start:
goto shut;
}
}
goto shut;
}
}
-#if
def OPENSSL_SYS_WINDOWS
- /* Assume Windows can always write */
+#if
defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
+ /* Assume Windows
/DOS
can always write */
else if (!ssl_pending && write_tty)
#else
else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
else if (!ssl_pending && write_tty)
#else
else if (!ssl_pending && FD_ISSET(fileno(stdout),&writefds))
@@
-827,8
+851,12
@@
printf("read=%d pending=%d peek=%d\n",k,SSL_pending(con),SSL_peek(con,zbuf,10240
}
}
}
}
-#ifdef OPENSSL_SYS_WINDOWS
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
+#if defined(OPENSSL_SYS_WINCE) || defined(OPENSSL_SYS_MSDOS)
+ else if (_kbhit())
+#else
else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
else if ((_kbhit()) || (WAIT_OBJECT_0 == WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE), 0)))
+#endif
#else
else if (FD_ISSET(fileno(stdin),&readfds))
#endif
#else
else if (FD_ISSET(fileno(stdin),&readfds))
#endif
@@
-892,16
+920,16
@@
end:
if (con != NULL) SSL_free(con);
if (con2 != NULL) SSL_free(con2);
if (ctx != NULL) SSL_CTX_free(ctx);
if (con != NULL) SSL_free(con);
if (con2 != NULL) SSL_free(con2);
if (ctx != NULL) SSL_CTX_free(ctx);
- if (cbuf != NULL) {
memset(cbuf,0
,BUFSIZZ); OPENSSL_free(cbuf); }
- if (sbuf != NULL) {
memset(sbuf,0
,BUFSIZZ); OPENSSL_free(sbuf); }
- if (mbuf != NULL) {
memset(mbuf,0
,BUFSIZZ); OPENSSL_free(mbuf); }
+ if (cbuf != NULL) {
OPENSSL_cleanse(cbuf
,BUFSIZZ); OPENSSL_free(cbuf); }
+ if (sbuf != NULL) {
OPENSSL_cleanse(sbuf
,BUFSIZZ); OPENSSL_free(sbuf); }
+ if (mbuf != NULL) {
OPENSSL_cleanse(mbuf
,BUFSIZZ); OPENSSL_free(mbuf); }
if (bio_c_out != NULL)
{
BIO_free(bio_c_out);
bio_c_out=NULL;
}
apps_shutdown();
if (bio_c_out != NULL)
{
BIO_free(bio_c_out);
bio_c_out=NULL;
}
apps_shutdown();
- EXIT(ret);
+
OPENSSL_
EXIT(ret);
}
}
@@
-930,10
+958,10
@@
static void print_stuff(BIO *bio, SSL *s, int full)
for (i=0; i<sk_X509_num(sk); i++)
{
X509_NAME_oneline(X509_get_subject_name(
for (i=0; i<sk_X509_num(sk); i++)
{
X509_NAME_oneline(X509_get_subject_name(
- sk_X509_value(sk,i)),buf,
BUFSIZ
);
+ sk_X509_value(sk,i)),buf,
sizeof buf
);
BIO_printf(bio,"%2d s:%s\n",i,buf);
X509_NAME_oneline(X509_get_issuer_name(
BIO_printf(bio,"%2d s:%s\n",i,buf);
X509_NAME_oneline(X509_get_issuer_name(
- sk_X509_value(sk,i)),buf,
BUFSIZ
);
+ sk_X509_value(sk,i)),buf,
sizeof buf
);
BIO_printf(bio," i:%s\n",buf);
if (c_showcerts)
PEM_write_bio_X509(bio,sk_X509_value(sk,i));
BIO_printf(bio," i:%s\n",buf);
if (c_showcerts)
PEM_write_bio_X509(bio,sk_X509_value(sk,i));
@@
-948,10
+976,10
@@
static void print_stuff(BIO *bio, SSL *s, int full)
if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
PEM_write_bio_X509(bio,peer);
X509_NAME_oneline(X509_get_subject_name(peer),
if (!(c_showcerts && got_a_chain)) /* Redundant if we showed the whole chain */
PEM_write_bio_X509(bio,peer);
X509_NAME_oneline(X509_get_subject_name(peer),
- buf,
BUFSIZ
);
+ buf,
sizeof buf
);
BIO_printf(bio,"subject=%s\n",buf);
X509_NAME_oneline(X509_get_issuer_name(peer),
BIO_printf(bio,"subject=%s\n",buf);
X509_NAME_oneline(X509_get_issuer_name(peer),
- buf,
BUFSIZ
);
+ buf,
sizeof buf
);
BIO_printf(bio,"issuer=%s\n",buf);
}
else
BIO_printf(bio,"issuer=%s\n",buf);
}
else
@@
-973,7
+1001,7
@@
static void print_stuff(BIO *bio, SSL *s, int full)
{
BIO_printf(bio,"---\nNo client certificate CA names sent\n");
}
{
BIO_printf(bio,"---\nNo client certificate CA names sent\n");
}
- p=SSL_get_shared_ciphers(s,buf,
BUFSIZ
);
+ p=SSL_get_shared_ciphers(s,buf,
sizeof buf
);
if (p != NULL)
{
/* This works only for SSL 2. In later protocol
if (p != NULL)
{
/* This works only for SSL 2. In later protocol