From 40ad79c22655ddd6b9e2e9198bdee58dbf3e8587 Mon Sep 17 00:00:00 2001 From: oes Date: Thu, 4 Jul 2002 14:35:05 +0000 Subject: [PATCH] Added ability to send redirects to send-banner CGI, so that it can completely mimic the image blocking action if called with type=auto --- src/cgisimple.c | 94 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 26 deletions(-) diff --git a/src/cgisimple.c b/src/cgisimple.c index cebe5769..c1b50a81 100644 --- a/src/cgisimple.c +++ b/src/cgisimple.c @@ -1,7 +1,7 @@ -const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.35 2002/05/12 21:44:44 jongfoster Exp $"; +const char cgisimple_rcs[] = "$Id: cgisimple.c,v 2.0 2002/06/04 14:34:21 jongfoster Exp $"; /********************************************************************* * - * File : $Source: /cvsroot/ijbswa/current/cgisimple.c,v $ + * File : $Source: /cvsroot/ijbswa/current/src/cgisimple.c,v $ * * Purpose : Simple CGIs to get information about Privoxy's * status. @@ -36,6 +36,9 @@ const char cgisimple_rcs[] = "$Id: cgisimple.c,v 1.35 2002/05/12 21:44:44 jongfo * * Revisions : * $Log: cgisimple.c,v $ + * Revision 2.0 2002/06/04 14:34:21 jongfoster + * Moving source files to src/ + * * Revision 1.35 2002/05/12 21:44:44 jongfoster * Adding amiga.[ch] revision information, if on an amiga. * @@ -420,7 +423,8 @@ jb_err cgi_show_request(struct client_state *csp, * type : Selects the type of banner between "trans", "logo", * and "auto". Defaults to "logo" if absent or invalid. * "auto" means to select as if we were image-blocking. - * (Only the first character really counts). + * (Only the first character really counts; b and t are + * equivalent). * * Returns : JB_ERR_OK on success * JB_ERR_MEMORY on out-of-memory error. @@ -432,20 +436,24 @@ jb_err cgi_send_banner(struct client_state *csp, { char imagetype = lookup(parameters, "type")[0]; - if (imagetype == 'a') /* auto */ + /* + * If type is auto, then determine the right thing + * to do from the set-image-blocker action + */ + if (imagetype == 'a') { - /* Default to pattern */ + /* + * Default to pattern + */ imagetype = 'p'; + #ifdef FEATURE_IMAGE_BLOCKING if ((csp->action->flags & ACTION_IMAGE_BLOCKER) != 0) { static const char prefix1[] = CGI_PREFIX "send-banner?type="; static const char prefix2[] = "http://" CGI_SITE_1_HOST "/send-banner?type="; + const char *p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER]; - /* determine HOW images should be blocked */ - const char * p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER]; - - /* and handle accordingly: */ if (p == NULL) { /* Use default - nothing to do here. */ @@ -458,6 +466,11 @@ jb_err cgi_send_banner(struct client_state *csp, { imagetype = 'p'; } + + /* + * If the action is to call this CGI, determine + * the argument: + */ else if (0 == strncmpic(p, prefix1, sizeof(prefix1) - 1)) { imagetype = p[sizeof(prefix1) - 1]; @@ -466,34 +479,63 @@ jb_err cgi_send_banner(struct client_state *csp, { imagetype = p[sizeof(prefix2) - 1]; } + + /* + * Everything else must (should) be a URL to + * redirect to. + */ + else + { + imagetype = 'r'; + } } #endif /* def FEATURE_IMAGE_BLOCKING */ } - if ((imagetype == 'b') || (imagetype == 't')) /* blank / transparent */ + /* + * Now imagetype is either the non-auto type we were called with, + * or it was auto and has since been determined. In any case, we + * can proceed to actually answering the request by sending a redirect + * or an image as appropriate: + */ + if (imagetype == 'r') { - rsp->body = bindup(image_blank_data, image_blank_length); - rsp->content_length = image_blank_length; - + rsp->status = strdup("302 Local Redirect from Privoxy"); + if (rsp->status == NULL) + { + return JB_ERR_MEMORY; + } + if (enlist_unique_header(rsp->headers, "Location", + csp->action->string[ACTION_STRING_IMAGE_BLOCKER])) + { + return JB_ERR_MEMORY; + } } - else /* pattern */ + else { - rsp->body = bindup(image_pattern_data, image_pattern_length); - rsp->content_length = image_pattern_length; - } + if ((imagetype == 'b') || (imagetype == 't')) + { + rsp->body = bindup(image_blank_data, image_blank_length); + rsp->content_length = image_blank_length; + } + else + { + rsp->body = bindup(image_pattern_data, image_pattern_length); + rsp->content_length = image_pattern_length; + } - if (rsp->body == NULL) - { - return JB_ERR_MEMORY; - } + if (rsp->body == NULL) + { + return JB_ERR_MEMORY; + } + if (enlist(rsp->headers, "Content-Type: " BUILTIN_IMAGE_MIMETYPE)) + { + return JB_ERR_MEMORY; + } - if (enlist(rsp->headers, "Content-Type: " BUILTIN_IMAGE_MIMETYPE)) - { - return JB_ERR_MEMORY; + rsp->is_static = 1; } - rsp->is_static = 1; - return JB_ERR_OK; } -- 2.39.2