X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgiedit.c;h=a9e4b0ebfe3eb82cf37a888cb1a8c4758014f89e;hp=f653b4e79a364ce218dc70fa1d25c35e39ba4c2a;hb=c5b8825873c2e08323d2521afab84a959bfa7248;hpb=8675bc0559b182e88e9dfbfd98cc9c9f8717cf0b diff --git a/cgiedit.c b/cgiedit.c index f653b4e7..a9e4b0eb 100644 --- a/cgiedit.c +++ b/cgiedit.c @@ -1,4 +1,3 @@ -const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.74 2012/03/09 16:24:36 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $ @@ -13,8 +12,8 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.74 2012/03/09 16:24:36 fabiankeil * * Stick to the short names in this file for consistency. * - * Copyright : Written by and Copyright (C) 2001-2008 the SourceForge - * Privoxy team. http://www.privoxy.org/ + * Copyright : Written by and Copyright (C) 2001-2014 the + * Privoxy team. https://www.privoxy.org/ * * Based on the Internet Junkbuster originally written * by and Copyright (C) 1997 Anonymous Coders and @@ -71,8 +70,6 @@ const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.74 2012/03/09 16:24:36 fabiankeil #endif /* def FEATURE_TOGGLE */ #include "urlmatch.h" -const char cgiedit_h_rcs[] = CGIEDIT_H_VERSION; - #ifdef FEATURE_CGI_EDIT_ACTIONS @@ -121,19 +118,6 @@ struct file_line } setting; - /* Add more data types here... e.g. - - - struct url_spec url[1]; - - struct - { - struct action_spec action[1]; - const char * name; - } alias; - - */ - } data; }; @@ -256,6 +240,14 @@ static const struct filter_type_info filter_type_info[] = "server-header-tagger-all", "server_header_tagger_all", "E", "SERVER-HEADER-TAGGER" }, +#ifdef FEATURE_EXTERNAL_FILTERS + { + ACTION_MULTI_EXTERNAL_FILTER, + "external-content-filter-params", "external-filter", + "external-content-filter-all", "external_content_filter_all", + "E", "EXTERNAL-CONTENT-FILTER" + }, +#endif }; /* FIXME: Following non-static functions should be prototyped in .h or made static */ @@ -351,7 +343,7 @@ static char *section_target(const unsigned sectionid) { char buf[30]; - snprintf(buf, sizeof(buf), "#l%d", sectionid); + snprintf(buf, sizeof(buf), "#l%u", sectionid); return(strdup(buf)); } @@ -373,7 +365,7 @@ static char *stringify(const unsigned number) { char buf[6]; - snprintf(buf, sizeof(buf), "%i", number); + snprintf(buf, sizeof(buf), "%u", number); return strdup(buf); } @@ -765,12 +757,7 @@ jb_err edit_write_file(struct editable_file * file) /* Allocate new memory for string */ len = strlen(cur_line->unprocessed) + (size_t)numhash; - if (NULL == (str = malloc(len + 1))) - { - /* Uh oh, just trashed file! */ - fclose(fp); - return JB_ERR_MEMORY; - } + str = malloc_or_die(len + 1); /* Copy string but quote hashes */ src = cur_line->unprocessed; @@ -853,11 +840,7 @@ jb_err edit_write_file(struct editable_file * file) freez(file->version_str); snprintf(version_buf, sizeof(version_buf), "%u", file->version); version_buf[sizeof(version_buf)-1] = '\0'; - file->version_str = strdup(version_buf); - if (version_buf == NULL) - { - return JB_ERR_MEMORY; - } + file->version_str = strdup_or_die(version_buf); return JB_ERR_OK; } @@ -1061,10 +1044,7 @@ static jb_err split_line_on_equals(const char * line, char ** pname, char ** pva } name_len = (size_t)(name_end - line) + 1; /* Length excluding \0 */ - if (NULL == (*pname = (char *) malloc(name_len + 1))) - { - return JB_ERR_MEMORY; - } + *pname = malloc_or_die(name_len + 1); strncpy(*pname, line, name_len); (*pname)[name_len] = '\0'; @@ -1120,7 +1100,7 @@ jb_err edit_parse_actions_file(struct editable_file * file) /* alias_list contains the aliases defined in this file. * It might be better to use the "file_line.data" fields - * in the relavent places instead. + * in the relevant places instead. */ cur_line = file->lines; @@ -1224,6 +1204,7 @@ jb_err edit_parse_actions_file(struct editable_file * file) err = split_line_on_equals(cur_line->unprocessed, &name, &value); if (err == JB_ERR_MEMORY) { + free_alias_list(alias_list); return err; } else if (err != JB_ERR_OK) @@ -1231,17 +1212,11 @@ jb_err edit_parse_actions_file(struct editable_file * file) /* Line does not contain a name=value pair */ file->parse_error = cur_line; file->parse_error_text = "Expected a name=value pair on this {{alias}} line, but couldn't find one."; + free_alias_list(alias_list); return JB_ERR_PARSE; } - if ((new_alias = zalloc(sizeof(*new_alias))) == NULL) - { - /* Out of memory */ - free(name); - free(value); - free_alias_list(alias_list); - return JB_ERR_MEMORY; - } + new_alias = zalloc_or_die(sizeof(*new_alias)); err = get_actions(value, alias_list, new_alias->action); if (err) @@ -1326,12 +1301,7 @@ jb_err edit_parse_actions_file(struct editable_file * file) cur_line->type = FILE_LINE_ACTION; /* Remove {} and make copy */ - if (NULL == (value = (char *) malloc(len + 1))) - { - /* Out of memory */ - free_alias_list(alias_list); - return JB_ERR_MEMORY; - } + value = malloc_or_die(len + 1); strncpy(value, text, len); value[len] = '\0'; @@ -1414,11 +1384,7 @@ jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline) *pfile = NULL; - cur_line = first_line = zalloc(sizeof(struct file_line)); - if (cur_line == NULL) - { - return JB_ERR_MEMORY; - } + cur_line = first_line = zalloc_or_die(sizeof(struct file_line)); cur_line->type = FILE_LINE_UNPROCESSED; @@ -1434,13 +1400,7 @@ jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline) do { prev_line = cur_line; - cur_line = prev_line->next = zalloc(sizeof(struct file_line)); - if (cur_line == NULL) - { - /* Out of memory */ - edit_free_file_lines(first_line); - return JB_ERR_MEMORY; - } + cur_line = prev_line->next = zalloc_or_die(sizeof(struct file_line)); cur_line->type = FILE_LINE_UNPROCESSED; @@ -1570,12 +1530,7 @@ jb_err edit_read_file(struct client_state *csp, return err; } - file = (struct editable_file *) zalloc(sizeof(*file)); - if (err) - { - edit_free_file_lines(lines); - return err; - } + file = zalloc_or_die(sizeof(*file)); file->lines = lines; file->newline = newline; @@ -1587,12 +1542,7 @@ jb_err edit_read_file(struct client_state *csp, freez(file->version_str); snprintf(version_buf, sizeof(version_buf), "%u", file->version); version_buf[sizeof(version_buf)-1] = '\0'; - file->version_str = strdup(version_buf); - if (version_buf == NULL) - { - edit_free_file(file); - return JB_ERR_MEMORY; - } + file->version_str = strdup_or_die(version_buf); *pfile = file; return JB_ERR_OK; @@ -1792,11 +1742,7 @@ static jb_err get_file_name_param(struct client_state *csp, /* Append extension */ name_size = len + strlen(suffix) + 1; - name = malloc(name_size); - if (name == NULL) - { - return JB_ERR_MEMORY; - } + name = malloc_or_die(name_size); strlcpy(name, param, name_size); strlcat(name, suffix, name_size); @@ -1857,7 +1803,7 @@ static jb_err get_url_spec_param(struct client_state *csp, const char *orig_param; char *param; char *s; - struct url_spec compiled[1]; + struct pattern_spec compiled[1]; jb_err err; assert(csp); @@ -1905,14 +1851,14 @@ static jb_err get_url_spec_param(struct client_state *csp, free(param); return JB_ERR_MEMORY; } - err = create_url_spec(compiled, s); + err = create_pattern_spec(compiled, s); free(s); if (err) { free(param); return (err == JB_ERR_MEMORY) ? JB_ERR_MEMORY : JB_ERR_CGI_PARAMS; } - free_url_spec(compiled); + free_pattern_spec(compiled); if (param[strlen(param) - 1] == '\\') { @@ -1941,14 +1887,14 @@ static jb_err get_url_spec_param(struct client_state *csp, free(param); return JB_ERR_MEMORY; } - err = create_url_spec(compiled, s); + err = create_pattern_spec(compiled, s); free(s); if (err) { free(param); return (err == JB_ERR_MEMORY) ? JB_ERR_MEMORY : JB_ERR_CGI_PARAMS; } - free_url_spec(compiled); + free_pattern_spec(compiled); } *pvalue = param; @@ -1996,11 +1942,7 @@ static jb_err map_radio(struct map * exports, assert(optionname); assert(values); - buf = malloc(buf_size); - if (buf == NULL) - { - return JB_ERR_MEMORY; - } + buf = malloc_or_die(buf_size); strlcpy(buf, optionname, buf_size); @@ -2375,7 +2317,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, { if (!strncmp(b->url->spec, "standard.", 9) && *(b->url->spec + 9) != '\0') { - if (err || (NULL == (section_exports = new_map()))) + if (err) { freez(buttons); free(section_template); @@ -2384,6 +2326,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, return JB_ERR_MEMORY; } + section_exports = new_map(); err = map(section_exports, "button-name", 1, b->url->spec + 9, 1); if (err || (NULL == (s = strdup(section_template)))) @@ -2412,9 +2355,9 @@ jb_err cgi_edit_actions_list(struct client_state *csp, */ if (!err) err = map_conditional(exports, "all-urls-present", 1); - snprintf(buf, sizeof(buf), "%d", line_number); + snprintf(buf, sizeof(buf), "%u", line_number); if (!err) err = map(exports, "all-urls-s", 1, buf, 1); - snprintf(buf, sizeof(buf), "%d", line_number + 2); + snprintf(buf, sizeof(buf), "%u", line_number + 2); if (!err) err = map(exports, "all-urls-s-next", 1, buf, 1); if (!err) err = map(exports, "all-urls-actions", 1, actions_to_html(csp, cur_line->data.action), 0); @@ -2515,17 +2458,9 @@ jb_err cgi_edit_actions_list(struct client_state *csp, while ((cur_line != NULL) && (cur_line->type == FILE_LINE_ACTION)) { - if (NULL == (section_exports = new_map())) - { - free(sections); - free(section_template); - free(url_template); - edit_free_file(file); - free_map(exports); - return JB_ERR_MEMORY; - } + section_exports = new_map(); - snprintf(buf, sizeof(buf), "%d", line_number); + snprintf(buf, sizeof(buf), "%u", line_number); err = map(section_exports, "s", 1, buf, 1); if (!err) err = map(section_exports, "actions", 1, actions_to_html(csp, cur_line->data.action), 0); @@ -2545,7 +2480,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, if (prev_section_line_number != ((unsigned)(-1))) { /* Not last section */ - snprintf(buf, sizeof(buf), "%d", prev_section_line_number); + snprintf(buf, sizeof(buf), "%u", prev_section_line_number); if (!err) err = map(section_exports, "s-prev", 1, buf, 1); if (!err) err = map_block_keep(section_exports, "s-prev-exists"); } @@ -2587,19 +2522,9 @@ jb_err cgi_edit_actions_list(struct client_state *csp, while ((cur_line != NULL) && (cur_line->type == FILE_LINE_URL)) { - if (NULL == (url_exports = new_map())) - { - free(urls); - free(sections); - free(section_template); - free(url_template); - edit_free_file(file); - free_map(exports); - free_map(section_exports); - return JB_ERR_MEMORY; - } + url_exports = new_map(); - snprintf(buf, sizeof(buf), "%d", line_number); + snprintf(buf, sizeof(buf), "%u", line_number); err = map(url_exports, "p", 1, buf, 1); snprintf(buf, sizeof(buf), "%d", url_1_2); @@ -2665,7 +2590,7 @@ jb_err cgi_edit_actions_list(struct client_state *csp, /* Could also do section-specific exports here, but it wouldn't be as fast */ - snprintf(buf, sizeof(buf), "%d", line_number); + snprintf(buf, sizeof(buf), "%u", line_number); if (!err) err = map(section_exports, "s-next", 1, buf, 1); if ((cur_line != NULL) @@ -2825,7 +2750,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, * browsers (BR #1570678). * * The config option split-large-forms works around this browser - * bug (HTTP has no URL length limitation) by deviding the action + * bug (HTTP has no URL length limitation) by dividing the action * list form into multiple smaller ones. It means the URLs are shorter * and work in broken browsers as well, but the user can no longer change * all actions with one submit. @@ -2854,6 +2779,13 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, } } +#ifndef FEATURE_EXTERNAL_FILTERS + if (!err) err = map_block_killer(exports, "external-content-filters"); +#endif +#ifndef FEATURE_HTTPS_INSPECTION + if (!err) err = map_block_killer(exports, "https-inspection"); +#endif + if (err) { edit_free_file(file); @@ -2904,7 +2836,7 @@ jb_err cgi_edit_actions_for_url(struct client_state *csp, char number[20]; struct list_entry *filter_name; struct map *line_exports; - const int type = filter_group->type; + const enum filter_type type = filter_group->type; const int multi_action_index = filter_type_info[type].multi_action_index; assert(type < MAX_FILTER_TYPES); @@ -3240,13 +3172,7 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, } newtext_size = len + 2; - if (NULL == (newtext = malloc(newtext_size))) - { - /* Out of memory */ - free(actiontext); - edit_free_file(file); - return JB_ERR_MEMORY; - } + newtext = malloc_or_die(newtext_size); strlcpy(newtext, actiontext, newtext_size); free(actiontext); newtext[0] = '{'; @@ -3270,8 +3196,8 @@ jb_err cgi_edit_actions_submit(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%d", - (long) time(NULL), file->identifier, sectionid); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u#l%u", + (unsigned long) time(NULL), file->identifier, sectionid); edit_free_file(file); @@ -3391,8 +3317,8 @@ jb_err cgi_edit_actions_url(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%d", - (long) time(NULL), file->identifier, section_start_line_number); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u#l%u", + (unsigned long) time(NULL), file->identifier, section_start_line_number); edit_free_file(file); @@ -3487,13 +3413,7 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, /* At this point, the section header is in cur_line - add after this. */ /* Allocate the new line */ - new_line = (struct file_line *)zalloc(sizeof(*new_line)); - if (new_line == NULL) - { - free(new_pattern); - edit_free_file(file); - return JB_ERR_MEMORY; - } + new_line = zalloc_or_die(sizeof(*new_line)); /* Fill in the data members of the new line */ new_line->raw = NULL; @@ -3520,8 +3440,8 @@ jb_err cgi_edit_actions_add_url(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%d", - (long) time(NULL), file->identifier, sectionid); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u#l%u", + (unsigned long) time(NULL), file->identifier, sectionid); edit_free_file(file); @@ -3631,8 +3551,8 @@ jb_err cgi_edit_actions_remove_url(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%d", - (long) time(NULL), file->identifier, section_start_line_number); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u#l%u", + (unsigned long) time(NULL), file->identifier, section_start_line_number); edit_free_file(file); @@ -3753,8 +3673,8 @@ jb_err cgi_edit_actions_section_remove(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i", - (long) time(NULL), file->identifier); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", + (unsigned long) time(NULL), file->identifier); edit_free_file(file); @@ -3880,13 +3800,7 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, } /* Allocate the new line */ - new_line = (struct file_line *)zalloc(sizeof(*new_line)); - if (new_line == NULL) - { - free(new_text); - edit_free_file(file); - return JB_ERR_MEMORY; - } + new_line = zalloc_or_die(sizeof(*new_line)); /* Fill in the data members of the new line */ new_line->raw = NULL; @@ -3922,8 +3836,8 @@ jb_err cgi_edit_actions_section_add(struct client_state *csp, return err; } - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i", - (long) time(NULL), file->identifier); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", + (unsigned long) time(NULL), file->identifier); edit_free_file(file); @@ -4111,8 +4025,8 @@ jb_err cgi_edit_actions_section_swap(struct client_state *csp, } } /* END if (section1 != section2) */ - snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i", - (long) time(NULL), file->identifier); + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", + (unsigned long) time(NULL), file->identifier); edit_free_file(file); @@ -4493,6 +4407,8 @@ jb_err cgi_toggle(struct client_state *csp, global_toggle_state = !global_toggle_state; } + log_error(LOG_LEVEL_INFO, "Now toggled %s.", global_toggle_state ? "ON" : "OFF"); + if (NULL == (exports = default_exports(csp, "toggle"))) { return JB_ERR_MEMORY;