summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c')
-rw-r--r--debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c171
1 files changed, 171 insertions, 0 deletions
diff --git a/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c b/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c
new file mode 100644
index 0000000..c9bc762
--- /dev/null
+++ b/debian/perl-framework/c-modules/test_ssl/mod_test_ssl.c
@@ -0,0 +1,171 @@
+#define HTTPD_TEST_REQUIRE_APACHE 2
+
+#if CONFIG_FOR_HTTPD_TEST
+
+<IfModule @ssl_module@>
+ <Location /test_ssl_var_lookup>
+ SetHandler test-ssl-var-lookup
+ SSLVerifyClient require
+ SSLVerifyDepth 10
+ </Location>
+
+ <Location /test_ssl_ext_lookup>
+ SetHandler test-ssl-ext-lookup
+ SSLVerifyClient require
+ SSLVerifyDepth 10
+ </Location>
+</IfModule>
+
+#endif
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_protocol.h"
+#include "http_log.h"
+#include "ap_config.h"
+#include "apr_optional.h"
+
+#if AP_MODULE_MAGIC_AT_LEAST(20040425, 0) /* simply include mod_ssl.h if using >= 2.1.0 */
+
+#include "mod_ssl.h"
+
+#if MODULE_MAGIC_COOKIE > 0x41503234UL || \
+ (MODULE_MAGIC_COOKIE == 0x41503234UL \
+ && AP_MODULE_MAGIC_AT_LEAST(20050919, 0)) /* ssl_ext_list() only in 2.4.x */
+#define HAVE_SSL_EXT_LIST
+static APR_OPTIONAL_FN_TYPE(ssl_ext_list) *ext_list;
+#elif AP_MODULE_MAGIC_AT_LEAST(20050127, 0) /* approx. when ssl_ext_lookup was added */
+#define HAVE_SSL_EXT_LOOKUP
+static APR_OPTIONAL_FN_TYPE(ssl_ext_lookup) *ext_lookup;
+#endif
+
+#else
+/* For use of < 2.0.x, inline the declaration: */
+
+APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup,
+ (apr_pool_t *, server_rec *,
+ conn_rec *, request_rec *,
+ char *));
+
+#endif
+
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *var_lookup;
+
+static void import_ssl_var_lookup(void)
+{
+ var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
+#ifdef HAVE_SSL_EXT_LOOKUP
+ ext_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_ext_lookup);
+#endif
+#ifdef HAVE_SSL_EXT_LIST
+ ext_list = APR_RETRIEVE_OPTIONAL_FN(ssl_ext_list);
+#endif
+}
+
+#if defined(HAVE_SSL_EXT_LOOKUP) || defined(HAVE_SSL_EXT_LIST)
+static int test_ssl_ext_lookup(request_rec *r)
+{
+ const char *value;
+
+ if (strcmp(r->handler, "test-ssl-ext-lookup")
+ || r->method_number != M_GET) {
+ return DECLINED;
+ }
+
+ if (!r->args) {
+ ap_rputs("no query", r);
+ return OK;
+ }
+
+#ifdef HAVE_SSL_EXT_LOOKUP
+ if (!ext_lookup) {
+ ap_rputs("ssl_ext_lookup not available", r);
+ return OK;
+ }
+
+ value = ext_lookup(r->pool, r->connection, 1, r->args);
+#else
+ if (!ext_list) {
+ ap_rputs("ssl_ext_list not available", r);
+ return OK;
+ }
+
+ {
+ apr_array_header_t *vals = ext_list(r->pool, r->connection, 1,
+ r->args);
+
+ if (vals) {
+ value = *(const char **)apr_array_pop(vals);
+ }
+ else {
+ value = NULL;
+ }
+ }
+#endif
+
+ if (!value) value = "NULL";
+
+ ap_rputs(value, r);
+
+ return OK;
+}
+
+#endif
+
+static int test_ssl_var_lookup(request_rec *r)
+{
+ const char *value;
+
+ if (strcmp(r->handler, "test-ssl-var-lookup")) {
+ return DECLINED;
+ }
+
+ if (r->method_number != M_GET) {
+ return DECLINED;
+ }
+
+ if (!r->args) {
+ ap_rputs("no query", r);
+ return OK;
+ }
+
+ apr_table_setn(r->subprocess_env, "THE_ARGS", r->args);
+
+ if (!var_lookup) {
+ ap_rputs("ssl_var_lookup is not available", r);
+ return OK;
+ }
+
+ value = var_lookup(r->pool, r->server,
+ r->connection, r, r->args);
+
+ if (value && *value) {
+ ap_rputs(value, r);
+ }
+ else {
+ ap_rputs("NULL", r);
+ }
+
+ return OK;
+}
+
+static void test_ssl_register_hooks(apr_pool_t *p)
+{
+ ap_hook_handler(test_ssl_var_lookup, NULL, NULL, APR_HOOK_MIDDLE);
+#if defined(HAVE_SSL_EXT_LOOKUP) || defined(HAVE_SSL_EXT_LIST)
+ ap_hook_handler(test_ssl_ext_lookup, NULL, NULL, APR_HOOK_MIDDLE);
+#endif
+ ap_hook_optional_fn_retrieve(import_ssl_var_lookup,
+ NULL, NULL, APR_HOOK_MIDDLE);
+}
+
+module AP_MODULE_DECLARE_DATA test_ssl_module = {
+ STANDARD20_MODULE_STUFF,
+ NULL, /* create per-dir config structures */
+ NULL, /* merge per-dir config structures */
+ NULL, /* create per-server config structures */
+ NULL, /* merge per-server config structures */
+ NULL, /* table of config file commands */
+ test_ssl_register_hooks /* register hooks */
+};
+