int init_curl(curl_context *cc, long flags) { long cflags = CURL_GLOBAL_DEFAULT; if (cc->use_ssl) { if (CRYPTO_thread_setup()) { dbg_info(ERROR, "Couldn't setup SSL threads\n"); return -1; } } if (flags) { cflags = flags; } if (cc->curl_persist) { cc->curl = curl_easy_init(); if (!cc->curl) { dbg_info(ERROR, "Could not intialize CURL\n"); return -1; } if (cc->use_ssl) { __init_curl_ssl(cc->curl, 0); __set_curl_ssl_certificates(cc->curl, cc->cacerts, cc->certfile, cc->keypass, cc->keyfile); } } if (cc->use_cookies) { if (!cc->cookiejar) { cc->cookiejar = tmpnam(NULL); } } return 0; }
int main() { struct soap soap; double a, b, result; /* Init SSL */ soap_ssl_init(); if (CRYPTO_thread_setup()) { fprintf(stderr, "Cannot setup thread mutex for OpenSSL\n"); exit(1); } a = 10.0; b = 20.0; /* Init gSOAP context */ soap_init(&soap); /* The supplied server certificate "server.pem" assumes that the server is running on 'localhost', so clients can only connect from the same host when verifying the server's certificate. Use SOAP_SSL_NO_AUTHENTICATION to omit the authentication of the server and use encryption directly from any site. To verify the certificates of third-party services, they must provide a certificate issued by Verisign or another trusted CA. At the client-side, the capath parameter should point to a directory that contains these trusted (root) certificates or the cafile parameter should refer to one file will all certificates. To help you out, the supplied "cacerts.pem" file contains the certificates issued by various CAs. You should use this file for the cafile parameter instead of "cacert.pem" to connect to trusted servers. Note that the client may fail to connect if the server's credentials have problems (e.g. expired). Use SOAP_SSL_NO_AUTHENTICATION and set cacert to NULL to encrypt messages if you don't care about the trustworthyness of the server. Note: setting capath may not work on Windows. */ if (soap_ssl_client_context(&soap, /* SOAP_SSL_NO_AUTHENTICATION, */ /* for encryption w/o authentication */ /* SOAP_SSL_DEFAULT | SOAP_SSL_SKIP_HOST_CHECK, */ /* if we don't want the host name checks since these will change from machine to machine */ SOAP_SSL_DEFAULT, /* use SOAP_SSL_DEFAULT in production code */ NULL, /* keyfile (cert+key): required only when client must authenticate to server (see SSL docs to create this file) */ NULL, /* password to read the keyfile */ "cacert.pem", /* optional cacert file to store trusted certificates, use cacerts.pem for all public certificates issued by common CAs */ NULL, /* optional capath to directory with trusted certificates */ NULL /* if randfile!=NULL: use a file with random data to seed randomness */ )) { soap_print_fault(&soap, stderr); exit(1); } soap.connect_timeout = 60; /* try to connect for 1 minute */ soap.send_timeout = soap.recv_timeout = 30; /* if I/O stalls, then timeout after 30 seconds */ if (soap_call_ns__add(&soap, server, "", a, b, &result) == SOAP_OK) fprintf(stdout, "Result: %f + %f = %f\n", a, b, result); else soap_print_fault(&soap, stderr); soap_destroy(&soap); /* C++ */ soap_end(&soap); soap_done(&soap); CRYPTO_thread_cleanup(); return 0; }
int main(int argc, char **argv) { static const int count = 10; pthread_t thread[count]; soap_ssl_init(); if (CRYPTO_thread_setup()) { fprintf(stderr, "Cannot setup thread mutex for OpenSSL\n"); exit(1); } /*for (int i = 0; i < count; ++i) { pthread_create(&thread[i], NULL, thread_func, NULL); }*/ pthread_create(&thread[0], NULL, thread_func, NULL); pthread_create(&thread[1], NULL, thread_func_1, NULL); pthread_create(&thread[2], NULL, thread_func_2, NULL); pthread_create(&thread[3], NULL, thread_func_3, NULL); pthread_create(&thread[4], NULL, thread_func_4, NULL); pthread_create(&thread[5], NULL, thread_func_5, NULL); pthread_create(&thread[6], NULL, thread_func_6, NULL); pthread_create(&thread[7], NULL, thread_func_7, NULL); pthread_create(&thread[8], NULL, thread_func_8, NULL); pthread_create(&thread[9], NULL, thread_func_9, NULL); while (1) { sleep(1); } CRYPTO_thread_cleanup(); return 0; }
LUALIB_API int luaopen_openssl(lua_State*L) { static int init = 0; if (init == 0) { #if defined(OPENSSL_THREADS) CRYPTO_thread_setup(); #endif OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); SSL_library_init(); ERR_load_ERR_strings(); ERR_load_EVP_strings(); ERR_load_crypto_strings(); ENGINE_load_dynamic(); ENGINE_load_openssl(); #ifdef LOAD_ENGINE_CUSTOM LOAD_ENGINE_CUSTOM(); #endif #ifdef OPENSSL_SYS_WINDOWS RAND_screen(); #endif init = 1; } lua_newtable(L); luaL_setfuncs(L, eay_functions, 0); openssl_register_lhash(L); openssl_register_engine(L); luaopen_bio(L); lua_setfield(L, -2, "bio"); luaopen_asn1(L); lua_setfield(L, -2, "asn1"); luaopen_digest(L); lua_setfield(L, -2, "digest"); luaopen_cipher(L); lua_setfield(L, -2, "cipher"); luaopen_hmac(L); lua_setfield(L, -2, "hmac"); luaopen_pkey(L); lua_setfield(L, -2, "pkey"); #ifdef EVP_PKEY_EC luaopen_ec(L); lua_setfield(L, -2, "ec"); #endif luaopen_x509(L); lua_setfield(L, -2, "x509"); luaopen_pkcs7(L); lua_setfield(L, -2, "pkcs7"); luaopen_pkcs12(L); lua_setfield(L, -2, "pkcs12"); luaopen_ocsp(L); lua_setfield(L, -2, "ocsp"); #ifdef OPENSSL_HAVE_TS /* timestamp handling */ luaopen_ts(L); lua_setfield(L, -2, "ts"); #endif luaopen_cms(L); lua_setfield(L, -2, "cms"); luaopen_ssl(L); lua_setfield(L, -2, "ssl"); /* third part */ luaopen_bn(L); lua_setfield(L, -2, "bn"); luaopen_rsa(L); lua_setfield(L, -2, "rsa"); luaopen_dsa(L); lua_setfield(L, -2, "dsa"); luaopen_dh(L); lua_setfield(L, -2, "dh"); #ifdef ENABLE_OPENSSL_GLOBAL lua_pushvalue(L, -1); lua_setglobal(L, "openssl"); #endif return 1; }
LUA_API int luaopen_openssl(lua_State*L) { char * config_filename; #ifdef ENABLE_CRYPTO_THREAD CRYPTO_thread_setup(); CRYPTO_lock(CRYPTO_LOCK,CRYPTO_LOCK_ERR,__FILE__,__LINE__); #endif if(g_init==0) { g_init = 1; OpenSSL_add_all_ciphers(); OpenSSL_add_all_digests(); SSL_library_init(); ERR_load_ERR_strings(); ERR_load_crypto_strings(); ERR_load_EVP_strings(); ERR_load_SSL_strings(); ENGINE_load_dynamic(); ENGINE_load_openssl(); } #ifdef ENABLE_CRYPTO_THREAD CRYPTO_lock(CRYPTO_UNLOCK,CRYPTO_LOCK_ERR,__FILE__,__LINE__); #endif /* Determine default SSL configuration file */ config_filename = getenv("OPENSSL_CONF"); if (config_filename == NULL) { config_filename = getenv("SSLEAY_CONF"); } /* default to 'openssl.cnf' if no environment variable is set */ if (config_filename == NULL) { snprintf(default_ssl_conf_filename, sizeof(default_ssl_conf_filename), "%s/%s", X509_get_default_cert_area(), "openssl.cnf"); } else { strncpy(default_ssl_conf_filename, config_filename, sizeof(default_ssl_conf_filename)); } openssl_register_pkey(L); openssl_register_x509(L); openssl_register_csr(L); openssl_register_digest(L); openssl_register_cipher(L); openssl_register_sk_x509(L); openssl_register_bio(L); openssl_register_crl(L); #ifdef OPENSSL_HAVE_TS openssl_register_ts(L); #endif openssl_register_conf(L); openssl_register_pkcs7(L); openssl_register_misc(L); openssl_register_engine(L); openssl_register_ssl(L); openssl_register_ocsp(L); #if LUA_VERSION_NUM==501 luaL_register(L,"openssl",eay_functions); #elif LUA_VERSION_NUM==502 lua_newtable(L); luaL_setfuncs(L, eay_functions, 0); #endif setNamedIntegers(L, consts); /* third part */ luaopen_bn(L); lua_setfield(L, -2, "bn"); return 1; }
int main(int argc, char *argv[]) { SOAP_SOCKET m; #if defined(_POSIX_THREADS) || defined(_SC_THREADS) pthread_t tid; pthread_mutex_init(&global_flag, NULL); pthread_mutex_init(&libssh2_flag, NULL); pthread_cond_init(&termination_flag, NULL); #endif struct soap soap, *tsoap = NULL; psoap = &soap; int ch, msglevel = LOG_INFO; static char *USAGE = "\nUSAGE:\noph_server [-d] [-l <log_file>] [-p <port>] [-v] [-w]\n"; fprintf(stdout, "%s", OPH_VERSION); fprintf(stdout, "%s", OPH_DISCLAIMER); set_debug_level(msglevel + 10); while ((ch = getopt(argc, argv, "dhl:p:vwxz")) != -1) { switch (ch) { case 'd': msglevel = LOG_DEBUG; break; case 'h': fprintf(stdout, "%s", USAGE); return 0; case 'l': oph_log_file_name = optarg; break; case 'p': oph_server_port = optarg; break; case 'v': return 0; break; case 'w': if (msglevel < LOG_WARNING) msglevel = LOG_WARNING; break; case 'x': fprintf(stdout, "%s", OPH_WARRANTY); return 0; case 'z': fprintf(stdout, "%s", OPH_CONDITIONS); return 0; default: fprintf(stdout, "%s", USAGE); return 0; } } set_debug_level(msglevel + 10); pmesg(LOG_INFO, __FILE__, __LINE__, "Selected log level %d\n", msglevel); #ifdef OPH_SERVER_LOCATION oph_server_location = strdup(OPH_SERVER_LOCATION); #else oph_server_location = getenv(OPH_SERVER_LOCATION_STR); if (!oph_server_location) { fprintf(stderr, "OPH_SERVER_LOCATION has to be set\n"); return 1; } #endif pmesg(LOG_DEBUG, __FILE__, __LINE__, "Server location '%s'\n", oph_server_location); char configuration_file[OPH_MAX_STRING_SIZE]; snprintf(configuration_file, OPH_MAX_STRING_SIZE, OPH_CONFIGURATION_FILE, oph_server_location); set_global_values(configuration_file); if (oph_log_file_name) { if (logfile) fclose(logfile); if (!(logfile = fopen(oph_log_file_name, "a"))) { fprintf(stderr, "Wrong log file name '%s'\n", oph_log_file_name); return 1; } pmesg(LOG_INFO, __FILE__, __LINE__, "Selected log file '%s'\n", oph_log_file_name); if (logfile) set_log_file(logfile); } else oph_log_file_name = hashtbl_get(oph_server_params, OPH_SERVER_CONF_LOGFILE); int int_port = strtol(oph_server_port, NULL, 10); if (oph_handle_signals()) { pmesg(LOG_ERROR, __FILE__, __LINE__, "A problem occurred while setting up signal dispositions\n"); exit(1); } if (mysql_library_init(0, 0, 0)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Cannot setup MySQL\n"); exit(1); } oph_tp_start_xml_parser(); if (CRYPTO_thread_setup()) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Cannot setup thread mutex for OpenSSL\n"); exit(1); } soap_init(&soap); soap.fget = oph_http_get; if (soap_register_plugin(&soap, oph_plugin)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Cannot register %s plugin\n", OPH_PLUGIN_ID); soap_print_fault(&soap, stderr); cleanup(); exit(-1); } // Register serverid struct oph_plugin_data *state = NULL; if (!(state = (struct oph_plugin_data *) soap_lookup_plugin(&soap, OPH_PLUGIN_ID))) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Error on lookup plugin struct\n"); soap_print_fault(&soap, stderr); cleanup(); exit(-1); } state->serverid = strdup(oph_web_server); #ifdef WITH_OPENSSL /* init gsoap context and SSL */ if (soap_ssl_server_context(&soap, SOAP_TLSv1_2, oph_server_cert, oph_server_password, oph_server_ca, NULL, NULL, NULL, NULL)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "SSL Server Context Error\n"); soap_print_fault(&soap, stderr); cleanup(); exit(1); } #endif soap.accept_timeout = oph_server_inactivity_timeout; soap.send_timeout = soap.recv_timeout = oph_server_timeout; soap.bind_flags |= SO_REUSEADDR; m = soap_bind(&soap, NULL, int_port, 100); if (!soap_valid_socket(m)) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Soap invalid socket\n"); soap_print_fault(&soap, stderr); cleanup(); exit(1); } pmesg(LOG_DEBUG, __FILE__, __LINE__, "Bind successful: socket = %d\n", m); for (;;) { SOAP_SOCKET s = soap_accept(&soap); if (!soap_valid_socket(s)) { if (soap.errnum) { pmesg(LOG_ERROR, __FILE__, __LINE__, "Soap invalid socket\n"); soap_print_fault(&soap, stderr); } else pmesg(LOG_ERROR, __FILE__, __LINE__, "Server timed out (timeout set to %d seconds)\n", soap.accept_timeout); break; } tsoap = soap_copy(&soap); if (!tsoap) { soap_closesock(&soap); continue; } #if defined(_POSIX_THREADS) || defined(_SC_THREADS) pthread_create(&tid, NULL, (void *(*)(void *)) &process_request, tsoap); #else process_request(tsoap); #endif } cleanup(); return 0; }