X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgi.c;h=8a4eea0c782785115a830add7b4e4b274dec3598;hp=0f15627ced97295ddd36f085720f65f76430bc61;hb=f28fa19343efda8eac8324ef63273c106038316c;hpb=805528ae92955775fec0292126cee05a21241b0c diff --git a/cgi.c b/cgi.c index 0f15627c..8a4eea0c 100644 --- a/cgi.c +++ b/cgi.c @@ -1,4 +1,4 @@ -const char cgi_rcs[] = "$Id: cgi.c,v 1.167 2017/01/23 13:04:57 fabiankeil Exp $"; +const char cgi_rcs[] = "$Id: cgi.c,v 1.173 2017/03/08 13:16:26 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgi.c,v $ @@ -98,7 +98,7 @@ static const struct cgi_dispatcher cgi_dispatchers[] = { TRUE }, { "show-version", cgi_show_version, - "View the source code version numbers", + NULL, /* Not considered important enough to include in the menu */ TRUE }, #ifdef FEATURE_CLIENT_TAGS /* @@ -441,6 +441,7 @@ static int referrer_is_safe(const struct client_state *csp) { char *referrer; static const char alternative_prefix[] = "http://" CGI_SITE_1_HOST "/"; + const char *trusted_cgi_referrer = csp->config->trusted_cgi_referrer; referrer = grep_cgi_referrer(csp); @@ -459,6 +460,18 @@ static int referrer_is_safe(const struct client_state *csp) return TRUE; } + else if ((trusted_cgi_referrer != NULL) && (0 == strncmp(referrer, + trusted_cgi_referrer, strlen(trusted_cgi_referrer)))) + { + /* + * After some more testing this block should be merged with + * the previous one or the log level should bedowngraded. + */ + log_error(LOG_LEVEL_INFO, "Granting access to %s based on trusted referrer %s", + csp->http->url, referrer); + + return TRUE; + } else { /* Untrustworthy referrer */ @@ -1051,6 +1064,8 @@ jb_err cgi_error_disabled(const struct client_state *csp, assert(csp); assert(rsp); + rsp->status = strdup_or_die("403 Request not trusted or feature disabled"); + if (NULL == (exports = default_exports(csp, "cgi-error-disabled"))) { return JB_ERR_MEMORY; @@ -1387,7 +1402,7 @@ char *add_help_link(const char *item, } else { - string_append(&result, "https://"); + string_append(&result, "http://"); string_append(&result, CGI_SITE_2_HOST); string_append(&result, "/user-manual/"); } @@ -2111,15 +2126,12 @@ jb_err template_fill_for_cgi(const struct client_state *csp, err = template_load(csp, &rsp->body, templatename, 0); if (err == JB_ERR_FILE) { - free_map(exports); - return cgi_error_no_template(csp, rsp, templatename); + err = cgi_error_no_template(csp, rsp, templatename); } - else if (err) + else if (err == JB_ERR_OK) { - free_map(exports); - return err; /* JB_ERR_MEMORY */ + err = template_fill(&rsp->body, exports); } - err = template_fill(&rsp->body, exports); free_map(exports); return err; }