home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / k95source / ckossl.c < prev    next >
C/C++ Source or Header  |  2020-01-01  |  66KB  |  2,053 lines

  1. /*
  2.   C K O S S L . C --  OpenSSL Interface for Kermit 95
  3.  
  4.   Copyright (C) 2000, 2004 Trustees of Columbia University in the City of New
  5.   York.
  6.  
  7.   Copyright (C) 2006, 2007  Secure Endpoints Inc.
  8.  
  9.   Author:  Jeffrey E Altman (jaltman@secure-endpoints.com)
  10.              Secure Endpoints Inc., New York City
  11. */
  12.  
  13. #include "ckcdeb.h"
  14. #include "ck_ssl.h"
  15.  
  16. #ifdef NT
  17. #include <windows.h>
  18. #else /* NT */
  19. #define INCL_DOSMODULEMGR
  20. #define INCL_DOSSEMAPHORES
  21. #include <os2.h>
  22. #endif /* NT */
  23. #include <stdarg.h>
  24.  
  25. #ifdef OS2
  26. #ifdef CK_SSL
  27. #ifdef SSLDLL
  28.  
  29. #ifdef NT
  30. HINSTANCE hSSL = NULL;
  31. #else /* NT */
  32. HMODULE hSSL = NULL;
  33. #endif /* NT */
  34.  
  35. int ssl_dll_loaded=0;
  36.  
  37. #ifdef NT
  38. HINSTANCE hX5092UID=NULL;
  39. #define SEM_INDEFINITE_WAIT INFINITE
  40. #else /* NT */
  41. HMODULE hX5092UID=NULL;
  42. #endif /* NT */
  43.  
  44. #ifdef NOT_KERMIT
  45. static int deblog = 0;
  46. #ifdef debug
  47. #undef debug
  48. #endif
  49. #define debug(x,a,b,c)
  50. #ifdef printf
  51. #undef printf
  52. #endif
  53. static int ssl_finished_messages = 0;
  54. static unsigned long startflags = 0;
  55. #endif /* NOT_KERMIT */
  56.  
  57. int     (*p_SSL_get_error)(SSL *ssl,int num)=NULL;
  58. int     (*p_SSL_read)(SSL *ssl,char *buf,int num)=NULL;
  59. int     (*p_SSL_connect)(SSL *ssl)=NULL;
  60. int     (*p_SSL_set_fd)(SSL *s, int fd)=NULL;
  61. void    (*p_SSL_free)(SSL *ssl)=NULL;
  62. int     (*p_SSL_shutdown)(SSL *s)=NULL;
  63. int     (*p_SSL_write)(SSL *ssl,char *buf,int num)=NULL;
  64. int     (*p_SSL_pending)(SSL *ssl)=NULL;
  65. int     (*p_SSL_peek)(SSL *ssl,char * buf,int num)=NULL;
  66. void    (*p_SSL_load_error_strings)(void )=NULL;
  67. X509 *  (*p_SSL_get_peer_certificate)(SSL *s)=NULL;
  68. const char * (*p_SSL_CIPHER_get_name)(SSL_CIPHER *c)=NULL;
  69. int     (*p_SSL_CIPHER_get_bits)(SSL_CIPHER *c,int *)=NULL;
  70. char *  (*p_SSL_CIPHER_get_version)(SSL_CIPHER *c)=NULL;
  71. SSL_CIPHER * (*p_SSL_get_current_cipher)(SSL *s)=NULL;
  72. char *  (*p_SSL_get_shared_ciphers)(SSL *s, char *buf, int len)=NULL;
  73. char *  (*p_SSL_get_ciphers)(SSL *s)=NULL;
  74. const char * (*p_SSL_get_cipher_list)(SSL *s, int i)=NULL;
  75. int     (*p_SSL_CTX_set_default_verify_paths)(SSL_CTX *ctx)=NULL;
  76. int     (*p_SSL_use_RSAPrivateKey_file)(SSL *ssl, char *file, int type)=NULL;
  77. int     (*p_SSL_use_DSAPrivateKey_file)(SSL *ssl, char *file, int type)=NULL;
  78. int     (*p_SSL_use_PrivateKey_file)(SSL *ssl, char *file, int type)=NULL;
  79. int     (*p_SSL_use_certificate_file)(SSL *ssl, char *file, int type)=NULL;
  80. int     (*p_SSL_CTX_use_PrivateKey_file)(SSL_CTX *ctx, char *file, int type)=NULL;
  81. int     (*p_SSL_CTX_use_certificate_file)(SSL_CTX *ctx, char *file, int type)=NULL;
  82. int     (*p_SSL_CTX_check_private_key)(SSL_CTX *ctx)=NULL;
  83. int     (*p_SSL_check_private_key)(SSL *ssl)=NULL;
  84. void    (*p_SSL_set_verify)(SSL *s, int mode, int (*callback) ())=NULL;
  85. void    (*p_SSL_CTX_set_verify)(SSL_CTX *ctx, int mode, int (*callback) ())=NULL;
  86. SSL *   (*p_SSL_new)(SSL_CTX *ctx)=NULL;
  87. long    (*p_SSL_CTX_ctrl)(SSL_CTX *ctx,int cmd, long larg, char *parg)=NULL;
  88. SSL_CTX * (*p_SSL_CTX_new)(SSL_METHOD *meth)=NULL;
  89. void    (*p_SSL_CTX_free)(SSL_CTX *ctx)=NULL;
  90. void    (*p_SSL_CTX_set_default_passwd_cb)(SSL_CTX *ctx,int (*cb)())=NULL;
  91. SSL_METHOD * (*p_SSLv23_method)(void)=NULL;
  92. SSL_METHOD * (*p_SSLv3_method)(void)=NULL;
  93. SSL_METHOD * (*p_TLSv1_method)(void)=NULL;
  94. SSL_METHOD * (*p_SSLv23_client_method)(void)=NULL;
  95. SSL_METHOD * (*p_SSLv3_client_method)(void)=NULL;
  96. SSL_METHOD * (*p_TLSv1_client_method)(void)=NULL;
  97. SSL_METHOD * (*p_SSLv23_server_method)(void)=NULL;
  98. SSL_METHOD * (*p_SSLv3_server_method)(void)=NULL;
  99. SSL_METHOD * (*p_TLSv1_server_method)(void)=NULL;
  100. void (*p_SSL_library_init)(void)=NULL;
  101. char *  (*p_SSL_state_string)(const SSL *s)=NULL;
  102. char *  (*p_SSL_state_string_long)(const SSL *s)=NULL;
  103. int     (*p_SSL_accept)(SSL *ssl)=NULL;
  104. int     (*p_SSL_set_cipher_list)(SSL *ssl,char *s)=NULL;
  105. void (*p_SSL_CTX_set_tmp_rsa_callback)(SSL_CTX *ctx,
  106.      RSA *(*cb)(SSL *ssl,int is_export, int keylength))=NULL;
  107. void (*p_SSL_set_tmp_rsa_callback)(SSL *ssl,
  108.      RSA *(*cb)(SSL *ssl,int is_export,int keylength))=NULL;
  109. void (*p_SSL_CTX_set_tmp_dh_callback)(SSL_CTX *ctx,
  110.      DH *(*dh)(SSL *ssl,int is_export,int keylength))=NULL;
  111. void (*p_SSL_set_tmp_dh_callback)(SSL *ssl,
  112.      DH *(*dh)(SSL *ssl,int is_export, int keylength))=NULL;
  113.  
  114. int  (*p_SSL_CTX_load_verify_locations)(SSL_CTX *,char *,char *)=NULL;
  115. void (*p_SSL_CTX_set_default_passwd_cb_userdata)(SSL_CTX *, void *)=NULL;
  116. int  (*p_X509_to_user)(X509 *peer_cert, char *userid, int len)=NULL;
  117. int  (*p_X509_userok)(X509 *peer_cert, const char *userid)=NULL;
  118. BIO *(*p_SSL_get_wbio)(SSL *)=NULL;
  119. size_t (*p_SSL_get_finished)(SSL *,void *buf, size_t count)=NULL;
  120. size_t (*p_SSL_get_peer_finished)(SSL *,void *buf, size_t count)=NULL;
  121. void (*p_SSL_copy_session_id)(SSL *to,SSL *from)=NULL;
  122. int  (*p_SSL_renegotiate)(SSL * ssl)=NULL;
  123. int  (*p_SSL_set_session)(SSL *, SSL_SESSION *)=NULL;
  124. SSL_SESSION * (*p_SSL_get_session)(SSL *)=NULL;
  125. int (*p_SSL_CTX_set_session_id_context)(SSL_CTX *ctx,
  126.     const unsigned char *sid_ctx,unsigned int sid_ctx_len)=NULL;
  127. EVP_PKEY * (*p_SSL_get_privatekey)(SSL *)=NULL;
  128. X509 * (*p_SSL_get_certificate)(SSL *)=NULL;
  129. int (*p_SSL_clear)(SSL *)=NULL;
  130. void (*p_SSL_set_accept_state)(SSL *)=NULL;
  131. char * (*p_SSL_CIPHER_description)(SSL_CIPHER *,char *buf,int size)=NULL;
  132. void (*p_SSL_CTX_set_info_callback)(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val))=NULL;
  133.  
  134. #ifdef SSL_KRB5
  135. KSSL_CTX * (*p_kssl_ctx_new)(void)=NULL;
  136. KSSL_CTX * (*p_kssl_ctx_free)(KSSL_CTX *kssl_ctx)=NULL;
  137. krb5_error_code (*p_kssl_ctx_setstring)(KSSL_CTX *kssl_ctx, int which, char *text)=NULL;
  138. krb5_error_code (*p_kssl_ctx_setprinc)(KSSL_CTX *kssl_ctx, int which,
  139.                                       krb5_data *realm, krb5_data *entity)=NULL;
  140. #endif /* SSL_KRB5 */
  141. int (*p_SSL_COMP_add_compression_method)(int id,COMP_METHOD *cm)=NULL;
  142. int (*p_SSL_CTX_use_certificate_chain_file)(SSL_CTX *ctx, const char *file)=NULL;
  143.  
  144. static int ssl_shutdown_in_progress = 0;
  145.  
  146. int
  147. ck_SSL_get_error(SSL *ssl,int num)
  148. {
  149.     if ( p_SSL_get_error ) {
  150.         int rc;
  151. #ifdef SSL_MUTEX
  152.         if (RequestSSLMutex(20000))
  153.             return(0);
  154.         rc = p_SSL_get_error(ssl,num);
  155.         ReleaseSSLMutex();
  156. #else
  157.         rc = p_SSL_get_error(ssl,num);
  158. #endif
  159.         return(rc);
  160.     }
  161.     return(0);
  162. }
  163.  
  164. int
  165. ck_SSL_read(SSL *ssl,char *buf,int num)
  166. {
  167.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_read ) {
  168.         int rc;
  169. #ifdef SSL_MUTEX
  170.         if (RequestSSLMutex(20000))
  171.             return(0);
  172.         rc = p_SSL_read(ssl,buf,num);;
  173.         ReleaseSSLMutex();
  174. #else
  175.         rc = p_SSL_read(ssl,buf,num);;
  176. #endif
  177.         return(rc);
  178.     }
  179.     return(0);
  180. }
  181.  
  182. int
  183. ck_SSL_peek(SSL *ssl,char *buf,int num)
  184. {
  185.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_peek ) {
  186.         int rc;
  187. #ifdef SSL_MUTEX
  188.         if (RequestSSLMutex(20000))
  189.             return(0);
  190.         rc = p_SSL_peek(ssl,buf,num);
  191.         ReleaseSSLMutex();
  192. #else
  193.         rc = p_SSL_peek(ssl,buf,num);
  194. #endif
  195.         return(rc);
  196.     }
  197.     return(0);
  198. }
  199.  
  200. int
  201. ck_SSL_connect(SSL *ssl)
  202. {
  203.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_connect ) {
  204.         int rc;
  205. #ifdef SSL_MUTEX
  206.         if (RequestSSLMutex(20000))
  207.             return(0);
  208.         rc = p_SSL_connect(ssl);
  209.         ReleaseSSLMutex();
  210. #else
  211.         rc = p_SSL_connect(ssl);
  212. #endif
  213.         return(rc);
  214.     }
  215.     return(0);
  216. }
  217.  
  218. int
  219. ck_SSL_set_fd(SSL *ssl, int fd)
  220. {
  221.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_set_fd ) {
  222.         int rc;
  223. #ifdef SSL_MUTEX
  224.         if (RequestSSLMutex(20000))
  225.             return(0);
  226.         rc = p_SSL_set_fd(ssl,fd);
  227.         ReleaseSSLMutex();
  228. #else
  229.         rc = p_SSL_set_fd(ssl,fd);
  230. #endif
  231.         return(rc);
  232.     }
  233.     return(0);
  234. }
  235.  
  236. void
  237. ck_SSL_free(SSL *ssl)
  238. {
  239.     if ( p_SSL_free ) {
  240. #ifdef SSL_MUTEX
  241.         if (RequestSSLMutex(20000))
  242.             return;
  243.         p_SSL_free(ssl);
  244.         ReleaseSSLMutex();
  245. #else
  246.         p_SSL_free(ssl);
  247. #endif
  248.     }
  249. }
  250.  
  251. int
  252. ck_SSL_shutdown(SSL *s)
  253. {
  254.     int rc = 0;
  255.     if ( p_SSL_shutdown ) {
  256.         ssl_shutdown_in_progress = 1;
  257. #ifdef SSL_MUTEX
  258.         if (RequestSSLMutex(20000))
  259.             return(0);
  260.         rc = p_SSL_shutdown(s);
  261.         ReleaseSSLMutex();
  262. #else
  263.         rc = p_SSL_shutdown(s);
  264. #endif
  265.         ssl_shutdown_in_progress = 0;
  266.     }
  267.     return(rc);
  268. }
  269.  
  270. int
  271. ck_SSL_write(SSL *ssl,char *buf,int num)
  272. {
  273.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_write ) {
  274.         int rc;
  275. #ifdef SSL_MUTEX
  276.         if (RequestSSLMutex(20000))
  277.             return(0);
  278.         rc = p_SSL_write(ssl,buf,num);
  279.         ReleaseSSLMutex();
  280. #else
  281.         rc = p_SSL_write(ssl,buf,num);
  282. #endif
  283.         return(rc);
  284.     }
  285.     return(0);
  286. }
  287.  
  288. int
  289. ck_SSL_pending(SSL *ssl)
  290. {
  291.     if ( ssl && !ssl_shutdown_in_progress && p_SSL_pending ) {
  292.         int rc;
  293. #ifdef SSL_MUTEX
  294.         if (RequestSSLMutex(20000))
  295.             return(0);
  296.         rc = p_SSL_pending(ssl);
  297.         ReleaseSSLMutex();
  298. #else
  299.         rc = p_SSL_pending(ssl);
  300. #endif
  301.         return(rc);
  302.     }
  303.     return(0);
  304. }
  305.  
  306. void
  307. ck_SSL_load_error_strings(void )
  308. {
  309.     if ( p_SSL_load_error_strings )
  310.         p_SSL_load_error_strings();
  311. }
  312.  
  313. X509 *
  314. ck_SSL_get_peer_certificate(SSL *s)
  315. {
  316.     if ( p_SSL_get_peer_certificate )
  317.         return p_SSL_get_peer_certificate(s);
  318.     return(NULL);
  319. }
  320.  
  321. const char *
  322. ck_SSL_CIPHER_get_name(SSL_CIPHER *c)
  323. {
  324.     if ( p_SSL_CIPHER_get_name )
  325.         return p_SSL_CIPHER_get_name(c);
  326.     return(NULL);
  327. }
  328.  
  329. int
  330. ck_SSL_CIPHER_get_bits(SSL_CIPHER *c, int * alg_bits)
  331. {
  332.     if ( p_SSL_CIPHER_get_bits )
  333.         return p_SSL_CIPHER_get_bits(c,alg_bits);
  334.     return(0);
  335. }
  336.  
  337. char *
  338. ck_SSL_CIPHER_get_version(SSL_CIPHER *c)
  339. {
  340.     if ( p_SSL_CIPHER_get_version )
  341.         return p_SSL_CIPHER_get_version(c);
  342.     return(NULL);
  343. }
  344.  
  345. SSL_CIPHER *
  346. ck_SSL_get_current_cipher(SSL *s)
  347. {
  348.     if ( p_SSL_get_current_cipher )
  349.         return p_SSL_get_current_cipher(s);
  350.     return NULL;
  351. }
  352.  
  353. char *
  354. ck_SSL_get_shared_ciphers(SSL *s, char *buf, int len)
  355. {
  356.     if ( p_SSL_get_shared_ciphers )
  357.         return(p_SSL_get_shared_ciphers(s,buf,len));
  358.     else
  359.         return(NULL);
  360. }
  361.  
  362. char *
  363. ck_SSL_get_ciphers(SSL *s)
  364. {
  365.     if ( p_SSL_get_ciphers )
  366.         return(p_SSL_get_ciphers(s));
  367.     else
  368.         return(NULL);
  369. }
  370.  
  371. const char *
  372. ck_SSL_get_cipher_list(SSL *s, int i)
  373. {
  374.     if ( p_SSL_get_cipher_list )
  375.         return(p_SSL_get_cipher_list(s,i));
  376.     else
  377.         return(NULL);
  378. }
  379.  
  380. int
  381. ck_SSL_CTX_set_default_verify_paths(SSL_CTX *ctx)
  382. {
  383.     if ( p_SSL_CTX_set_default_verify_paths )
  384.         return p_SSL_CTX_set_default_verify_paths(ctx);
  385.     return 0;
  386. }
  387.  
  388. int
  389. ck_SSL_use_RSAPrivateKey_file(SSL *ssl, char *file, int type)
  390. {
  391.     if ( p_SSL_use_RSAPrivateKey_file )
  392.         return p_SSL_use_RSAPrivateKey_file(ssl, file, type);
  393.     return(0);
  394. }
  395.  
  396. int
  397. ck_SSL_use_DSAPrivateKey_file(SSL *ssl, char *file, int type)
  398. {
  399.     if ( p_SSL_use_DSAPrivateKey_file )
  400.         return p_SSL_use_DSAPrivateKey_file(ssl, file, type);
  401.     return(0);
  402. }
  403.  
  404. int
  405. ck_SSL_use_PrivateKey_file(SSL *ssl, char *file, int type)
  406. {
  407.     if ( p_SSL_use_PrivateKey_file )
  408.         return p_SSL_use_PrivateKey_file(ssl, file, type);
  409.     return(0);
  410. }
  411.  
  412. int
  413. ck_SSL_use_certificate_file(SSL *ssl, char *file, int type)
  414. {
  415.     if ( p_SSL_use_certificate_file )
  416.         return p_SSL_use_certificate_file(ssl,file,type);
  417.     return(0);
  418. }
  419.  
  420. int
  421. ck_SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
  422. {
  423.     if ( p_SSL_CTX_use_certificate_chain_file )
  424.         return p_SSL_CTX_use_certificate_chain_file(ctx,file);
  425.     return(0);
  426. }
  427.  
  428. int
  429. ck_SSL_CTX_use_PrivateKey_file(SSL_CTX *ssl, char *file, int type)
  430. {
  431.     if ( p_SSL_CTX_use_PrivateKey_file )
  432.         return p_SSL_CTX_use_PrivateKey_file(ssl, file, type);
  433.     return(0);
  434. }
  435.  
  436. int
  437. ck_SSL_CTX_use_certificate_file(SSL_CTX *ssl, char *file, int type)
  438. {
  439.     if ( p_SSL_CTX_use_certificate_file )
  440.         return p_SSL_CTX_use_certificate_file(ssl,file,type);
  441.     return(0);
  442. }
  443.  
  444. int
  445. ck_SSL_CTX_check_private_key(SSL_CTX *ctx) {
  446.     if ( p_SSL_CTX_check_private_key )
  447.         return p_SSL_CTX_check_private_key(ctx);
  448.     return(0);
  449. }
  450.  
  451. int
  452. ck_SSL_check_private_key(SSL *ssl) {
  453.     if ( p_SSL_check_private_key )
  454.         return p_SSL_check_private_key(ssl);
  455.     return(0);
  456. }
  457.  
  458. void
  459. ck_SSL_set_verify(SSL *s, int mode, int (*callback) ())
  460. {
  461.     if ( p_SSL_set_verify )
  462.         p_SSL_set_verify(s,mode,callback);
  463. }
  464.  
  465. void
  466. ck_SSL_CTX_set_verify(SSL_CTX *s, int mode, int (*callback) ())
  467. {
  468.     if ( p_SSL_CTX_set_verify )
  469.         p_SSL_CTX_set_verify(s,mode,callback);
  470. }
  471.  
  472. SSL *
  473. ck_SSL_new(SSL_CTX *ctx)
  474. {
  475.     if ( p_SSL_new )
  476.         return p_SSL_new(ctx);
  477.     return(NULL);
  478. }
  479.  
  480. long
  481. ck_SSL_CTX_ctrl(SSL_CTX *ctx,int cmd, long larg, char *parg)
  482. {
  483.     if ( p_SSL_CTX_ctrl )
  484.         return p_SSL_CTX_ctrl(ctx,cmd,larg,parg);
  485.     return(0);
  486. }
  487.  
  488. SSL_CTX *
  489. ck_SSL_CTX_new(SSL_METHOD *meth)
  490. {
  491.     if ( p_SSL_CTX_new )
  492.         return p_SSL_CTX_new(meth);
  493.     return(NULL);
  494. }
  495.  
  496. void
  497. ck_SSL_CTX_free(SSL_CTX * ctx)
  498. {
  499.     if ( p_SSL_CTX_free )
  500.         p_SSL_CTX_free(ctx);
  501. }
  502.  
  503. void
  504. ck_SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx,int (*cb)())
  505. {
  506.     if ( p_SSL_CTX_set_default_passwd_cb )
  507.         p_SSL_CTX_set_default_passwd_cb(ctx,cb);
  508. }
  509.  
  510. SSL_METHOD *
  511. ck_SSLv23_method(void)
  512. {
  513.     if ( p_SSLv23_method )
  514.         return p_SSLv23_method();
  515.     return(NULL);
  516. }
  517.  
  518. SSL_METHOD *
  519. ck_SSLv3_method(void)
  520. {
  521.     if ( p_SSLv3_method )
  522.         return p_SSLv3_method();
  523.     return(NULL);
  524. }
  525.  
  526. SSL_METHOD *
  527. ck_TLSv1_method(void)
  528. {
  529.     if ( p_TLSv1_method )
  530.         return p_TLSv1_method();
  531.     return(NULL);
  532. }
  533.  
  534. SSL_METHOD *
  535. ck_SSLv23_client_method(void)
  536. {
  537.     if ( p_SSLv23_client_method )
  538.         return p_SSLv23_client_method();
  539.     return(NULL);
  540. }
  541.  
  542. SSL_METHOD *
  543. ck_SSLv3_client_method(void)
  544. {
  545.     if ( p_SSLv3_client_method )
  546.         return p_SSLv3_client_method();
  547.     return(NULL);
  548. }
  549.  
  550. SSL_METHOD *
  551. ck_TLSv1_client_method(void)
  552. {
  553.     if ( p_TLSv1_client_method )
  554.         return p_TLSv1_client_method();
  555.     return(NULL);
  556. }
  557.  
  558. SSL_METHOD *
  559. ck_SSLv23_server_method(void)
  560. {
  561.     if ( p_SSLv23_server_method )
  562.         return p_SSLv23_server_method();
  563.     return(NULL);
  564. }
  565.  
  566. SSL_METHOD *
  567. ck_SSLv3_server_method(void)
  568. {
  569.     if ( p_SSLv3_server_method )
  570.         return p_SSLv3_server_method();
  571.     return(NULL);
  572. }
  573.  
  574. SSL_METHOD *
  575. ck_TLSv1_server_method(void)
  576. {
  577.     if ( p_TLSv1_server_method )
  578.         return p_TLSv1_server_method();
  579.     return(NULL);
  580. }
  581.  
  582. void
  583. ck_SSL_library_init(void)
  584. {
  585.     if ( p_SSL_library_init )
  586.         p_SSL_library_init();
  587. }
  588.  
  589. char *
  590. ck_SSL_state_string(const SSL *s)
  591. {
  592.     if ( p_SSL_state_string )
  593.         return p_SSL_state_string(s);
  594.     return NULL;
  595. }
  596.  
  597. char *
  598. ck_SSL_state_string_long(const SSL *s)
  599. {
  600.     if ( p_SSL_state_string_long )
  601.         return p_SSL_state_string_long(s);
  602.     return NULL;
  603. }
  604.  
  605. int
  606. ck_SSL_accept(SSL *ssl)
  607. {
  608.     if ( p_SSL_accept )
  609.         return p_SSL_accept(ssl);
  610.     return(0);
  611. }
  612.  
  613. int
  614. ck_SSL_set_cipher_list(SSL *ssl,char *s)
  615. {
  616.     if ( p_SSL_set_cipher_list )
  617.         return p_SSL_set_cipher_list(ssl,s);
  618.     return(0);
  619. }
  620.  
  621. void
  622. ck_SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,
  623.          RSA *(*cb)(SSL *ssl,int is_export, int keylength))
  624. {
  625.     if ( p_SSL_CTX_set_tmp_rsa_callback )
  626.         p_SSL_CTX_set_tmp_rsa_callback(ctx,cb);
  627. }
  628.  
  629. void
  630. ck_SSL_set_tmp_rsa_callback(SSL *ssl,
  631.          RSA *(*cb)(SSL *ssl,int is_export, int keylength))
  632. {
  633.     if ( p_SSL_set_tmp_rsa_callback )
  634.         p_SSL_set_tmp_rsa_callback(ssl,cb);
  635. }
  636.  
  637. void
  638. ck_SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,
  639.          DH *(*dh)(SSL *ssl,int is_export, int keylength))
  640. {
  641.     if ( p_SSL_CTX_set_tmp_dh_callback )
  642.         p_SSL_CTX_set_tmp_dh_callback(ctx,dh);
  643. }
  644.  
  645. void
  646. ck_SSL_set_tmp_dh_callback(SSL *ssl,
  647.          DH *(*dh)(SSL *ssl,int is_export, int keylength))
  648. {
  649.     if ( p_SSL_set_tmp_dh_callback )
  650.         p_SSL_set_tmp_dh_callback(ssl,dh);
  651.  
  652. }
  653.  
  654. int
  655. ck_SSL_CTX_load_verify_locations(SSL_CTX * ctx,char *f,char *p)
  656. {
  657.     if ( p_SSL_CTX_load_verify_locations )
  658.         return(p_SSL_CTX_load_verify_locations(ctx,f,p));
  659.     return(0);
  660. }
  661.  
  662. void
  663. ck_SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX * ctx, void * userdata)
  664. {
  665.     if ( p_SSL_CTX_set_default_passwd_cb_userdata )
  666.         p_SSL_CTX_set_default_passwd_cb_userdata(ctx,userdata);
  667. }
  668.  
  669. int
  670. ck_X509_userok(X509 *peer_cert, const char *userid)
  671. {
  672.     if ( p_X509_userok )
  673.         return(p_X509_userok(peer_cert,userid));
  674.     else
  675.         return(0);
  676. }
  677.  
  678. int
  679. ck_X509_to_user(X509 *peer_cert, char *userid, int len)
  680. {
  681.     if ( p_X509_to_user )
  682.         return(p_X509_to_user(peer_cert,userid,len));
  683.     else
  684.         return(-1);
  685. }
  686.  
  687. BIO *
  688. ck_SSL_get_wbio(SSL * s)
  689. {
  690.     if ( p_SSL_get_wbio )
  691.         return(p_SSL_get_wbio(s));
  692.     else
  693.         return(NULL);
  694. }
  695.  
  696. size_t
  697. ck_SSL_get_finished(SSL * s,void *buf, size_t count)
  698. {
  699.     if ( p_SSL_get_finished )
  700.         return(p_SSL_get_finished(s,buf,count));
  701.     else
  702.         return(0);
  703. }
  704.  
  705. size_t
  706. ck_SSL_get_peer_finished(SSL * s,void *buf, size_t count)
  707. {
  708.     if ( p_SSL_get_peer_finished )
  709.         return(p_SSL_get_peer_finished(s,buf,count));
  710.     else
  711.         return(0);
  712. }
  713.  
  714. void
  715. ck_SSL_copy_session_id(SSL *to,SSL *from)
  716. {
  717.     if ( p_SSL_copy_session_id )
  718.         p_SSL_copy_session_id(to,from);
  719. }
  720.  
  721. int
  722. ck_SSL_renegotiate(SSL * ssl)
  723. {
  724.     if ( p_SSL_renegotiate )
  725.         return(p_SSL_renegotiate(ssl));
  726.     else
  727.         return(-1);
  728. }
  729.  
  730. int
  731. ck_SSL_set_session(SSL *ssl, SSL_SESSION * session)
  732. {
  733.     if ( p_SSL_set_session )
  734.         return(p_SSL_set_session(ssl,session));
  735.     else
  736.         return(-1);
  737. }
  738. SSL_SESSION *
  739. ck_SSL_get_session(SSL * ssl)
  740. {
  741.     if ( p_SSL_get_session )
  742.         return(p_SSL_get_session(ssl));
  743.     else
  744.         return(NULL);
  745. }
  746.  
  747. int
  748. ck_SSL_CTX_set_session_id_context(SSL_CTX *ctx,const unsigned char *sid_ctx,
  749.                                    unsigned int sid_ctx_len)
  750. {
  751.     if ( p_SSL_CTX_set_session_id_context )
  752.         return(p_SSL_CTX_set_session_id_context(ctx,sid_ctx,sid_ctx_len));
  753.     else
  754.         return(-1);
  755. }
  756.  
  757. EVP_PKEY *
  758. ck_SSL_get_privatekey(SSL * s)
  759. {
  760.     if ( p_SSL_get_privatekey )
  761.         return(p_SSL_get_privatekey(s));
  762.     else
  763.         return(NULL);
  764. }
  765. X509 *
  766. ck_SSL_get_certificate(SSL * s)
  767. {
  768.     if ( p_SSL_get_certificate )
  769.         return(p_SSL_get_certificate(s));
  770.     else
  771.         return(NULL);
  772. }
  773.  
  774. int
  775. ck_SSL_clear(SSL * s)
  776. {
  777.     if ( p_SSL_clear )
  778.         return(p_SSL_clear(s));
  779.     else
  780.         return(-1);
  781. }
  782.  
  783. void
  784. ck_SSL_set_accept_state(SSL * s)
  785. {
  786.     if ( p_SSL_set_accept_state )
  787.         p_SSL_set_accept_state(s);
  788. }
  789.  
  790. char *
  791. ck_SSL_CIPHER_description(SSL_CIPHER * c,char *buf,int size)
  792. {
  793.     if (p_SSL_CIPHER_description)
  794.         return(p_SSL_CIPHER_description(c,buf,size));
  795.     else
  796.         return(NULL);
  797. }
  798.  
  799. #ifdef SSL_KRB5
  800. KSSL_CTX *
  801. ck_kssl_ctx_new(void)
  802. {
  803.     if ( p_kssl_ctx_new )
  804.         return(p_kssl_ctx_new());
  805.     else
  806.         return(NULL);
  807. }
  808.  
  809. KSSL_CTX *
  810. ck_kssl_ctx_free(KSSL_CTX *kssl_ctx)
  811. {
  812.     if ( p_kssl_ctx_free )
  813.         return(p_kssl_ctx_free(kssl_ctx));
  814.     else
  815.         return(NULL);
  816. }
  817.  
  818. krb5_error_code
  819. ck_kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text)
  820. {
  821.     if ( p_kssl_ctx_setstring )
  822.         return(p_kssl_ctx_setstring(kssl_ctx,which,text));
  823.     else
  824.         return(-1);
  825. }
  826.  
  827. krb5_error_code
  828. ck_kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which,
  829.                       krb5_data *realm, krb5_data *entity)
  830. {
  831.     if ( p_kssl_ctx_setprinc )
  832.         return(p_kssl_ctx_setprinc(kssl_ctx, which, realm, entity));
  833.     else
  834.         return(-1);
  835. }
  836. #endif /* SSL_KRB5 */
  837. int
  838. ck_SSL_COMP_add_compression_method(int id,COMP_METHOD *cm)
  839. {
  840.     if ( p_SSL_COMP_add_compression_method )
  841.         return(p_SSL_COMP_add_compression_method(id,cm));
  842.     else
  843.         return(-1);
  844. }
  845.  
  846. void 
  847. ck_SSL_CTX_set_info_callback(SSL_CTX *ctx, void (*cb)(const SSL *ssl,int type,int val))
  848. {
  849.     if ( p_SSL_CTX_set_info_callback )
  850.         p_SSL_CTX_set_info_callback(ctx,cb);
  851. }
  852.  
  853.  
  854. int
  855. ck_ssl_loaddll_eh(void)
  856. {
  857.     if ( hSSL ) {
  858. #ifdef NT
  859.         FreeLibrary(hSSL);
  860.         hSSL = NULL;
  861. #else /* NT */
  862.         DosFreeModule(hSSL);
  863.         hSSL = 0;
  864. #endif  /* NT */
  865.     }
  866.  
  867.     if ( hX5092UID ) {
  868. #ifdef NT
  869.         FreeLibrary(hX5092UID);
  870.         hX5092UID = NULL;
  871. #else /* NT */
  872.         DosFreeModule(hX5092UID);
  873.         hX5092UID = 0;
  874. #endif  /* NT */
  875.     }
  876.     p_SSL_get_error=NULL;
  877.     p_SSL_read=NULL;
  878.     p_SSL_peek=NULL;
  879.     p_SSL_connect=NULL;
  880.     p_SSL_set_fd=NULL;
  881.     p_SSL_free=NULL;
  882.     p_SSL_shutdown=NULL;
  883.     p_SSL_write=NULL;
  884.     p_SSL_pending=NULL;
  885.     p_SSL_load_error_strings=NULL;
  886.     p_SSL_get_peer_certificate=NULL;
  887.     p_SSL_CIPHER_get_name=NULL;
  888.     p_SSL_CIPHER_get_bits=NULL;
  889.     p_SSL_CIPHER_get_version=NULL;
  890.     p_SSL_get_current_cipher=NULL;
  891.     p_SSL_get_shared_ciphers=NULL;
  892.     p_SSL_get_ciphers=NULL;
  893.     p_SSL_get_cipher_list=NULL;
  894.     p_SSL_CTX_set_default_verify_paths=NULL;
  895.     p_SSL_use_RSAPrivateKey_file=NULL;
  896.     p_SSL_use_DSAPrivateKey_file=NULL;
  897.     p_SSL_use_PrivateKey_file=NULL;
  898.     p_SSL_use_certificate_file=NULL;
  899.     p_SSL_check_private_key=NULL;
  900.     p_SSL_CTX_use_PrivateKey_file=NULL;
  901.     p_SSL_CTX_use_certificate_file=NULL;
  902.     p_SSL_CTX_use_certificate_chain_file=NULL;
  903.     p_SSL_CTX_check_private_key=NULL;
  904.     p_SSL_set_verify=NULL;
  905.     p_SSL_CTX_set_verify=NULL;
  906.     p_SSL_new=NULL;
  907.     p_SSL_CTX_ctrl=NULL;
  908.     p_SSL_CTX_new=NULL;
  909.     p_SSL_CTX_free=NULL;
  910.     p_SSL_CTX_set_default_passwd_cb=NULL;
  911.     p_SSLv23_method=NULL;
  912.     p_SSLv3_method=NULL;
  913.     p_TLSv1_method=NULL;
  914.     p_SSLv23_server_method=NULL;
  915.     p_SSLv3_server_method=NULL;
  916.     p_TLSv1_server_method=NULL;
  917.     p_SSLv23_client_method=NULL;
  918.     p_SSLv3_client_method=NULL;
  919.     p_TLSv1_client_method=NULL;
  920.     p_SSL_library_init=NULL;
  921.     p_SSL_state_string=NULL;
  922.     p_SSL_state_string_long=NULL;
  923.     p_SSL_accept=NULL;
  924.     p_SSL_set_cipher_list=NULL;
  925.  
  926.     p_SSL_CTX_set_tmp_rsa_callback=NULL;
  927.     p_SSL_set_tmp_rsa_callback=NULL;
  928.     p_SSL_CTX_set_tmp_dh_callback=NULL;
  929.     p_SSL_set_tmp_dh_callback=NULL;
  930.  
  931.     p_SSL_CTX_load_verify_locations=NULL;
  932.     p_SSL_CTX_set_default_passwd_cb_userdata=NULL;
  933.     p_X509_to_user=NULL;
  934.     p_X509_userok=NULL;
  935.     p_SSL_get_wbio=NULL;
  936.     p_SSL_get_finished=NULL;
  937.     p_SSL_get_peer_finished=NULL;
  938.     p_SSL_copy_session_id=NULL;
  939.     p_SSL_renegotiate=NULL;
  940.     p_SSL_get_session=NULL;
  941.     p_SSL_set_session=NULL;
  942.     p_SSL_CTX_set_session_id_context=NULL;
  943.     p_SSL_get_privatekey=NULL;
  944.     p_SSL_get_certificate=NULL;
  945.     p_SSL_clear=NULL;
  946.     p_SSL_set_accept_state=NULL;
  947.     p_SSL_CIPHER_description=NULL;
  948.  
  949. #ifdef SSL_KRB5
  950.     p_kssl_ctx_new = NULL;
  951.     p_kssl_ctx_free = NULL;
  952.     p_kssl_ctx_setstring = NULL;
  953.     p_kssl_ctx_setprinc = NULL;
  954. #endif /* SSL_KRB5 */
  955.     p_SSL_COMP_add_compression_method=NULL;
  956.     p_SSL_CTX_set_info_callback = NULL;
  957.     return(1);
  958. }
  959.  
  960. int
  961. ck_ssl_loaddll( void )
  962. {
  963.     ULONG rc = 0 ;
  964.     extern unsigned long startflags;
  965.     int load_error = 0;
  966. #ifdef OS2ONLY
  967.     CHAR *exe_path;
  968.     CHAR path[256];
  969.     CHAR * dllname = "SSLEAY2";
  970.     CHAR errbuf[256];
  971. #endif /* OS2ONLY */
  972.  
  973.     if ( ssl_dll_loaded )
  974.         return(1);
  975.  
  976.     if ( startflags & 8 )       /* do not load if we are not supposed to */
  977.         return(0);
  978.  
  979. #ifdef NT
  980.     hSSL = LoadLibrary("SSLEAY32");
  981.     if ( !hSSL ) {
  982.         rc = GetLastError() ;
  983.         debug(F111, "OpenSSL LoadLibrary failed","SSLEAY32",rc) ;
  984.         return(0);
  985.     } else {
  986.         if (((FARPROC) p_SSL_get_error =
  987.               GetProcAddress( hSSL, "SSL_get_error" )) == NULL )
  988.         {
  989.             rc = GetLastError() ;
  990.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_error",rc);
  991.             load_error = 1;
  992.         }
  993.         if (((FARPROC) p_SSL_read =
  994.               GetProcAddress( hSSL, "SSL_read" )) == NULL )
  995.         {
  996.             rc = GetLastError() ;
  997.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_read",rc);
  998.             load_error = 1;
  999.         }
  1000.         if (((FARPROC) p_SSL_peek =
  1001.               GetProcAddress( hSSL, "SSL_peek" )) == NULL )
  1002.         {
  1003.             rc = GetLastError() ;
  1004.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_peek",rc);
  1005.             load_error = 1;
  1006.         }
  1007.         if (((FARPROC) p_SSL_connect =
  1008.               GetProcAddress( hSSL, "SSL_connect" )) == NULL )
  1009.         {
  1010.             rc = GetLastError() ;
  1011.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_connect",rc);
  1012.             load_error = 1;
  1013.         }
  1014.         if (((FARPROC) p_SSL_set_fd =
  1015.               GetProcAddress( hSSL, "SSL_set_fd" )) == NULL )
  1016.         {
  1017.             rc = GetLastError() ;
  1018.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_fd",rc);
  1019.             load_error = 1;
  1020.         }
  1021.         if (((FARPROC) p_SSL_free =
  1022.               GetProcAddress( hSSL, "SSL_free" )) == NULL )
  1023.         {
  1024.             rc = GetLastError() ;
  1025.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_free",rc);
  1026.             load_error = 1;
  1027.         }
  1028.         if (((FARPROC) p_SSL_shutdown =
  1029.               GetProcAddress( hSSL, "SSL_shutdown" )) == NULL )
  1030.         {
  1031.             rc = GetLastError() ;
  1032.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_shutdown",rc);
  1033.             load_error = 1;
  1034.         }
  1035.         if (((FARPROC) p_SSL_write =
  1036.               GetProcAddress( hSSL, "SSL_write" )) == NULL )
  1037.         {
  1038.             rc = GetLastError() ;
  1039.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_write",rc);
  1040.             load_error = 1;
  1041.         }
  1042.         if (((FARPROC) p_SSL_pending =
  1043.               GetProcAddress( hSSL, "SSL_pending" )) == NULL )
  1044.         {
  1045.             rc = GetLastError() ;
  1046.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_pending",rc);
  1047.             load_error = 1;
  1048.         }
  1049.         if (((FARPROC) p_SSL_load_error_strings =
  1050.               GetProcAddress( hSSL, "SSL_load_error_strings" )) == NULL )
  1051.         {
  1052.             rc = GetLastError() ;
  1053.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_load_error_strings",rc);
  1054.             load_error = 1;
  1055.         }
  1056.         if (((FARPROC) p_SSL_get_peer_certificate =
  1057.               GetProcAddress( hSSL, "SSL_get_peer_certificate" )) == NULL )
  1058.         {
  1059.             rc = GetLastError() ;
  1060.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_peer_certificate",rc);
  1061.             load_error = 1;
  1062.         }
  1063.         if (((FARPROC) p_SSL_CIPHER_get_name =
  1064.               GetProcAddress( hSSL, "SSL_CIPHER_get_name" )) == NULL )
  1065.         {
  1066.             rc = GetLastError() ;
  1067.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_name",rc);
  1068.             load_error = 1;
  1069.         }
  1070.         if (((FARPROC) p_SSL_CIPHER_get_bits =
  1071.               GetProcAddress( hSSL, "SSL_CIPHER_get_bits" )) == NULL )
  1072.         {
  1073.             rc = GetLastError() ;
  1074.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_bits",rc);
  1075.             load_error = 1;
  1076.         }
  1077.         if (((FARPROC) p_SSL_CIPHER_get_version =
  1078.               GetProcAddress( hSSL, "SSL_CIPHER_get_version" )) == NULL )
  1079.         {
  1080.             rc = GetLastError() ;
  1081.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_version",rc);
  1082.             load_error = 1;
  1083.         }
  1084.         if (((FARPROC) p_SSL_get_current_cipher =
  1085.               GetProcAddress( hSSL, "SSL_get_current_cipher" )) == NULL )
  1086.         {
  1087.             rc = GetLastError() ;
  1088.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_current_cipher",rc);
  1089.             load_error = 1;
  1090.         }
  1091.         if (((FARPROC) p_SSL_get_shared_ciphers =
  1092.               GetProcAddress( hSSL, "SSL_get_shared_ciphers" )) == NULL )
  1093.         {
  1094.             rc = GetLastError() ;
  1095.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_shared_ciphers",rc);
  1096.             load_error = 1;
  1097.         }
  1098.         if (((FARPROC) p_SSL_get_ciphers =
  1099.               GetProcAddress( hSSL, "SSL_get_ciphers" )) == NULL )
  1100.         {
  1101.             rc = GetLastError() ;
  1102.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_ciphers",rc);
  1103.             load_error = 1;
  1104.         }
  1105.         if (((FARPROC) p_SSL_get_cipher_list =
  1106.               GetProcAddress( hSSL, "SSL_get_cipher_list" )) == NULL )
  1107.         {
  1108.             rc = GetLastError() ;
  1109.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1110.                    "SSL_get_cipher_list",rc);
  1111.             load_error = 1;
  1112.         }
  1113.         if (((FARPROC) p_SSL_CTX_set_default_verify_paths =
  1114.               GetProcAddress( hSSL, "SSL_CTX_set_default_verify_paths" )) == NULL )
  1115.         {
  1116.             rc = GetLastError() ;
  1117.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1118.                    "SSL_CTX_set_default_verify_paths",rc);
  1119.             load_error = 1;
  1120.         }
  1121.         if (((FARPROC) p_SSL_use_RSAPrivateKey_file =
  1122.               GetProcAddress( hSSL, "SSL_use_RSAPrivateKey_file" )) == NULL )
  1123.         {
  1124.             rc = GetLastError() ;
  1125.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_use_RSAPrivateKey_file",rc);
  1126.         }
  1127.         if (((FARPROC) p_SSL_use_PrivateKey_file =
  1128.               GetProcAddress( hSSL, "SSL_use_PrivateKey_file" )) == NULL )
  1129.         {
  1130.             rc = GetLastError() ;
  1131.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_use_PrivateKey_file",rc);
  1132.             load_error = 1;
  1133.         }
  1134.         if (((FARPROC) p_SSL_use_certificate_file =
  1135.               GetProcAddress( hSSL, "SSL_use_certificate_file" )) == NULL )
  1136.         {
  1137.             rc = GetLastError() ;
  1138.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_use_certificate_file",rc);
  1139.             load_error = 1;
  1140.         }
  1141.         if (((FARPROC) p_SSL_CTX_use_PrivateKey_file =
  1142.               GetProcAddress( hSSL, "SSL_CTX_use_PrivateKey_file" )) == NULL )
  1143.         {
  1144.             rc = GetLastError() ;
  1145.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_use_PrivateKey_file",rc);
  1146.             load_error = 1;
  1147.         }
  1148.         if (((FARPROC) p_SSL_CTX_use_certificate_file =
  1149.               GetProcAddress( hSSL, "SSL_CTX_use_certificate_file" )) == NULL )
  1150.         {
  1151.             rc = GetLastError() ;
  1152.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1153.                    "SSL_CTX_use_certificate_file",rc);
  1154.             load_error = 1;
  1155.         }
  1156.         if (((FARPROC) p_SSL_CTX_use_certificate_chain_file =
  1157.               GetProcAddress( hSSL, "SSL_CTX_use_certificate_chain_file" )) == NULL )
  1158.         {
  1159.             rc = GetLastError() ;
  1160.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1161.                    "SSL_CTX_use_certificate_chain_file",rc);
  1162.             load_error = 1;
  1163.         }
  1164.         if (((FARPROC) p_SSL_CTX_check_private_key =
  1165.               GetProcAddress( hSSL, "SSL_CTX_check_private_key" )) == NULL )
  1166.         {
  1167.             rc = GetLastError() ;
  1168.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1169.                    "SSL_CTX_check_private_key",rc);
  1170.             load_error = 1;
  1171.         }
  1172.         if (((FARPROC) p_SSL_check_private_key =
  1173.               GetProcAddress( hSSL, "SSL_check_private_key" )) == NULL )
  1174.         {
  1175.             rc = GetLastError() ;
  1176.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1177.                    "SSL_check_private_key",rc);
  1178.             load_error = 1;
  1179.         }
  1180.         if (((FARPROC) p_SSL_set_verify =
  1181.               GetProcAddress( hSSL, "SSL_set_verify" )) == NULL )
  1182.         {
  1183.             rc = GetLastError() ;
  1184.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_verify",rc);
  1185.             load_error = 1;
  1186.         }
  1187.         if (((FARPROC) p_SSL_CTX_set_verify =
  1188.               GetProcAddress( hSSL, "SSL_CTX_set_verify" )) == NULL )
  1189.         {
  1190.             rc = GetLastError() ;
  1191.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_set_verify",rc);
  1192.             load_error = 1;
  1193.         }
  1194.         if (((FARPROC) p_SSL_new =
  1195.               GetProcAddress( hSSL, "SSL_new" )) == NULL )
  1196.         {
  1197.             rc = GetLastError() ;
  1198.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_new",rc);
  1199.             load_error = 1;
  1200.         }
  1201.         if (((FARPROC) p_SSL_CTX_ctrl =
  1202.               GetProcAddress( hSSL, "SSL_CTX_ctrl" )) == NULL )
  1203.         {
  1204.             rc = GetLastError() ;
  1205.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_ctrl",rc);
  1206.             load_error = 1;
  1207.         }
  1208.         if (((FARPROC) p_SSL_CTX_new =
  1209.               GetProcAddress( hSSL, "SSL_CTX_new" )) == NULL )
  1210.         {
  1211.             rc = GetLastError() ;
  1212.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_new",rc);
  1213.             load_error = 1;
  1214.         }
  1215.         if (((FARPROC) p_SSL_CTX_free =
  1216.               GetProcAddress( hSSL, "SSL_CTX_free" )) == NULL )
  1217.         {
  1218.             rc = GetLastError() ;
  1219.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_free",rc);
  1220.             load_error = 1;
  1221.         }
  1222.         if (((FARPROC) p_SSL_CTX_set_default_passwd_cb =
  1223.               GetProcAddress( hSSL, "SSL_CTX_set_default_passwd_cb" )) == NULL )
  1224.         {
  1225.             rc = GetLastError() ;
  1226.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_set_default_passwd_cb",rc);
  1227.             load_error = 1;
  1228.         }
  1229.         if (((FARPROC) p_SSLv23_method =
  1230.               GetProcAddress( hSSL, "SSLv23_method" )) == NULL )
  1231.         {
  1232.             rc = GetLastError() ;
  1233.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_method",rc);
  1234.         }
  1235.         if (((FARPROC) p_SSLv3_method =
  1236.               GetProcAddress( hSSL, "SSLv3_method" )) == NULL )
  1237.         {
  1238.             rc = GetLastError() ;
  1239.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_method",rc);
  1240.         }
  1241.         if (((FARPROC) p_TLSv1_method =
  1242.               GetProcAddress( hSSL, "TLSv1_method" )) == NULL )
  1243.         {
  1244.             rc = GetLastError() ;
  1245.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_method",rc);
  1246.             load_error = 1;
  1247.         }
  1248.  
  1249.         if (((FARPROC) p_SSLv23_client_method =
  1250.               GetProcAddress( hSSL, "SSLv23_client_method" )) == NULL )
  1251.         {
  1252.             rc = GetLastError() ;
  1253.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_client_method",rc);
  1254.         }
  1255.         if (((FARPROC) p_SSLv3_client_method =
  1256.               GetProcAddress( hSSL, "SSLv3_client_method" )) == NULL )
  1257.         {
  1258.             rc = GetLastError() ;
  1259.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_client_method",rc);
  1260.         }
  1261.         if (((FARPROC) p_TLSv1_client_method =
  1262.               GetProcAddress( hSSL, "TLSv1_client_method" )) == NULL )
  1263.         {
  1264.             rc = GetLastError() ;
  1265.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_client_method",rc);
  1266.             load_error = 1;
  1267.         }
  1268.         if (((FARPROC) p_SSLv23_server_method =
  1269.               GetProcAddress( hSSL, "SSLv23_server_method" )) == NULL )
  1270.         {
  1271.             rc = GetLastError() ;
  1272.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_server_method",rc);
  1273.         }
  1274.         if (((FARPROC) p_SSLv3_server_method =
  1275.               GetProcAddress( hSSL, "SSLv3_server_method" )) == NULL )
  1276.         {
  1277.             rc = GetLastError() ;
  1278.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_server_method",rc);
  1279.         }
  1280.         if (((FARPROC) p_TLSv1_server_method =
  1281.               GetProcAddress( hSSL, "TLSv1_server_method" )) == NULL )
  1282.         {
  1283.             rc = GetLastError() ;
  1284.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_server_method",rc);
  1285.             load_error = 1;
  1286.         }
  1287.  
  1288.         if (((FARPROC) p_SSL_library_init =
  1289.               GetProcAddress( hSSL, "SSL_library_init" )) == NULL )
  1290.         {
  1291.             rc = GetLastError() ;
  1292.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_library_init",rc);
  1293.             if (((FARPROC) p_SSL_library_init =
  1294.               GetProcAddress( hSSL, "OpenSSL_add_ssl_algorithms" )) == NULL )
  1295.             {
  1296.                 rc = GetLastError() ;
  1297.                 debug(F111,"OpenSSL SSL GetProcAddress failed",
  1298.                        "OpenSSL_add_ssl_algorithms",rc);
  1299.                 load_error = 1;
  1300.             }
  1301.         }
  1302.         if (((FARPROC) p_SSL_state_string =
  1303.               GetProcAddress( hSSL, "SSL_state_string" )) == NULL )
  1304.         {
  1305.             rc = GetLastError() ;
  1306.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_state_string",rc);
  1307.             load_error = 1;
  1308.         }
  1309.         if (((FARPROC) p_SSL_state_string_long =
  1310.               GetProcAddress( hSSL, "SSL_state_string_long" )) == NULL )
  1311.         {
  1312.             rc = GetLastError() ;
  1313.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_state_string_long",rc);
  1314.             load_error = 1;
  1315.         }
  1316.         if (((FARPROC) p_SSL_accept =
  1317.               GetProcAddress( hSSL, "SSL_accept" )) == NULL )
  1318.         {
  1319.             rc = GetLastError() ;
  1320.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_accept",rc);
  1321.             load_error = 1;
  1322.         }
  1323.         if (((FARPROC) p_SSL_set_cipher_list =
  1324.               GetProcAddress( hSSL, "SSL_set_cipher_list" )) == NULL )
  1325.         {
  1326.             rc = GetLastError() ;
  1327.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_cipher_list",rc);
  1328.             load_error = 1;
  1329.         }
  1330.         if (((FARPROC) p_SSL_CTX_set_tmp_rsa_callback =
  1331.               GetProcAddress( hSSL, "SSL_CTX_set_tmp_rsa_callback" )) == NULL )
  1332.         {
  1333.             rc = GetLastError() ;
  1334.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1335.                    "SSL_CTX_set_tmp_rsa_callback",rc);
  1336.         }
  1337.         if (((FARPROC) p_SSL_set_tmp_rsa_callback =
  1338.               GetProcAddress( hSSL, "SSL_set_tmp_rsa_callback" )) == NULL )
  1339.         {
  1340.             rc = GetLastError() ;
  1341.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1342.                    "SSL_set_tmp_rsa_callback",rc);
  1343.         }
  1344.         if (((FARPROC) p_SSL_CTX_set_tmp_dh_callback =
  1345.               GetProcAddress( hSSL, "SSL_CTX_set_tmp_dh_callback" )) == NULL )
  1346.         {
  1347.             rc = GetLastError() ;
  1348.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1349.                    "SSL_CTX_set_tmp_dh_callback",rc);
  1350.             load_error = 1;
  1351.         }
  1352.         if (((FARPROC) p_SSL_set_tmp_dh_callback =
  1353.               GetProcAddress( hSSL, "SSL_set_tmp_dh_callback" )) == NULL )
  1354.         {
  1355.             rc = GetLastError() ;
  1356.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1357.                    "SSL_set_tmp_dh_callback",rc);
  1358.             load_error = 1;
  1359.         }
  1360.         if (((FARPROC) p_SSL_CTX_load_verify_locations =
  1361.               GetProcAddress( hSSL, "SSL_CTX_load_verify_locations" )) == NULL )
  1362.         {
  1363.             rc = GetLastError() ;
  1364.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1365.                    "SSL_CTX_load_verify_locations",rc);
  1366.             load_error = 1;
  1367.         }
  1368.         if (((FARPROC) p_SSL_CTX_set_default_passwd_cb_userdata =
  1369.               GetProcAddress( hSSL,
  1370.                     "SSL_CTX_set_default_passwd_cb_userdata" )) == NULL )
  1371.         {
  1372.             rc = GetLastError() ;
  1373.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1374.                    "SSL_CTX_set_default_passwd_cb_userdata",rc);
  1375.             load_error = 1;
  1376.         }
  1377.         if (((FARPROC) p_SSL_get_wbio =
  1378.               GetProcAddress( hSSL, "SSL_get_wbio" )) == NULL )
  1379.         {
  1380.             rc = GetLastError() ;
  1381.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1382.                    "SSL_get_wbio",rc);
  1383.             load_error = 1;
  1384.         }
  1385.         if (((FARPROC) p_SSL_get_finished =
  1386.               GetProcAddress( hSSL, "SSL_get_finished" )) == NULL )
  1387.         {
  1388.             rc = GetLastError() ;
  1389.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1390.                    "SSL_get_finished",rc);
  1391.         }
  1392.         if (((FARPROC) p_SSL_get_peer_finished =
  1393.               GetProcAddress( hSSL, "SSL_get_peer_finished" )) == NULL )
  1394.         {
  1395.             rc = GetLastError() ;
  1396.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1397.                    "SSL_get_peer_finished",rc);
  1398.         }
  1399.         if (((FARPROC) p_SSL_copy_session_id =
  1400.               GetProcAddress( hSSL, "SSL_copy_session_id" )) == NULL )
  1401.         {
  1402.             rc = GetLastError() ;
  1403.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1404.                    "SSL_copy_session_id",rc);
  1405.         }
  1406.         if (((FARPROC) p_SSL_renegotiate =
  1407.               GetProcAddress( hSSL, "SSL_renegotiate" )) == NULL )
  1408.         {
  1409.             rc = GetLastError() ;
  1410.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1411.                    "SSL_renegotiate",rc);
  1412.         }
  1413.         if (((FARPROC) p_SSL_get_session =
  1414.               GetProcAddress( hSSL, "SSL_get_session" )) == NULL )
  1415.         {
  1416.             rc = GetLastError() ;
  1417.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1418.                    "SSL_get_session",rc);
  1419.         }
  1420.         if (((FARPROC) p_SSL_set_session =
  1421.               GetProcAddress( hSSL, "SSL_set_session" )) == NULL )
  1422.         {
  1423.             rc = GetLastError() ;
  1424.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1425.                    "SSL_set_session",rc);
  1426.         }
  1427.         if (((FARPROC) p_SSL_CTX_set_session_id_context =
  1428.               GetProcAddress( hSSL, "SSL_CTX_set_session_id_context" )) == NULL )
  1429.         {
  1430.             rc = GetLastError() ;
  1431.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1432.                   "SSL_CTX_set_session_id_context",rc);
  1433.         }
  1434.         if (((FARPROC) p_SSL_get_privatekey =
  1435.               GetProcAddress( hSSL, "SSL_get_priavatekey" )) == NULL )
  1436.         {
  1437.             rc = GetLastError() ;
  1438.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1439.                    "SSL_get_privatekey",rc);
  1440.         }
  1441.         if (((FARPROC) p_SSL_get_certificate =
  1442.               GetProcAddress( hSSL, "SSL_get_certificate" )) == NULL )
  1443.         {
  1444.             rc = GetLastError() ;
  1445.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1446.                    "SSL_get_certificate",rc);
  1447.         }
  1448.         if (((FARPROC) p_SSL_clear =
  1449.               GetProcAddress( hSSL, "SSL_clear" )) == NULL )
  1450.         {
  1451.             rc = GetLastError() ;
  1452.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1453.                    "SSL_clear",rc);
  1454.         }
  1455.         if (((FARPROC) p_SSL_set_accept_state =
  1456.               GetProcAddress( hSSL, "SSL_set_accept_state" )) == NULL )
  1457.         {
  1458.             rc = GetLastError() ;
  1459.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1460.                    "SSL_set_accept_state",rc);
  1461.         }
  1462.         if (((FARPROC) p_SSL_CIPHER_description =
  1463.               GetProcAddress( hSSL, "SSL_CIPHER_description" )) == NULL )
  1464.         {
  1465.             rc = GetLastError() ;
  1466.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1467.                    "SSL_CIPHER_description",rc);
  1468.         }
  1469.         if (((FARPROC) p_SSL_CTX_set_info_callback =
  1470.               GetProcAddress( hSSL, "SSL_CTX_set_info_callback" )) == NULL )
  1471.         {
  1472.             rc = GetLastError() ;
  1473.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1474.                    "SSL_CTX_set_info_callback",rc);
  1475.         }
  1476.  
  1477. #ifdef SSL_KRB5
  1478.         if (((FARPROC) p_kssl_ctx_new =
  1479.               GetProcAddress( hSSL, "kssl_ctx_new" )) == NULL )
  1480.         {
  1481.             rc = GetLastError() ;
  1482.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1483.                    "kssl_ctx_new",rc);
  1484.         }
  1485.         if (((FARPROC) p_kssl_ctx_free =
  1486.               GetProcAddress( hSSL, "kssl_ctx_free" )) == NULL )
  1487.         {
  1488.             rc = GetLastError() ;
  1489.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1490.                    "kssl_ctx_free",rc);
  1491.         }
  1492.         if (((FARPROC) p_kssl_ctx_setstring =
  1493.               GetProcAddress( hSSL, "kssl_ctx_setstring" )) == NULL )
  1494.         {
  1495.             rc = GetLastError() ;
  1496.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1497.                    "kssl_ctx_setstring",rc);
  1498.         }
  1499.         if (((FARPROC) p_kssl_ctx_setprinc =
  1500.               GetProcAddress( hSSL, "kssl_ctx_setprinc" )) == NULL )
  1501.         {
  1502.             rc = GetLastError() ;
  1503.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1504.                    "kssl_ctx_setprinc",rc);
  1505.         }
  1506. #endif /* SSL_KRB5 */
  1507.         if (((FARPROC) p_SSL_COMP_add_compression_method =
  1508.               GetProcAddress( hSSL, "SSL_COMP_add_compression_method" )) == NULL )
  1509.         {
  1510.             rc = GetLastError() ;
  1511.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1512.                    "SSL_COMP_add_compression_method",rc);
  1513.         }
  1514.  
  1515.         if ( load_error ) {
  1516.             ck_ssl_loaddll_eh();
  1517.             return 0;
  1518.         }
  1519.     }
  1520. #else /* NT */
  1521.     exe_path = GetLoadPath();
  1522.     sprintf(path, "%.*s%s.DLL", (int)get_dir_len(exe_path), exe_path,dllname);
  1523.     rc = DosLoadModule(errbuf, 256, path, &hSSL);
  1524.     if (rc) {
  1525.         debug(F111, "OpenSSL LoadLibrary failed",path,rc) ;
  1526.         rc = DosLoadModule(errbuf, 256, dllname, &hSSL);
  1527.     }
  1528.     if ( rc ) {
  1529.         debug(F111, "OpenSSL LoadLibrary failed",errbuf,rc) ;
  1530.         return(0);
  1531.     } else {
  1532.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_error",
  1533.                                   (PFN*) &p_SSL_get_error))
  1534.         {
  1535.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1536.                   "SSL_get_error",rc);
  1537.             load_error = 1;
  1538.         }
  1539.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_read",
  1540.                                   (PFN*) &p_SSL_read))
  1541.         {
  1542.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_read",rc);
  1543.             load_error = 1;
  1544.         }
  1545.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_peek",
  1546.                                   (PFN*) &p_SSL_peek))
  1547.         {
  1548.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_peek",rc);
  1549.             load_error = 1;
  1550.         }
  1551.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_connect",
  1552.                                   (PFN*) &p_SSL_connect))
  1553.         {
  1554.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_connect",rc);
  1555.             load_error = 1;
  1556.         }
  1557.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_set_fd",
  1558.                                   (PFN*) &p_SSL_set_fd))
  1559.         {
  1560.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_fd",rc);
  1561.             load_error = 1;
  1562.         }
  1563.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_free",
  1564.                                   (PFN*) &p_SSL_free))
  1565.         {
  1566.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_free",rc);
  1567.             load_error = 1;
  1568.         }
  1569.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_shutdown",
  1570.                                   (PFN*) &p_SSL_shutdown))
  1571.         {
  1572.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_shutdown",rc);
  1573.             load_error = 1;
  1574.         }
  1575.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_write",
  1576.                                   (PFN*) &p_SSL_write))
  1577.         {
  1578.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_write",rc);
  1579.             load_error = 1;
  1580.         }
  1581.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_pending",
  1582.                                   (PFN*) &p_SSL_pending))
  1583.         {
  1584.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_pending",rc);
  1585.             load_error = 1;
  1586.         }
  1587.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_load_error_strings",
  1588.                                   (PFN*) &p_SSL_load_error_strings ))
  1589.         {
  1590.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_load_error_strings",rc);
  1591.             load_error = 1;
  1592.         }
  1593.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_peer_certificate",
  1594.                                   (PFN*) &p_SSL_get_peer_certificate))
  1595.         {
  1596.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_peer_certificate",rc);
  1597.             load_error = 1;
  1598.         }
  1599.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CIPHER_get_name",
  1600.                                   (PFN*) &p_SSL_CIPHER_get_name))
  1601.         {
  1602.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_name",rc);
  1603.             load_error = 1;
  1604.         }
  1605.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CIPHER_get_bits",
  1606.                                   (PFN*) &p_SSL_CIPHER_get_bits))
  1607.         {
  1608.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_bits",rc);
  1609.             load_error = 1;
  1610.         }
  1611.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CIPHER_get_version",
  1612.                                   (PFN*) &p_SSL_CIPHER_get_version))
  1613.         {
  1614.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CIPHER_get_version",rc);
  1615.             load_error = 1;
  1616.         }
  1617.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_current_cipher",
  1618.                                   (PFN*) &p_SSL_get_current_cipher))
  1619.         {
  1620.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_current_cipher",rc);
  1621.             load_error = 1;
  1622.         }
  1623.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_shared_ciphers",
  1624.                                   (PFN*) &p_SSL_get_shared_ciphers))
  1625.         {
  1626.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_shared_ciphers",rc);
  1627.             load_error = 1;
  1628.         }
  1629.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_ciphers",
  1630.                                   (PFN*) &p_SSL_get_ciphers))
  1631.         {
  1632.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_get_ciphers",rc);
  1633.             load_error = 1;
  1634.         }
  1635.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_get_cipher_list",
  1636.                                   (PFN*) &p_SSL_get_cipher_list))
  1637.         {
  1638.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1639.                    "SSL_get_cipher_list",rc);
  1640.             load_error = 1;
  1641.         }
  1642.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_set_default_verify_paths",
  1643.                                   (PFN*) &p_SSL_CTX_set_default_verify_paths))
  1644.         {
  1645.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1646.                    "SSL_CTX_set_default_verify_paths",rc);
  1647.             load_error = 1;
  1648.         }
  1649.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_use_RSAPrivateKey_file",
  1650.                                   (PFN*) &p_SSL_use_RSAPrivateKey_file))
  1651.         {
  1652.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1653.                   "SSL_use_RSAPrivateKey_file",rc);
  1654.         }
  1655.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_use_PrivateKey_file",
  1656.                                   (PFN*) &p_SSL_use_PrivateKey_file))
  1657.         {
  1658.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_use_PrivateKey_file",rc);
  1659.             load_error = 1;
  1660.         }
  1661.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_use_certificate_file",
  1662.                                   (PFN*) &p_SSL_use_certificate_file))
  1663.         {
  1664.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_use_certificate_file",rc);
  1665.             load_error = 1;
  1666.         }
  1667.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_use_PrivateKey_file",
  1668.                                   (PFN*) &p_SSL_CTX_use_PrivateKey_file))
  1669.         {
  1670.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_use_PrivateKey_file",rc);
  1671.             load_error = 1;
  1672.         }
  1673.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_use_certificate_file",
  1674.                                   (PFN*) &p_SSL_CTX_use_certificate_file))
  1675.         {
  1676.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1677.                    "SSL_CTX_use_certificate_file",rc);
  1678.             load_error = 1;
  1679.         }
  1680.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_use_certificate_chain_file",
  1681.                                   (PFN*) &p_SSL_CTX_use_certificate_chain_file))
  1682.         {
  1683.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1684.                    "SSL_CTX_use_certificate_chain_file",rc);
  1685.             load_error = 1;
  1686.         }
  1687.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_check_private_key",
  1688.                                   (PFN*) &p_SSL_CTX_check_private_key))
  1689.         {
  1690.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1691.                    "SSL_CTX_check_private_key",rc);
  1692.             load_error = 1;
  1693.         }
  1694.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_check_private_key",
  1695.                                   (PFN*) &p_SSL_check_private_key))
  1696.         {
  1697.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1698.                    "SSL_check_private_key",rc);
  1699.             load_error = 1;
  1700.         }
  1701.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_set_verify",
  1702.                                   (PFN*) &p_SSL_set_verify))
  1703.         {
  1704.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_verify",rc);
  1705.             load_error = 1;
  1706.         }
  1707.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_set_verify",
  1708.                                   (PFN*) &p_SSL_CTX_set_verify))
  1709.         {
  1710.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_set_verify",rc);
  1711.             load_error = 1;
  1712.         }
  1713.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_new",
  1714.                                   (PFN*) &p_SSL_new))
  1715.         {
  1716.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_new",rc);
  1717.             load_error = 1;
  1718.         }
  1719.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_ctrl",
  1720.                                   (PFN*) &p_SSL_CTX_ctrl))
  1721.         {
  1722.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_ctrl",rc);
  1723.             load_error = 1;
  1724.         }
  1725.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_new",
  1726.                                   (PFN*) &p_SSL_CTX_new))
  1727.         {
  1728.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_new",rc);
  1729.             load_error = 1;
  1730.         }
  1731.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_free",
  1732.                                   (PFN*) &p_SSL_CTX_free))
  1733.         {
  1734.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_free",rc);
  1735.             load_error = 1;
  1736.         }
  1737.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_set_default_passwd_cb",
  1738.                                   (PFN*) &p_SSL_CTX_set_default_passwd_cb))
  1739.         {
  1740.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_CTX_set_default_passwd_cb",rc);
  1741.             load_error = 1;
  1742.         }
  1743.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv23_method",
  1744.                                   (PFN*) &p_SSLv23_method))
  1745.         {
  1746.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_method",rc);
  1747.         }
  1748.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv3_method",
  1749.                                   (PFN*) &p_SSLv3_method))
  1750.         {
  1751.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_method",rc);
  1752.         }
  1753.         if (rc = DosQueryProcAddr( hSSL, 0, "TLSv1_method",
  1754.                                   (PFN*) &p_TLSv1_method))
  1755.         {
  1756.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_method",rc);
  1757.             load_error = 1;
  1758.         }
  1759.  
  1760.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv23_client_method",
  1761.                                   (PFN*) &p_SSLv23_client_method))
  1762.         {
  1763.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_client_method",rc);
  1764.         }
  1765.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv3_client_method",
  1766.                                   (PFN*) &p_SSLv3_client_method) )
  1767.         {
  1768.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_client_method",rc);
  1769.         }
  1770.         if (rc = DosQueryProcAddr( hSSL, 0, "TLSv1_client_method",
  1771.                                   (PFN*) &p_TLSv1_client_method) )
  1772.         {
  1773.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_client_method",rc);
  1774.             load_error = 1;
  1775.         }
  1776.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv23_server_method",
  1777.                                   (PFN*) &p_SSLv23_server_method) )
  1778.         {
  1779.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv23_server_method",rc);
  1780.         }
  1781.         if (rc = DosQueryProcAddr( hSSL, 0, "SSLv3_server_method",
  1782.                                   (PFN*) &p_SSLv3_server_method) )
  1783.         {
  1784.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSLv3_server_method",rc);
  1785.         }
  1786.         if (rc = DosQueryProcAddr( hSSL, 0, "TLSv1_server_method",
  1787.                                   (PFN*) &p_TLSv1_server_method) )
  1788.         {
  1789.             debug(F111,"OpenSSL SSL GetProcAddress failed","TLSv1_server_method",rc);
  1790.             load_error = 1;
  1791.         }
  1792.  
  1793.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_library_init",
  1794.                                   (PFN*) &p_SSL_library_init) )
  1795.         {
  1796.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_library_init",rc);
  1797.  
  1798.             if (rc = DosQueryProcAddr( hSSL, 0, "OpenSSL_add_ssl_algorithms",
  1799.                                       (PFN*) &p_SSL_library_init) )
  1800.             {
  1801.                 debug(F111,"OpenSSL SSL GetProcAddress failed",
  1802.                        "OpenSSL_add_ssl_algorithms",rc);
  1803.                 load_error = 1;
  1804.             }
  1805.         }
  1806.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_state_string",
  1807.                                   (PFN*) &p_SSL_state_string) )
  1808.         {
  1809.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_state_string",rc);
  1810.             load_error = 1;
  1811.         }
  1812.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_state_string_long",
  1813.                                   (PFN*) &p_SSL_state_string_long) )
  1814.         {
  1815.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_state_string_long",rc);
  1816.             load_error = 1;
  1817.         }
  1818.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_accept",
  1819.                                   (PFN*) &p_SSL_accept) )
  1820.         {
  1821.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_accept",rc);
  1822.             load_error = 1;
  1823.         }
  1824.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_set_cipher_list",
  1825.                                   (PFN*) &p_SSL_set_cipher_list) )
  1826.         {
  1827.             debug(F111,"OpenSSL SSL GetProcAddress failed","SSL_set_cipher_list",rc);
  1828.             load_error = 1;
  1829.         }
  1830.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_set_tmp_rsa_callback",
  1831.                                   (PFN*) &p_SSL_CTX_set_tmp_rsa_callback) )
  1832.         {
  1833.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1834.                    "SSL_CTX_set_tmp_rsa_callback",rc);
  1835.         }
  1836.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_set_tmp_rsa_callback",
  1837.                                   (PFN*) &p_SSL_set_tmp_rsa_callback) )
  1838.         {
  1839.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1840.                    "SSL_set_tmp_rsa_callback",rc);
  1841.         }
  1842.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_set_tmp_dh_callback",
  1843.                                   (PFN*) &p_SSL_CTX_set_tmp_dh_callback) )
  1844.         {
  1845.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1846.                    "SSL_CTX_set_tmp_dh_callback",rc);
  1847.             load_error = 1;
  1848.         }
  1849.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_set_tmp_dh_callback",
  1850.                                   (PFN*) &p_SSL_set_tmp_dh_callback) )
  1851.         {
  1852.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1853.                    "SSL_set_tmp_dh_callback",rc);
  1854.             load_error = 1;
  1855.         }
  1856.         if (rc = DosQueryProcAddr( hSSL, 0, "SSL_CTX_load_verify_locations",
  1857.                                   (PFN*) &p_SSL_CTX_load_verify_locations) )
  1858.         {
  1859.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1860.                    "SSL_CTX_load_verify_locations",rc);
  1861.             load_error = 1;
  1862.         }
  1863.         if (rc = DosQueryProcAddr( hSSL, 0,
  1864.                                   "SSL_CTX_set_default_passwd_cb_userdata",
  1865.                                   (PFN*) &p_SSL_CTX_set_default_passwd_cb_userdata) )
  1866.         {
  1867.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1868.                    "SSL_CTX_set_default_passwd_cb_userdata",rc);
  1869.             load_error = 1;
  1870.         }
  1871.         if (rc = DosQueryProcAddr( hSSL, 0,
  1872.                                   "SSL_get_wbio",
  1873.                                   (PFN*) &p_SSL_get_wbio) )
  1874.         {
  1875.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1876.                    "SSL_get_wbio",rc);
  1877.             load_error = 1;
  1878.         }
  1879.         if (rc = DosQueryProcAddr( hSSL, 0,
  1880.                                   "SSL_get_finished",
  1881.                                   (PFN*) &p_SSL_get_finished) )
  1882.         {
  1883.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1884.                    "SSL_get_finished",rc);
  1885.         }
  1886.         if (rc = DosQueryProcAddr( hSSL, 0,
  1887.                                   "SSL_get_peer_finished",
  1888.                                   (PFN*) &p_SSL_get_peer_finished) )
  1889.         {
  1890.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1891.                    "SSL_get_peer_finished",rc);
  1892.         }
  1893.         if (rc = DosQueryProcAddr( hSSL, 0,
  1894.                                   "SSL_copy_session_id",
  1895.                                   (PFN*) &p_SSL_copy_session_id) )
  1896.         {
  1897.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1898.                    "SSL_copy_session_id",rc);
  1899.         }
  1900.         if (rc = DosQueryProcAddr( hSSL, 0,
  1901.                                   "SSL_renegotiate",
  1902.                                   (PFN*) &p_SSL_renegotiate) )
  1903.         {
  1904.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1905.                    "SSL_renegotiate",rc);
  1906.         }
  1907.         if (rc = DosQueryProcAddr( hSSL, 0,
  1908.                                   "SSL_get_session",
  1909.                                   (PFN*) &p_SSL_get_session) )
  1910.         {
  1911.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1912.                    "SSL_get_session",rc);
  1913.         }
  1914.         if (rc = DosQueryProcAddr( hSSL, 0,
  1915.                                   "SSL_set_session",
  1916.                                   (PFN*) &p_SSL_set_session) )
  1917.         {
  1918.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1919.                    "SSL_set_session",rc);
  1920.         }
  1921.         if (rc = DosQueryProcAddr( hSSL, 0,
  1922.                                   "SSL_CTX_set_session_id_context",
  1923.                                   (PFN*) &p_SSL_CTX_set_session_id_context) )
  1924.         {
  1925.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1926.                    "SSL_CTX_set_session_id_context",rc);
  1927.         }
  1928.         if (rc = DosQueryProcAddr( hSSL, 0,
  1929.                                   "SSL_get_privatekey",
  1930.                                   (PFN*) &p_SSL_get_privatekey) )
  1931.         {
  1932.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1933.                    "SSL_get_privatekey",rc);
  1934.         }
  1935.         if (rc = DosQueryProcAddr( hSSL, 0,
  1936.                                   "SSL_get_certificate",
  1937.                                   (PFN*) &p_SSL_get_certificate) )
  1938.         {
  1939.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1940.                    "SSL_get_certificate",rc);
  1941.         }
  1942.         if (rc = DosQueryProcAddr( hSSL, 0,
  1943.                                   "SSL_clear",
  1944.                                   (PFN*) &p_SSL_clear) )
  1945.         {
  1946.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1947.                    "SSL_clear",rc);
  1948.         }
  1949.         if (rc = DosQueryProcAddr( hSSL, 0,
  1950.                                   "SSL_set_accept_state",
  1951.                                   (PFN*) &p_SSL_set_accept_state) )
  1952.         {
  1953.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1954.                    "SSL_set_accept_state",rc);
  1955.         }
  1956.         if (rc = DosQueryProcAddr( hSSL, 0,
  1957.                                   "SSL_CIPHER_description",
  1958.                                   (PFN*) &p_SSL_CIPHER_description) )
  1959.         {
  1960.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1961.                    "SSL_CIPHER_description",rc);
  1962.         }
  1963.         if (rc = DosQueryProcAddr( hSSL, 0,
  1964.                                   "SSL_COMP_add_compression_method",
  1965.                                   (PFN*) &p_SSL_COMP_add_compression_method) )
  1966.         {
  1967.             debug(F111,"OpenSSL SSL GetProcAddress failed",
  1968.                    "SSL_COMP_add_compression_method",rc);
  1969.         }
  1970.  
  1971.         if ( load_error ) {
  1972.             ck_ssl_loaddll_eh();
  1973.             return 0;
  1974.         }
  1975.     }
  1976. #endif /* NT */
  1977.  
  1978.     ssl_dll_loaded = 1;
  1979.     if ( deblog ) {
  1980.         printf("OpenSSL DLLs Loaded\n");
  1981.         debug(F100,"OpenSSL DLLs Loaded","",0);
  1982.     }
  1983.  
  1984.     if ( p_SSL_get_finished &&
  1985.          p_SSL_get_peer_finished) {
  1986.         ssl_finished_messages = 1;
  1987.         if ( deblog ) {
  1988.             printf("OpenSSL Finished Messages available\n");
  1989.             debug(F100,"OpenSSL Finished Messages available","",0);
  1990.         }
  1991.     }
  1992.  
  1993.     /* Attempt to load a X509_to_user() function */
  1994. #ifdef NT
  1995.     hX5092UID = LoadLibrary("X5092UID");
  1996.     if ( hX5092UID ) {
  1997.         if (((FARPROC) p_X509_to_user =
  1998.               GetProcAddress( hX5092UID, "X509_to_user" )) == NULL )
  1999.         {
  2000.             rc = GetLastError() ;
  2001.             debug(F111,"X5092UID GetProcAddress failed","X509_to_user",rc);
  2002.         }
  2003.         if (((FARPROC) p_X509_userok =
  2004.               GetProcAddress( hX5092UID, "X509_userok" )) == NULL )
  2005.         {
  2006.             rc = GetLastError() ;
  2007.             debug(F111,"X5092UID GetProcAddress failed","X509_userok",rc);
  2008.         }
  2009.     }
  2010. #else /* NT */
  2011.     dllname = "X5092UID";
  2012.     sprintf(path, "%.*s%s.DLL", (int)get_dir_len(exe_path), exe_path,dllname);
  2013.     rc = DosLoadModule(errbuf, 256, path, &hX5092UID);
  2014.     if (rc) {
  2015.         debug(F111, "X5092UID LoadLibrary failed",path,rc) ;
  2016.         rc = DosLoadModule(errbuf, 256, dllname, &hX5092UID);
  2017.     }
  2018.     if ( !rc ) {
  2019.         if (rc = DosQueryProcAddr( hX5092UID, 0, "X509_to_user",
  2020.                                   (PFN*) &p_X509_to_user))
  2021.         {
  2022.             debug(F111,"X5092UID GetProcAddress failed",
  2023.                   "X509_to_user",rc);
  2024.         }
  2025.         if (rc = DosQueryProcAddr( hX5092UID, 0, "X509_userok",
  2026.                                   (PFN*) &p_X509_userok))
  2027.         {
  2028.             debug(F111,"X5092UID GetProcAddress failed",
  2029.                   "X509_userok",rc);
  2030.         }
  2031.     }
  2032. #endif /* NT */
  2033.     return(1);
  2034. }
  2035.  
  2036. int
  2037. ck_ssl_unloaddll( void )
  2038. {
  2039.     if ( !ssl_dll_loaded )
  2040.         return(1);
  2041.  
  2042.     /* unload dlls */
  2043.     ck_ssl_loaddll_eh();
  2044.  
  2045.     /* success */
  2046.     ssl_dll_loaded = 0;
  2047.     ssl_finished_messages = 0;
  2048.     return(1);
  2049. }
  2050. #endif /* SSLDLL */
  2051. #endif /* CK_SSL */
  2052. #endif /* OS2 */
  2053.