-const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.58 2007/11/28 17:57:01 fabiankeil Exp $";
+const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.59 2008/03/08 16:25:56 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $
*
* Stick to the short names in this file for consistency.
*
- * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge
+ * Copyright : Written by and Copyright (C) 2001-2008 the SourceForge
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
*
* Revisions :
* $Log: cgiedit.c,v $
+ * Revision 1.59 2008/03/08 16:25:56 fabiankeil
+ * After three file modification time mismatches, turn the CGI editor off.
+ *
* Revision 1.58 2007/11/28 17:57:01 fabiankeil
* Fix double free in cgi_edit_actions_list().
* Reported by adlab in BR#1840145.
For example "content-filter-params" */
const char *type; /**< Name of the filter type,
for example "server-header-filter". */
+ /* XXX: check if these two can be combined. */
+ const char *disable_all_option; /**< Name of the catch-all radio option that has
+ to be checked or unchecked for this filter type. */
+ const char *disable_all_param; /**< Name of the parameter that causes all filters of
+ this type to be disabled. */
const char *abbr_type; /**< Abbreviation of the filter type, usually the
first or second character capitalized */
const char *anchor; /**< Anchor for the User Manual link,
{
ACTION_MULTI_FILTER,
"content-filter-params", "filter",
+ "filter-all", "filter_all",
"F", "FILTER"
},
{
ACTION_MULTI_CLIENT_HEADER_FILTER,
"client-header-filter-params", "client-header-filter",
+ "client-header-filter-all", "client_header_filter_all",
"C", "CLIENT-HEADER-FILTER"
},
{
ACTION_MULTI_SERVER_HEADER_FILTER,
"server-header-filter-params", "server-header-filter",
+ "server-header-filter-all", "server_header_filter_all",
"S", "SERVER-HEADER-FILTER"
},
{
ACTION_MULTI_CLIENT_HEADER_TAGGER,
"client-header-tagger-params", "client-header-tagger",
+ "client-header-tagger-all", "client_header_tagger_all",
"L", "CLIENT-HEADER-TAGGER"
},
{
ACTION_MULTI_SERVER_HEADER_TAGGER,
"server-header-tagger-params", "server-header-tagger",
+ "server-header-tagger-all", "server_header_tagger_all",
"E", "SERVER-HEADER-TAGGER"
},
};
}
}
- if (!err) err = map_radio(exports, "filter-all", "nx",
- (cur_line->data.action->multi_remove_all[ACTION_MULTI_FILTER] ? 'n' : 'x'));
+ /* Check or uncheck the "disable all of this type" radio buttons. */
+ for (i = 0; i < MAX_FILTER_TYPES; i++)
+ {
+ const int a = filter_type_info[i].multi_action_index;
+ const int disable_all = cur_line->data.action->multi_remove_all[a];
+ if (err) break;
+ err = map_radio(exports, filter_type_info[i].disable_all_option, "nx", (disable_all ? 'n' : 'x'));
+ }
edit_free_file(file);
char target[1024];
jb_err err;
int filter_identifier;
+ int i;
const char * action_set_name;
- char ch;
struct file_list * fl;
struct url_actions * b;
err = actions_from_radio(parameters, cur_line->data.action);
}
- if(err)
+ if (err)
{
/* Out of memory */
edit_free_file(file);
return err;
}
- ch = get_char_param(parameters, "filter_all");
- if (ch == 'N')
+ /* Check the "disable all of this type" parameters. */
+ for (i = 0; i < MAX_FILTER_TYPES; i++)
{
- list_remove_all(cur_line->data.action->multi_add[ACTION_MULTI_FILTER]);
- list_remove_all(cur_line->data.action->multi_remove[ACTION_MULTI_FILTER]);
- cur_line->data.action->multi_remove_all[ACTION_MULTI_FILTER] = 1;
- }
- else if (ch == 'X')
- {
- cur_line->data.action->multi_remove_all[ACTION_MULTI_FILTER] = 0;
+ const int multi_action_index = filter_type_info[i].multi_action_index;
+ const char ch = get_char_param(parameters, filter_type_info[i].disable_all_param);
+
+ if (ch == 'N')
+ {
+ list_remove_all(cur_line->data.action->multi_add[multi_action_index]);
+ list_remove_all(cur_line->data.action->multi_remove[multi_action_index]);
+ cur_line->data.action->multi_remove_all[multi_action_index] = 1;
+ }
+ else if (ch == 'X')
+ {
+ cur_line->data.action->multi_remove_all[multi_action_index] = 0;
+ }
}
for (filter_identifier = 0; !err; filter_identifier++)
#
# Revisions :
# $Log: edit-actions-for-url,v $
+# Revision 1.51 2008/03/07 16:46:49 fabiankeil
+# Reword limit-connect{} entry.
+#
# Revision 1.50 2008/03/04 18:30:44 fabiankeil
# Remove the treat-forbidden-connects-like-blocks action. We now
# use the "blocked" page for forbidden CONNECT requests by default.
<input type="text" name="block_mode" size="40" value="@block-param@">
</td>
</tr>
-
+ <tr class="bg1" align="left" valign="top">
+ <td class="en1"> </td>
+ <td class="dis1" align="center" valign="middle"><input type="radio"
+ name="client_header_filter_all" id="client_header_filter_all_n" value="N" @client-header-filter-all-n@ ></td>
+ <td class="noc1" align="center" valign="middle"><input type="radio"
+ name="client_header_filter_all" id="client_header_filter_all_x" value="X" @client-header-filter-all-x@ ></td>
+ <td class="action"><a href="@user-manual@@actions-help-prefix@CLIENT-HEADER-FILTER">client-header-filter</a> *</td>
+ <td>Filter the client headers.
+ You can use the radio buttons on this line to disable
+ all client-header filters applied by previous rules, and/or
+ you can enable or disable the filters individually below.</td>
+ </tr>
@client-header-filter-params@
+ <tr class="bg1" align="left" valign="top">
+ <td class="en1"> </td>
+ <td class="dis1" align="center" valign="middle"><input type="radio"
+ name="client_header_tagger_all" id="client_header_tagger_all_n" value="N" @client-header-tagger-all-n@ ></td>
+ <td class="noc1" align="center" valign="middle"><input type="radio"
+ name="client_header_tagger_all" id="client_header_tagger_all_x" value="X" @client-header-tagger-all-x@ ></td>
+ <td class="action"><a href="@user-manual@@actions-help-prefix@CLIENT-HEADER-TAGGER">client-header-tagger</a> *</td>
+ <td>Create tags based on the client headers.
+ You can use the radio buttons on this line to disable
+ all client-header taggers applied by previous rules, and/or
+ you can enable or disable the taggers individually below.</td>
+ </tr>
@client-header-tagger-params@
-
<tr class="bg1" align="left" valign="top">
<td class="en1" align="center" valign="middle"><input type="radio"
name="content_type_overwrite" value="Y" @content-type-overwrite-y@
it on if it was off, is not yet supported using this web-based
editor.</td>
</tr>
-
+ <tr class="bg1" align="left" valign="top">
+ <td class="en1"> </td>
+ <td class="dis1" align="center" valign="middle"><input type="radio"
+ name="server_header_filter_all" id="server_header_filter_all_n" value="N" @server-header-filter-all-n@ ></td>
+ <td class="noc1" align="center" valign="middle"><input type="radio"
+ name="server_header_filter_all" id="server_header_filter_all_x" value="X" @server-header-filter-all-x@ ></td>
+ <td class="action"><a href="@user-manual@@actions-help-prefix@SERVER-HEADER-FILTER">server-header-filter</a> *</td>
+ <td>Filter the server headers.
+ You can use the radio buttons on this line to disable
+ all server-header filters applied by previous rules, and/or
+ you can enable or disable the filters individually below.</td>
+ </tr>
@server-header-filter-params@
+ <tr class="bg1" align="left" valign="top">
+ <td class="en1"> </td>
+ <td class="dis1" align="center" valign="middle"><input type="radio"
+ name="server_header_tagger_all" id="server_header_tagger_all_n" value="N" @server-header-tagger-all-n@ ></td>
+ <td class="noc1" align="center" valign="middle"><input type="radio"
+ name="server_header_tagger_all" id="server_header_tagger_all_x" value="X" @server-header-tagger-all-x@ ></td>
+ <td class="action"><a href="@user-manual@@actions-help-prefix@SERVER-HEADER-TAGGER">server-header-tagger</a> *</td>
+ <td>Create tags based on the server headers.
+ You can use the radio buttons on this line to disable
+ all server-header taggers applied by previous rules, and/or
+ you can enable or disable the taggers individually below.</td>
+ </tr>
@server-header-tagger-params@
-
<tr class="bg1" align="left" valign="top">
<td class="en1" align="center" valign="middle"><input type="radio"
name="session_cookies_only" value="Y" @session-cookies-only-y@