Hello again developers, I don't fully expect anyone to be able to answer this question. At this point, I am just looking for ideas to try.
I am still trying to get my module to make a POST request to an external server (I am using a subrequest that bounces off of mod_proxy to the external server). I have successfully created a subrequest using a "POST" method, but: (1) I can't seem to get the content of the POST (the post variables) written to the subrequest body; I have tried a 'ap_rprintf(...)', but it appears that the contents of this write becomes the beginning of the response content (2) Is the content of a subrequest expected to output directly to the (super/parent)request? int status code if(is_request_a_honeypot_token(r) && string_matches(r->method, "GET")) { int status_code = OK; request_rec* subr = NULL; char newurl[2048]; // apr_snprintf(newurl, sizeof(newurl), "proxy:%s://%s:%d/%s", "http", "192.168.3.104", 11000, "cgi/serve.php"); apr_snprintf(newurl, sizeof(newurl), "proxy:%s://%s:%d/%s", "http", "192.168.3.104", 18000, "raw.html"); #if IS_DEBUG_MODE == 1 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: Handling Honeypot Request"); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: New POST Request URI: %s", newurl); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: POST Request Parameters: %s", newparams); #endif if (ap_find_linked_module("mod_proxy.c") == NULL) { status = HTTP_INTERNAL_SERVER_ERROR; ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Access denied with code 500%s " "(Internal Error: proxy action to %s requested but mod_proxy not found).", newurl); return status; } else { #if IS_DEBUG_MODE == 1 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: mod_proxy module found successfully"); #endif // Make a subrequest to mod_proxy, POSTing to the Honeypot server and passing the resulting content as the content of the SuperRequest subr = (request_rec*)ap_sub_req_method_uri("POST", "*", r, NULL); // this MUST succeed! subr->assbackwards = 0; // build POST headers char postparams[8192]; apr_snprintf(postparams, sizeof(postparams), "k1=v1&k2=v2&k3=v3"); ap_set_content_type(subr, "application/x-www-form-urlencoded"); apr_table_set(subr->headers_in, "Content-Length", strlen(postparams)); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "query constructed: %s (%s)", newurl, postparams); ap_rprintf(subr, "%s", postparams); subr->filename = apr_pstrdup(r->pool, newurl); subr->proxyreq = PROXYREQ_REVERSE; subr->handler = "proxy-server"; status_code = ap_run_sub_req(subr); #if IS_DEBUG_MODE == 1 ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: Honeypot Response: status code(%d)", status_code); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: Honeypot Response: hostname - \"%s\"", subr->hostname); ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "HTTPBL: Honeypot Response: method - \"%s\"", subr->method); #endif if (status_code == 200) { // write from the subrequest results to the SuperRequest ap_set_content_type(r, "text/html"); int bytes_sent = ap_rprintf(r, "<html>\n\t<head>\n<title>MY FIRST HONEYPOT</title>\n\t</head>\n\t<body>\n\t\t<h1>My First Honeypot</h1>\n\t</body>\n</html>"); } ap_destroy_sub_req(subr); // done processing content status = OK; } }