Use the default_md config file value when signing CRLs.
[openssl.git] / apps / s_server.c
index 814f3b9c15f57c5e194b4f61e93931c921020a40..cce835c23902d53c43b3038011c74b9f5056547e 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/types.h>
+
 #include <sys/stat.h>
 #include <openssl/e_os2.h>
 #ifdef OPENSSL_NO_STDIO
 #define APPS_WIN16
 #endif
 
+#if !defined(OPENSSL_SYS_NETWARE)  /* conflicts with winsock2 stuff on netware */
+#include <sys/types.h>
+#endif
+
 /* With IPv6, it looks like Digital has mixed up the proper order of
    recursive header file inclusion, resulting in the compiler complaining
    that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
@@ -151,10 +155,6 @@ typedef unsigned int u_int;
 #include <openssl/rand.h>
 #include "s_apps.h"
 
-#ifdef OPENSSL_SYS_WINDOWS
-#include <conio.h>
-#endif
-
 #ifdef OPENSSL_SYS_WINCE
 /* Windows CE incorrectly defines fileno as returning void*, so to avoid problems below... */
 #ifdef fileno
@@ -971,23 +971,23 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
        {
        BIO_printf(bio,"%4ld items in the session cache\n",
                SSL_CTX_sess_number(ssl_ctx));
-       BIO_printf(bio,"%4d client connects (SSL_connect())\n",
+       BIO_printf(bio,"%4ld client connects (SSL_connect())\n",
                SSL_CTX_sess_connect(ssl_ctx));
-       BIO_printf(bio,"%4d client renegotiates (SSL_connect())\n",
+       BIO_printf(bio,"%4ld client renegotiates (SSL_connect())\n",
                SSL_CTX_sess_connect_renegotiate(ssl_ctx));
-       BIO_printf(bio,"%4d client connects that finished\n",
+       BIO_printf(bio,"%4ld client connects that finished\n",
                SSL_CTX_sess_connect_good(ssl_ctx));
-       BIO_printf(bio,"%4d server accepts (SSL_accept())\n",
+       BIO_printf(bio,"%4ld server accepts (SSL_accept())\n",
                SSL_CTX_sess_accept(ssl_ctx));
-       BIO_printf(bio,"%4d server renegotiates (SSL_accept())\n",
+       BIO_printf(bio,"%4ld server renegotiates (SSL_accept())\n",
                SSL_CTX_sess_accept_renegotiate(ssl_ctx));
-       BIO_printf(bio,"%4d server accepts that finished\n",
+       BIO_printf(bio,"%4ld server accepts that finished\n",
                SSL_CTX_sess_accept_good(ssl_ctx));
-       BIO_printf(bio,"%4d session cache hits\n",SSL_CTX_sess_hits(ssl_ctx));
-       BIO_printf(bio,"%4d session cache misses\n",SSL_CTX_sess_misses(ssl_ctx));
-       BIO_printf(bio,"%4d session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx));
-       BIO_printf(bio,"%4d callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx));
-       BIO_printf(bio,"%4d cache full overflows (%d allowed)\n",
+       BIO_printf(bio,"%4ld session cache hits\n",SSL_CTX_sess_hits(ssl_ctx));
+       BIO_printf(bio,"%4ld session cache misses\n",SSL_CTX_sess_misses(ssl_ctx));
+       BIO_printf(bio,"%4ld session cache timeouts\n",SSL_CTX_sess_timeouts(ssl_ctx));
+       BIO_printf(bio,"%4ld callback cache hits\n",SSL_CTX_sess_cb_hits(ssl_ctx));
+       BIO_printf(bio,"%4ld cache full overflows (%ld allowed)\n",
                SSL_CTX_sess_cache_full(ssl_ctx),
                SSL_CTX_sess_get_cache_size(ssl_ctx));
        }
@@ -1001,7 +1001,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
        unsigned long l;
        SSL *con=NULL;
        BIO *sbio;
-#ifdef OPENSSL_SYS_WINDOWS
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
        struct timeval tv;
 #endif
 
@@ -1054,7 +1054,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
        if (s_debug)
                {
                con->debug=1;
-               BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
+               BIO_set_callback(SSL_get_rbio(con),bio_dump_callback);
                BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
                }
        if (s_msg)
@@ -1075,7 +1075,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
                if (!read_from_sslcon)
                        {
                        FD_ZERO(&readfds);
-#ifndef OPENSSL_SYS_WINDOWS
+#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_NETWARE)
                        FD_SET(fileno(stdin),&readfds);
 #endif
                        FD_SET(s,&readfds);
@@ -1085,8 +1085,8 @@ static int sv_body(char *hostname, int s, unsigned char *context)
                         * the compiler: if you do have a cast then you can either
                         * go for (int *) or (void *).
                         */
-#ifdef OPENSSL_SYS_WINDOWS
-                       /* Under Windows we can't select on stdin: only
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_NETWARE)
+                        /* Under DOS (non-djgpp) and 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.
@@ -1347,7 +1347,13 @@ static int init_ssl_connection(SSL *con)
        if (SSL_ctrl(con,SSL_CTRL_GET_FLAGS,0,NULL) &
                TLS1_FLAGS_TLS_PADDING_BUG)
                BIO_printf(bio_s_out,"Peer has incorrect TLSv1 block padding\n");
-
+#ifndef OPENSSL_NO_KRB5
+       if (con->kssl_ctx->client_princ != NULL)
+               {
+               BIO_printf(bio_s_out,"Kerberos peer principal is %s\n",
+                       con->kssl_ctx->client_princ);
+               }
+#endif /* OPENSSL_NO_KRB5 */
        return(1);
        }
 
@@ -1451,7 +1457,7 @@ static int www_body(char *hostname, int s, unsigned char *context)
        if (s_debug)
                {
                con->debug=1;
-               BIO_set_callback(SSL_get_rbio(con),bio_dump_cb);
+               BIO_set_callback(SSL_get_rbio(con),bio_dump_callback);
                BIO_set_callback_arg(SSL_get_rbio(con),bio_s_out);
                }
        if (s_msg)
@@ -1499,7 +1505,9 @@ static int www_body(char *hostname, int s, unsigned char *context)
                        else
                                {
                                BIO_printf(bio_s_out,"read R BLOCK\n");
-#if !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
+#if defined(OPENSSL_SYS_NETWARE)
+            delay(1000);
+#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
                                sleep(1);
 #endif
                                continue;
@@ -1774,21 +1782,30 @@ err:
 #ifndef OPENSSL_NO_RSA
 static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
        {
+       BIGNUM *bn = NULL;
        static RSA *rsa_tmp=NULL;
 
-       if (rsa_tmp == NULL)
+       if (!rsa_tmp && ((bn = BN_new()) == NULL))
+               BIO_printf(bio_err,"Allocation error in generating RSA key\n");
+       if (!rsa_tmp && bn)
                {
                if (!s_quiet)
                        {
                        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(!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
+                               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL))
+                       {
+                       if(rsa_tmp) RSA_free(rsa_tmp);
+                       rsa_tmp = NULL;
+                       }
                if (!s_quiet)
                        {
                        BIO_printf(bio_err,"\n");
                        (void)BIO_flush(bio_err);
                        }
+               BN_free(bn);
                }
        return(rsa_tmp);
        }