comments
[openssl.git] / ssl / ssltest.c
index 84b96e49ed559a69ffc7b3eda349f0652b9b5567..49360d5f9f064bb1a70c2294adc72dd94a4af41b 100644 (file)
  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
  */
 
-#define _XOPEN_SOURCE 600      /* Or gethostname won't be declared properly
+#define _BSD_SOURCE 1          /* Or gethostname won't be declared properly
                                   on Linux and GNU platforms. */
-#define _XOPEN_SOURCE_EXTENDED 1 /* Or gethostname won't be declared properly
-                                  on Compaq platforms (at least with DEC C).
-                               */
 
 #include <assert.h>
 #include <errno.h>
 #include <string.h>
 #include <time.h>
 
+#define USE_SOCKETS
 #include "e_os.h"
 
 #include <openssl/bio.h>
 #include <openssl/evp.h>
 #include <openssl/x509.h>
 #include <openssl/ssl.h>
+#ifndef OPENSSL_NO_ENGINE
 #include <openssl/engine.h>
+#endif
 #include <openssl/err.h>
 #include <openssl/rand.h>
+
+#define _XOPEN_SOURCE_EXTENDED 1 /* Or gethostname won't be declared properly
+                                    on Compaq platforms (at least with DEC C).
+                                    Do not try to put it earlier, or IPv6 includes
+                                    get screwed...
+                                 */
+
 #ifdef OPENSSL_SYS_WINDOWS
 #include <winsock.h>
 #include "../crypto/bio/bss_file.c"
 #ifdef OPENSSL_SYS_VMS
 #  define TEST_SERVER_CERT "SYS$DISK:[-.APPS]SERVER.PEM"
 #  define TEST_CLIENT_CERT "SYS$DISK:[-.APPS]CLIENT.PEM"
+#elif defined(OPENSSL_SYS_WINCE)
+#  define TEST_SERVER_CERT "\\OpenSSL\\server.pem"
+#  define TEST_CLIENT_CERT "\\OpenSSL\\client.pem"
 #else
 #  define TEST_SERVER_CERT "../apps/server.pem"
 #  define TEST_CLIENT_CERT "../apps/client.pem"
@@ -382,7 +392,9 @@ int main(int argc, char *argv[])
        verbose = 0;
        debug = 0;
        cipher = 0;
-       
+
+       bio_err=BIO_new_fp(stderr,BIO_NOCLOSE); 
+
        CRYPTO_set_locking_callback(lock_dbg_cb);
 
        /* enable memory leak checking unless explicitly disabled */
@@ -400,7 +412,6 @@ int main(int argc, char *argv[])
 
        RAND_seed(rnd_seed, sizeof rnd_seed);
 
-       bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
        bio_stdout=BIO_new_fp(stdout,BIO_NOCLOSE);
 
        argc--;
@@ -560,7 +571,7 @@ bad:
                        "the test anyway (and\n-d to see what happens), "
                        "or add one of -ssl2, -ssl3, -tls1, -reuse\n"
                        "to avoid protocol mismatch.\n");
-               exit(1);
+               EXIT(1);
                }
 
        if (print_time)
@@ -754,10 +765,16 @@ bad:
 #ifndef OPENSSL_NO_KRB5
        if (c_ssl  &&  c_ssl->kssl_ctx)
                 {
-                char   localhost[257];
+                char   localhost[MAXHOSTNAMELEN+2];
 
-               if (gethostname(localhost, 256) == 0)
+               if (gethostname(localhost, sizeof localhost-1) == 0)
                         {
+                       localhost[sizeof localhost-1]='\0';
+                       if(strlen(localhost) == sizeof localhost-1)
+                               {
+                               BIO_printf(bio_err,"localhost name too long\n");
+                               goto end;
+                               }
                        kssl_ctx_setstring(c_ssl->kssl_ctx, KSSL_SERVER,
                                 localhost);
                        }
@@ -813,7 +830,9 @@ end:
 #ifndef OPENSSL_NO_RSA
        free_tmp_rsa();
 #endif
+#ifndef OPENSSL_NO_ENGINE
        ENGINE_cleanup();
+#endif
        CRYPTO_cleanup_all_ex_data();
        ERR_free_strings();
        ERR_remove_state(0);
@@ -1518,7 +1537,8 @@ static int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
        {
        char *s,buf[256];
 
-       s=X509_NAME_oneline(X509_get_subject_name(ctx->current_cert),buf,256);
+       s=X509_NAME_oneline(X509_get_subject_name(ctx->current_cert),buf,
+                           sizeof buf);
        if (s != NULL)
                {
                if (ok)
@@ -1568,9 +1588,21 @@ static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
        {
        if (rsa_tmp == NULL)
                {
+               rsa_tmp = RSA_new();
+               if(!rsa_tmp)
+                       {
+                       BIO_printf(bio_err, "Memory error...");
+                       goto end;
+                       }
                BIO_printf(bio_err,"Generating temp (%d bit) RSA key...",keylength);
                (void)BIO_flush(bio_err);
-               rsa_tmp=RSA_generate_key(keylength,RSA_F4,NULL,NULL);
+               if(!RSA_generate_key_ex(rsa_tmp,keylength,RSA_F4,NULL))
+                       {
+                       BIO_printf(bio_err, "Error generating key.", keylength);
+                       RSA_free(rsa_tmp);
+                       rsa_tmp = NULL;
+                       }
+end:
                BIO_printf(bio_err,"\n");
                (void)BIO_flush(bio_err);
                }