X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=cgiedit.c;h=4579b35b8cd2b2cd4c141e8325af3d4faecf9456;hp=f653b4e79a364ce218dc70fa1d25c35e39ba4c2a;hb=8c2814a1ddb4b5a4acef3578005f3f1f5a6c96bc;hpb=8675bc0559b182e88e9dfbfd98cc9c9f8717cf0b diff --git a/cgiedit.c b/cgiedit.c index f653b4e7..4579b35b 100644 --- a/cgiedit.c +++ b/cgiedit.c @@ -1,4 +1,4 @@ -const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.74 2012/03/09 16:24:36 fabiankeil Exp $"; +const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.88 2016/02/26 12:29:38 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $ @@ -13,7 +13,7 @@ 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 + * Copyright : Written by and Copyright (C) 2001-2014 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -121,19 +121,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 +243,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 +346,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 +368,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 +760,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 +843,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 +1047,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'; @@ -1224,6 +1207,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 +1215,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 +1304,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 +1387,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 +1403,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 +1533,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 +1545,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 +1745,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 +1806,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 +1854,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 +1890,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 +1945,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 +2320,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 +2329,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 +2358,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 +2461,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 +2483,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 +2525,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 +2593,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) @@ -2854,6 +2782,10 @@ 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 + if (err) { edit_free_file(file); @@ -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,7 +3196,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%u", (long) time(NULL), file->identifier, sectionid); edit_free_file(file); @@ -3391,7 +3317,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%u", (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,7 +3440,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%i#l%u", (long) time(NULL), file->identifier, sectionid); edit_free_file(file); @@ -3631,7 +3551,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u#l%u", (long) time(NULL), file->identifier, section_start_line_number); edit_free_file(file); @@ -3753,7 +3673,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", (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,7 +3836,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", (long) time(NULL), file->identifier); edit_free_file(file); @@ -4111,7 +4025,7 @@ 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", + snprintf(target, sizeof(target), CGI_PREFIX "edit-actions-list?foo=%lu&f=%u", (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;