current cgi.c, 1.166, 1.167 cgisimple.c, 1.143, 1.144 cgisimple.h, 1.21, 1.22
Fabian Keil <[email protected]> Mon, 23 Jan 2017 13:05:01 +0000
| Newsgroups | gmane.comp.web.privoxy.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/ijbswa/current
In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv16094
Modified Files:
cgi.c cgisimple.c cgisimple.h
Log Message:
Use a dedicated cgi handler to deal with tag-toggle requests
As a result the /client-tags page is now safe to reach without
trusted Referer header which makes bookmarking or linking to
it more convenient.
Finally, refreshing the /client-tags page to show the
current state can no longer unintentionally repeat the
previous toggle request.
Index: cgi.c
===================================================================
RCS file: /cvsroot/ijbswa/current/cgi.c,v
retrieving revision 1.166
retrieving revision 1.167
diff -C2 -d -r1.166 -r1.167
*** cgi.c 23 Jan 2017 13:02:45 -0000 1.166
--- cgi.c 23 Jan 2017 13:04:57 -0000 1.167
***************
*** 102,109 ****
TRUE },
#ifdef FEATURE_CLIENT_TAGS
{ "client-tags",
cgi_show_client_tags,
"View or toggle the tags that can be set based on the clients address",
! FALSE },
#endif
{ "show-request",
--- 102,114 ----
TRUE },
#ifdef FEATURE_CLIENT_TAGS
+ /*
+ * This is marked as harmless because despite the description
+ * used in the menu the actual toggling is done through another
+ * path ("/toggle-client-tag").
+ */
{ "client-tags",
cgi_show_client_tags,
"View or toggle the tags that can be set based on the clients address",
! TRUE },
#endif
{ "show-request",
***************
*** 121,124 ****
--- 126,135 ----
FALSE },
#endif /* def FEATURE_TOGGLE */
+ #ifdef FEATURE_CLIENT_TAGS
+ { "toggle-client-tag",
+ cgi_toggle_client_tag,
+ NULL,
+ FALSE },
+ #endif
#ifdef FEATURE_CGI_EDIT_ACTIONS
{ "edit-actions", /* Edit the actions list */
Index: cgisimple.h
===================================================================
RCS file: /cvsroot/ijbswa/current/cgisimple.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** cgisimple.h 23 Jan 2017 13:02:45 -0000 1.21
--- cgisimple.h 23 Jan 2017 13:04:58 -0000 1.22
***************
*** 73,76 ****
--- 73,79 ----
struct http_response *rsp,
const struct map *parameters);
+ extern jb_err cgi_toggle_client_tag(struct client_state *csp,
+ struct http_response *rsp,
+ const struct map *parameters);
#endif
extern jb_err cgi_transparent_image (struct client_state *csp,
Index: cgisimple.c
===================================================================
RCS file: /cvsroot/ijbswa/current/cgisimple.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -C2 -d -r1.143 -r1.144
*** cgisimple.c 27 Sep 2016 22:48:28 -0000 1.143
--- cgisimple.c 23 Jan 2017 13:04:57 -0000 1.144
***************
*** 311,315 ****
snprintf(form, size,
! "<form method=\"GET\" action=\"client-tags\" style=\"display: inline\">\n"
" <input type=\"hidden\" name=\"tag\" value=\"%s\">\n"
" <input type=\"hidden\" name=\"toggle-state\" value=\"%u\">\n"
--- 311,315 ----
snprintf(form, size,
! "<form method=\"GET\" action=\"toggle-client-tag\" style=\"display: inline\">\n"
" <input type=\"hidden\" name=\"tag\" value=\"%s\">\n"
" <input type=\"hidden\" name=\"toggle-state\" value=\"%u\">\n"
***************
*** 344,351 ****
struct client_tag_spec *this_tag;
jb_err err = JB_ERR_OK;
- const char *toggled_tag;
- const char *toggle_state;
- const char *tag_expires;
- time_t time_to_live;
char *client_tag_status;
char buf[1000];
--- 344,347 ----
***************
*** 360,385 ****
}
assert(csp->client_address != NULL);
! toggled_tag = lookup(parameters, "tag");
! if (*toggled_tag != '\0')
! {
! tag_expires = lookup(parameters, "expires");
! if (*tag_expires == '0')
! {
! time_to_live = 0;
! }
! else
! {
! time_to_live = csp->config->client_tag_lifetime;
! }
! toggle_state = lookup(parameters, "toggle-state");
! if (*toggle_state == '1')
! {
! enable_client_specific_tag(csp, toggled_tag, time_to_live);
! }
! else
! {
! disable_client_specific_tag(csp, toggled_tag);
! }
! }
this_tag = csp->config->client_tags;
if (this_tag->name == NULL)
--- 356,360 ----
}
assert(csp->client_address != NULL);
!
this_tag = csp->config->client_tags;
if (this_tag->name == NULL)
***************
*** 438,441 ****
--- 413,488 ----
return template_fill_for_cgi(csp, "client-tags", exports, rsp);
}
+
+
+ /*********************************************************************
+ *
+ * Function : cgi_toggle_client_tag
+ *
+ * Description : Toggles a client tag and redirects to the show-tags
+ * page
+ *
+ * Parameters :
+ * 1 : csp = Current client state (buffers, headers, etc...)
+ * 2 : rsp = http_response data structure for output
+ * 3 : parameters = map of cgi parameters
+ *
+ * CGI Parameters : none
+ * 1 : tag = Name of the tag to enable or disable
+ * 2 : toggle-state = How to toggle the tag (0/1)
+ * 3 : expires = Set to 1 if the tag should be enabled
+ * temporarily, otherwise set to 0
+ *
+ * Returns : JB_ERR_OK on success
+ * JB_ERR_MEMORY on out-of-memory error.
+ *
+ *********************************************************************/
+ jb_err cgi_toggle_client_tag(struct client_state *csp,
+ struct http_response *rsp,
+ const struct map *parameters)
+ {
+ const char *toggled_tag;
+ const char *toggle_state;
+ const char *tag_expires;
+ time_t time_to_live;
+
+ assert(csp);
+ assert(rsp);
+ assert(parameters);
+
+ toggled_tag = lookup(parameters, "tag");
+ if (*toggled_tag == '\0')
+ {
+ log_error(LOG_LEVEL_ERROR, "Received tag toggle request without tag");
+ }
+ else
+ {
+ tag_expires = lookup(parameters, "expires");
+ if (*tag_expires == '0')
+ {
+ time_to_live = 0;
+ }
+ else
+ {
+ time_to_live = csp->config->client_tag_lifetime;
+ }
+ toggle_state = lookup(parameters, "toggle-state");
+ if (*toggle_state == '1')
+ {
+ enable_client_specific_tag(csp, toggled_tag, time_to_live);
+ }
+ else
+ {
+ disable_client_specific_tag(csp, toggled_tag);
+ }
+ }
+ rsp->status = strdup_or_die("302 Done dealing with toggle request");
+ if (enlist_unique_header(rsp->headers,
+ "Location", CGI_PREFIX "client-tags"))
+ {
+ return JB_ERR_MEMORY;
+ }
+ return JB_ERR_OK;
+
+ }
#endif /* def FEATURE_CLIENT_TAGS */
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot