]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_ssl_openssl.cpp
Change Windows libraries to be dynamically linked
[user/henk/code/inspircd.git] / src / modules / extra / m_ssl_openssl.cpp
index 7b7de023cdfd4f983051d48ebedef05175323ddb..60c90988a7aed04b4d87e67795f1d6e341b2f6dc 100644 (file)
 #include "ssl.h"
 
 #ifdef _WIN32
-# pragma comment(lib, "libcrypto.lib")
-# pragma comment(lib, "libssl.lib")
-# pragma comment(lib, "user32.lib")
-# pragma comment(lib, "advapi32.lib")
-# pragma comment(lib, "libgcc.lib")
-# pragma comment(lib, "libmingwex.lib")
-# pragma comment(lib, "gdi32.lib")
+# pragma comment(lib, "ssleay32.lib")
+# pragma comment(lib, "libeay32.lib")
 # undef MAX_DESCRIPTORS
 # define MAX_DESCRIPTORS 10000
 #endif
@@ -132,6 +127,9 @@ class ModuleSSLOpenSSL : public Module
 
                SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, OnVerify);
                SSL_CTX_set_verify(clictx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, OnVerify);
+
+               const unsigned char session_id[] = "inspircd";
+               SSL_CTX_set_session_id_context(ctx, session_id, sizeof(session_id) - 1);
        }
 
        void init()
@@ -246,7 +244,11 @@ class ModuleSSLOpenSSL : public Module
                        ERR_print_errors_cb(error_callback, this);
                }
 
+#ifdef _WIN32
+               BIO* dhpfile = BIO_new_file(dhfile.c_str(), "r");
+#else
                FILE* dhpfile = fopen(dhfile.c_str(), "r");
+#endif
                DH* ret;
 
                if (dhpfile == NULL)
@@ -256,15 +258,23 @@ class ModuleSSLOpenSSL : public Module
                }
                else
                {
+#ifdef _WIN32
+                       ret = PEM_read_bio_DHparams(dhpfile, NULL, NULL, NULL);
+                       BIO_free(dhpfile);
+#else
                        ret = PEM_read_DHparams(dhpfile, NULL, NULL, NULL);
+#endif
                        if ((SSL_CTX_set_tmp_dh(ctx, ret) < 0) || (SSL_CTX_set_tmp_dh(clictx, ret) < 0))
                        {
                                ServerInstance->Logs->Log("m_ssl_openssl",DEFAULT, "m_ssl_openssl.so: Couldn't set DH parameters %s. SSL errors follow:", dhfile.c_str());
                                ERR_print_errors_cb(error_callback, this);
                        }
+                       DH_free(ret);
                }
 
+#ifndef _WIN32
                fclose(dhpfile);
+#endif
        }
 
        void On005Numeric(std::string &output)
@@ -626,8 +636,11 @@ class ModuleSSLOpenSSL : public Module
                        certinfo->trusted = false;
                }
 
-               certinfo->dn = X509_NAME_oneline(X509_get_subject_name(cert),0,0);
-               certinfo->issuer = X509_NAME_oneline(X509_get_issuer_name(cert),0,0);
+               char buf[512];
+               X509_NAME_oneline(X509_get_subject_name(cert), buf, sizeof(buf));
+               certinfo->dn = buf;
+               X509_NAME_oneline(X509_get_issuer_name(cert), buf, sizeof(buf));
+               certinfo->issuer = buf;
 
                if (!X509_digest(cert, digest, md, &n))
                {