Needed definition of _XOPEN_SOURCE_EXTENDED so DEC C on VMS will see
[openssl.git] / apps / ocsp.c
index 0369b2636cefd28e0905e83321761d215c90db16..c8676fc537003b559b952f95b99b95a4cd2488bb 100644 (file)
 
 #include <stdio.h>
 #include <string.h>
+#define _XOPEN_SOURCE_EXTENDED 1 /* Or fd_set, select() and so on won't be
+                                    declared properly on Compaq platforms
+                                    (at least with DEC C).
+                                 */
+#include <time.h>
 #include "apps.h"
 #include <openssl/pem.h>
 #include <openssl/ocsp.h>
@@ -142,6 +147,7 @@ int MAIN(int argc, char **argv)
        if (!load_config(bio_err, NULL))
                goto end;
        SSL_load_error_strings();
+       OpenSSL_add_ssl_algorithms();
        args = argv + 1;
        reqnames = sk_new_null();
        ids = sk_OCSP_CERTID_new_null();
@@ -745,6 +751,11 @@ int MAIN(int argc, char **argv)
                        BIO_printf(bio_err, "SSL is disabled\n");
                        goto end;
 #endif
+                       if (ctx == NULL)
+                               {
+                               BIO_printf(bio_err, "Error creating SSL context.\n");
+                               goto end;
+                               }
                        SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY);
                        sbio = BIO_new_ssl(ctx, 1);
                        cbio = BIO_push(sbio, cbio);
@@ -1270,8 +1281,22 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
                goto err;
                }
 
-       ctx = OCSP_sendreq_new(cbio, path, req, -1);
+       if (rv <= 0)
+               {
+               FD_ZERO(&confds);
+               openssl_fdset(fd, &confds);
+               tv.tv_usec = 0;
+               tv.tv_sec = req_timeout;
+               rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv);
+               if (rv == 0)
+                       {
+                       BIO_puts(err, "Timeout on connect\n");
+                       return NULL;
+                       }
+               }
 
+
+       ctx = OCSP_sendreq_new(cbio, path, req, -1);
        if (!ctx)
                return NULL;
        
@@ -1281,10 +1306,10 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
                if (rv != -1)
                        break;
                FD_ZERO(&confds);
-               FD_SET(fd, &confds);
+               openssl_fdset(fd, &confds);
                tv.tv_usec = 0;
                tv.tv_sec = req_timeout;
-               if (BIO_should_read(cbio) || BIO_should_io_special(cbio))
+               if (BIO_should_read(cbio))
                        rv = select(fd + 1, (void *)&confds, NULL, NULL, &tv);
                else if (BIO_should_write(cbio))
                        rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv);
@@ -1305,7 +1330,6 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
                        }
                        
                }
-
        err:
 
        OCSP_REQ_CTX_free(ctx);