X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=project.h;h=1fc0bd4ced49e59bda556fe831b14ab25d9ad7fd;hp=a1295097d6ca4ebfb98835bd57b4bc98adfc10ee;hb=a9f0837233938408364f067bf89def53b677f68f;hpb=9d80104b79041fcb153723b7cfa37df0e6b3d9cc diff --git a/project.h b/project.h index a1295097..1fc0bd4c 100644 --- a/project.h +++ b/project.h @@ -1,7 +1,7 @@ #ifndef PROJECT_H_INCLUDED #define PROJECT_H_INCLUDED /** Version string. */ -#define PROJECT_H_VERSION "$Id: project.h,v 1.203 2013/11/24 14:26:39 fabiankeil Exp $" +#define PROJECT_H_VERSION "$Id: project.h,v 1.219 2017/01/23 16:10:28 fabiankeil Exp $" /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/project.h,v $ @@ -10,7 +10,7 @@ * project. Does not define any variables or functions * (though it does declare some macros). * - * Copyright : Written by and Copyright (C) 2001-2012 the + * Copyright : Written by and Copyright (C) 2001-2014 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -53,7 +53,6 @@ # include # else # include -# include # include typedef unsigned short in_port_t; # endif @@ -400,6 +399,9 @@ struct pattern_spec /** Pattern spec bitmap: It's a NO-RESPONSE-TAG pattern. */ #define PATTERN_SPEC_NO_RESPONSE_TAG_PATTERN 0x00000008UL +/** Pattern spec bitmap: It's a CLIENT-TAG pattern. */ +#define PATTERN_SPEC_CLIENT_TAG_PATTERN 0x00000010UL + /** * An I/O buffer. Holds a string which can be appended to, and can have data * removed from the beginning. @@ -495,7 +497,7 @@ struct iob #define ACTION_CRUNCH_CLIENT_HEADER 0x00200000UL /** Action bitmap: Enable text mode by force */ #define ACTION_FORCE_TEXT_MODE 0x00400000UL -/** Action bitmap: Enable text mode by force */ +/** Action bitmap: Remove the "If-None-Match" header. */ #define ACTION_CRUNCH_IF_NONE_MATCH 0x00800000UL /** Action bitmap: Enable content-disposition crunching */ #define ACTION_HIDE_CONTENT_DISPOSITION 0x01000000UL @@ -566,7 +568,9 @@ struct iob /** Index into current_action_spec::multi[] for server-header tags to apply. */ #define ACTION_MULTI_SERVER_HEADER_TAGGER 5 /** Number of multi-string actions. */ -#define ACTION_MULTI_COUNT 6 +#define ACTION_MULTI_EXTERNAL_FILTER 6 +/** Number of multi-string actions. */ +#define ACTION_MULTI_COUNT 7 /** @@ -640,7 +644,7 @@ struct url_actions }; enum forwarder_type { - /**< Don't use a SOCKS server */ + /**< Don't use a SOCKS server, forward to a HTTP proxy directly */ SOCKS_NONE = 0, /**< original SOCKS 4 protocol */ SOCKS_4 = 40, @@ -650,6 +654,12 @@ enum forwarder_type { SOCKS_5 = 50, /**< Like SOCKS5, but uses non-standard Tor extensions (currently only optimistic data) */ SOCKS_5T, + /**< + * Don't use a SOCKS server, forward to the specified webserver. + * The difference to SOCKS_NONE is that a request line without + * full URL is sent. + */ + FORWARD_WEBSERVER, }; /* @@ -724,11 +734,6 @@ struct reusable_connection */ #define CSP_FLAG_TOGGLED_ON 0x20U -/** - * Flag for csp->flags: Set if we answered the request ourselve. - */ -#define CSP_FLAG_CRUNCHED 0x40U - /** * Flag for csp->flags: Set if an acceptable Connection header * has already been set by the client. @@ -846,19 +851,35 @@ struct reusable_connection */ #define CSP_FLAG_CHUNKED_CLIENT_BODY 0x01000000U +/** + * Flag for csp->flags: Set if the client set the Expect header + */ +#define CSP_FLAG_UNSUPPORTED_CLIENT_EXPECTATION 0x02000000U + +/** + * Flag for csp->flags: Set if we answered the request ourselve. + */ +#define CSP_FLAG_CRUNCHED 0x04000000U + +#ifdef FUZZ +/** + * Flag for csp->flags: Set if we are working with fuzzed input + */ +#define CSP_FLAG_FUZZED_INPUT 0x08000000U +#endif /* * Flags for use in return codes of child processes */ /** - * Flag for process return code: Set if exiting porcess has been toggled + * Flag for process return code: Set if exiting process has been toggled * during its lifetime. */ #define RC_FLAG_TOGGLED 0x10 /** - * Flag for process return code: Set if exiting porcess has blocked its + * Flag for process return code: Set if exiting process has blocked its * request. */ #define RC_FLAG_BLOCKED 0x20 @@ -911,6 +932,10 @@ struct client_state unsigned long ip_addr_long; #endif /* def HAVE_RFC2553 */ + /** The host name and port (as a string of the form ':') + of the server socket to which the client connected. */ + char *listen_addr_str; + /** The URL that was requested */ struct http_request http[1]; @@ -934,6 +959,17 @@ struct client_state /** List of all tags that apply to this request */ struct list tags[1]; +#ifdef FEATURE_CLIENT_TAGS + /** List of all tags that apply to this client (assigned based on address) */ + struct list client_tags[1]; + /** The address of the client the request (presumably) came from. + * Either the address returned by accept(), or the address provided + * with the X-Forwarded-For header, provided Privoxy has been configured + * to use it. + */ + char *client_address; +#endif + /** MIME-Type key, see CT_* above */ unsigned int content_type; @@ -1115,9 +1151,17 @@ enum filter_type FT_SERVER_HEADER_FILTER = 2, FT_CLIENT_HEADER_TAGGER = 3, FT_SERVER_HEADER_TAGGER = 4, +#ifdef FEATURE_EXTERNAL_FILTERS + FT_EXTERNAL_CONTENT_FILTER = 5, +#endif FT_INVALID_FILTER = 42, }; + +#ifdef FEATURE_EXTERNAL_FILTERS +#define MAX_FILTER_TYPES 6 +#else #define MAX_FILTER_TYPES 5 +#endif /** * This struct represents one filter (one block) from @@ -1181,6 +1225,15 @@ struct access_control_list /** Maximum number of loaders (actions, re_filter, ...) */ #define NLOADERS 8 +/** + * This struct represents a client-spcific-tag and it's description + */ +struct client_tag_spec +{ + char *name; /**< Name from "client-specific-tag bla" directive */ + char *description; /**< Description from "client-specific-tag-description " directive */ + struct client_tag_spec *next; /**< The pointer for chaining. */ +}; /** configuration_spec::feature_flags: CGI actions editor. */ #define RUNTIME_FEATURE_CGI_EDIT_ACTIONS 1U @@ -1246,6 +1299,11 @@ struct configuration_spec /** The directory for customized CGI templates. */ const char *templdir; +#ifdef FEATURE_EXTERNAL_FILTERS + /** The template used to create temporary files. */ + const char *temporary_directory; +#endif + /** The log file directory. */ const char *logdir; @@ -1279,6 +1337,11 @@ struct configuration_spec /** IP addresses to bind to. Defaults to HADDR_DEFAULT == 127.0.0.1. */ const char *haddr[MAX_LISTENING_SOCKETS]; + /** Trusted referring site that can be used to reach CGI + * pages that aren't marked as harmful. + */ + const char *trusted_cgi_referrer; + /** Ports to bind to. Defaults to HADDR_PORT == 8118. */ int hport[MAX_LISTENING_SOCKETS]; @@ -1298,6 +1361,14 @@ struct configuration_spec #endif /* def FEATURE_TRUST */ +#ifdef FEATURE_CLIENT_TAGS + struct client_tag_spec client_tags[1]; + + /* Maximum number of seconds a temporarily enabled tag stays enabled. */ + unsigned int client_tag_lifetime; +#endif /* def FEATURE_CLIENT_TAGS */ + int trust_x_forwarded_for; + #ifdef FEATURE_ACL /** The access control list (ACL). */ @@ -1345,10 +1416,9 @@ struct configuration_spec /** Calculates the number of elements in an array, using sizeof. */ #define SZ(X) (sizeof(X) / sizeof(*X)) -#ifdef FEATURE_FORCE_LOAD -/** The force load URL prefix. */ +/** The force load URL prefix. Not behind an ifdef because + * it's always used for the show-status page. */ #define FORCE_PREFIX "/PRIVOXY-FORCE" -#endif /* def FEATURE_FORCE_LOAD */ #ifdef FEATURE_NO_GIFS /** The MIME type for images ("image/png" or "image/gif"). */ @@ -1363,7 +1433,7 @@ struct configuration_spec */ /** URL for the Privoxy home page. */ -#define HOME_PAGE_URL "http://www.privoxy.org/" +#define HOME_PAGE_URL "https://www.privoxy.org/" /** URL for the Privoxy user manual. */ #define USER_MANUAL_URL HOME_PAGE_URL VERSION "/user-manual/"