ap_add_version_component(p, ssl_var_lookup(p, s, NULL, NULL, "SSL_VERSION_INTERFACE"));
ap_add_version_component(p, ssl_var_lookup(p, s, NULL, NULL, "SSL_VERSION_LIBRARY"));
+ SSL_init_app_data2_idx(); /* for SSL_get_app_data2() at request time */
return;
}
** _________________________________________________________________
*/
-int SSL_get_app_data2_idx(void)
+/* we initialize this index at startup time
+ * and never write to it at request time,
+ * so this static is thread safe.
+ * also note that OpenSSL increments at static variable when
+ * SSL_get_ex_new_index() is called, so we _must_ do this at startup.
+ */
+static int SSL_app_data2_idx = -1;
+
+void SSL_init_app_data2_idx(void)
{
- static int app_data2_idx = -1;
-
- if (app_data2_idx < 0) {
- app_data2_idx = SSL_get_ex_new_index(0,
- "Second Application Data for SSL", NULL, NULL, NULL);
- app_data2_idx = SSL_get_ex_new_index(0,
- "Second Application Data for SSL", NULL, NULL, NULL);
- }
- return(app_data2_idx);
+ int i;
+
+ if (SSL_app_data2_idx > -1) {
+ return;
+ }
+
+ /* we _do_ need to call this twice */
+ for (i=0; i<=1; i++) {
+ SSL_app_data2_idx =
+ SSL_get_ex_new_index(0,
+ "Second Application Data for SSL",
+ NULL, NULL, NULL);
+ }
}
void *SSL_get_app_data2(SSL *ssl)
{
- return (void *)SSL_get_ex_data(ssl, SSL_get_app_data2_idx());
+ return (void *)SSL_get_ex_data(ssl, SSL_app_data2_idx);
}
void SSL_set_app_data2(SSL *ssl, void *arg)
{
- SSL_set_ex_data(ssl, SSL_get_app_data2_idx(), (char *)arg);
+ SSL_set_ex_data(ssl, SSL_app_data2_idx, (char *)arg);
return;
}
/*
* Additional Functions
*/
-int SSL_get_app_data2_idx(void);
+void SSL_init_app_data2_idx(void);
void *SSL_get_app_data2(SSL *);
void SSL_set_app_data2(SSL *, void *);
X509 *SSL_read_X509(char *, X509 **, int (*)(char*,int,int,void*));