summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlin Năstac <mrness@gentoo.org>2006-03-30 16:40:08 +0000
committerAlin Năstac <mrness@gentoo.org>2006-03-30 16:40:08 +0000
commit1963590ee2c49e2eeba1bdc969f3b913ef2e36aa (patch)
tree9ffdef0c96c3662fba2daa115b537b152ea40234 /net-proxy
parentversion bump (diff)
downloadgentoo-2-1963590ee2c49e2eeba1bdc969f3b913ef2e36aa.tar.gz
gentoo-2-1963590ee2c49e2eeba1bdc969f3b913ef2e36aa.tar.bz2
gentoo-2-1963590ee2c49e2eeba1bdc969f3b913ef2e36aa.zip
Activate scanning on compressed pages through zlib USE flag (#127917).
(Portage version: 2.0.54)
Diffstat (limited to 'net-proxy')
-rw-r--r--net-proxy/privoxy/ChangeLog9
-rw-r--r--net-proxy/privoxy/Manifest13
-rw-r--r--net-proxy/privoxy/files/digest-privoxy-3.0.3-r41
-rw-r--r--net-proxy/privoxy/files/privoxy-3.0.3-zlib.patch517
-rw-r--r--net-proxy/privoxy/privoxy-3.0.3-r4.ebuild95
5 files changed, 624 insertions, 11 deletions
diff --git a/net-proxy/privoxy/ChangeLog b/net-proxy/privoxy/ChangeLog
index f7076a57ced0..ced752604849 100644
--- a/net-proxy/privoxy/ChangeLog
+++ b/net-proxy/privoxy/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for net-proxy/privoxy
# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-proxy/privoxy/ChangeLog,v 1.6 2006/01/12 18:35:56 cryos Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-proxy/privoxy/ChangeLog,v 1.7 2006/03/30 16:40:07 mrness Exp $
+
+*privoxy-3.0.3-r4 (30 Mar 2006)
+
+ 30 Mar 2006; Alin Nastac <mrness@gentoo.org>
+ +files/privoxy-3.0.3-zlib.patch, +privoxy-3.0.3-r4.ebuild:
+ Activate scanning on compressed pages through zlib USE flag.
+ Thanks goes to Georg Sauthoff <g_sauthoff@web.de> (#127917).
12 Jan 2006; Marcus D. Hanwell <cryos@gentoo.org> privoxy-3.0.3-r3.ebuild:
Stable on amd64.
diff --git a/net-proxy/privoxy/Manifest b/net-proxy/privoxy/Manifest
index 98507414bf80..78b8880753a9 100644
--- a/net-proxy/privoxy/Manifest
+++ b/net-proxy/privoxy/Manifest
@@ -1,17 +1,10 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
MD5 8324e2af98dbf1b21c11b76793e3a654 ChangeLog 5684
MD5 56d88e9a6970c67adde3386b83dcb2ae files/digest-privoxy-3.0.3-r3 77
+MD5 56d88e9a6970c67adde3386b83dcb2ae files/digest-privoxy-3.0.3-r4 77
+MD5 b35f03c7c5b207f9c216f8a66978bac0 files/privoxy-3.0.3-zlib.patch 18288
MD5 199b985be5ba80912fdd3bf5776e697f files/privoxy-zlib.patch 17945
MD5 f2b6a652dbfbc65e5b89024a8ea3da7e files/privoxy.logrotate 191
MD5 2a366b72a6ff8d6d01cf0bef2ac71f0a files/privoxy.rc7 579
MD5 a31f52e5785898edac47ca00310413e2 metadata.xml 291
MD5 116b629d35a9c45ff430fbbda3f46b51 privoxy-3.0.3-r3.ebuild 2355
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2.1 (GNU/Linux)
-
-iD8DBQFEDKPNjG8pv1lIUX4RAnzZAKCOHPOLEnIztA1cLtpCMhvYJgdgVwCg37Dc
-6/oG2ToqMHEkFR5+J76xjYo=
-=sW5v
------END PGP SIGNATURE-----
+MD5 f988dcdb9052ee1088906c45f8508e42 privoxy-3.0.3-r4.ebuild 2418
diff --git a/net-proxy/privoxy/files/digest-privoxy-3.0.3-r4 b/net-proxy/privoxy/files/digest-privoxy-3.0.3-r4
new file mode 100644
index 000000000000..8293b5fba301
--- /dev/null
+++ b/net-proxy/privoxy/files/digest-privoxy-3.0.3-r4
@@ -0,0 +1 @@
+MD5 b0710be8af09409bfb03f52523a17010 privoxy-3.0.3-stable-src.tar.gz 1561072
diff --git a/net-proxy/privoxy/files/privoxy-3.0.3-zlib.patch b/net-proxy/privoxy/files/privoxy-3.0.3-zlib.patch
new file mode 100644
index 000000000000..00ba739ac127
--- /dev/null
+++ b/net-proxy/privoxy/files/privoxy-3.0.3-zlib.patch
@@ -0,0 +1,517 @@
+diff -Nru privoxy-3.0.3-stable.orig/actionlist.h privoxy-3.0.3-stable/actionlist.h
+--- privoxy-3.0.3-stable.orig/actionlist.h 2002-09-25 18:25:25.000000000 +0300
++++ privoxy-3.0.3-stable/actionlist.h 2006-03-29 01:19:45.337430250 +0300
+@@ -116,6 +116,7 @@
+ DEFINE_ACTION_STRING ("deanimate-gifs", ACTION_DEANIMATE, ACTION_STRING_DEANIMATE)
+ DEFINE_CGI_PARAM_RADIO ("deanimate-gifs", ACTION_DEANIMATE, ACTION_STRING_DEANIMATE, "first", 0)
+ DEFINE_CGI_PARAM_RADIO ("deanimate-gifs", ACTION_DEANIMATE, ACTION_STRING_DEANIMATE, "last", 1)
++DEFINE_ACTION_BOOL ("decompress-from-server", ACTION_DECOMPRESS_IN)
+ DEFINE_ACTION_BOOL ("downgrade-http-version", ACTION_DOWNGRADE)
+ DEFINE_ACTION_BOOL ("fast-redirects", ACTION_FAST_REDIRECTS)
+ DEFINE_ACTION_MULTI ("filter", ACTION_MULTI_FILTER)
+diff -Nru privoxy-3.0.3-stable.orig/configure.in privoxy-3.0.3-stable/configure.in
+--- privoxy-3.0.3-stable.orig/configure.in 2004-01-30 11:26:03.000000000 +0200
++++ privoxy-3.0.3-stable/configure.in 2006-03-29 01:19:45.353431250 +0300
+@@ -1234,6 +1234,20 @@
+ libpcrs is available],
+ [ if test $enableval = "no"; then have_pcrs=no; fi ])
+
++AC_ARG_ENABLE(zlib,
++[ --enable-zlib Use the zlib library to allow compressing or
++ decompressing data on the fly.],
++[enableval2=$enableval],
++[enableval2=no])
++if test $enableval2 = yes; then
++ AC_CHECK_LIB(z, zlibVersion, , [
++ AC_MSG_ERROR([Unable to find a copy of zlib. The zlib library
++is necessary to enable compresion support. ])
++ ])
++ AC_DEFINE(FEATURE_ZLIB,1,
++ [ Define to 1 to use compression through the zlib library. ])
++fi
++
+
+ # If we have libpcre and either we also have pcreposix or
+ # we don't need pcreposix, then link pcre dynamically; else
+diff -Nru privoxy-3.0.3-stable.orig/default.action.master privoxy-3.0.3-stable/default.action.master
+--- privoxy-3.0.3-stable.orig/default.action.master 2006-03-29 01:19:03.000000000 +0300
++++ privoxy-3.0.3-stable/default.action.master 2006-03-29 01:19:45.357431500 +0300
+@@ -452,7 +452,7 @@
+ -hide-user-agent \
+ -kill-popups \
+ -limit-connect \
+-+prevent-compression \
++-prevent-compression \
+ -send-vanilla-wafer \
+ -send-wafer \
+ +session-cookies-only \
+diff -Nru privoxy-3.0.3-stable.orig/filters.c privoxy-3.0.3-stable/filters.c
+--- privoxy-3.0.3-stable.orig/filters.c 2003-11-11 15:10:31.000000000 +0200
++++ privoxy-3.0.3-stable/filters.c 2006-03-29 01:23:20.022847250 +0300
+@@ -1320,6 +1320,38 @@
+ csp->flags |= CSP_FLAG_MODIFIED;
+ }
+
++#ifdef FEATURE_ZLIB
++ /* If the body has a compressed transfer-encoding, uncompress
++ * it first, adjusting size and iob->eod. Note that
++ * decompression occurs after de-chunking.
++ */
++ if (csp->content_type & CT_GZIP || csp->content_type & CT_DEFLATE)
++ {
++ /* Notice that we at least tried to decompress. */
++ if (JB_ERR_OK != decompress_iob(csp))
++ {
++ /* We failed to decompress the data; there's no point
++ * in continuing since we can't filter. This is
++ * slightly tricky because we need to remember not to
++ * modify the Content-Encoding header later; using
++ * CT_TABOO flag is a kludge for this purpose.
++ */
++ csp->content_type |= CT_TABOO;
++ return(NULL);
++ }
++ log_error(LOG_LEVEL_RE_FILTER, "Decompressing successful");
++
++ /* Decompression gives us a completely new iob, so we
++ * need to update.
++ */
++ size = csp->iob->eod - csp->iob->cur;
++ old = csp->iob->cur;
++
++ csp->flags |= CSP_FLAG_MODIFIED;
++ }
++#endif
++
++
+ /*
+ * For all applying +filter actions, look if a filter by that
+ * name exists and if yes, execute it's pcrs_joblist on the
+diff -Nru privoxy-3.0.3-stable.orig/jcc.c privoxy-3.0.3-stable/jcc.c
+--- privoxy-3.0.3-stable.orig/jcc.c 2003-12-12 14:52:53.000000000 +0200
++++ privoxy-3.0.3-stable/jcc.c 2006-03-29 01:19:45.357431500 +0300
+@@ -659,6 +659,10 @@
+ # include <select.h>
+ # endif
+
++#ifdef FEATURE_ZLIB
++#include <zlib.h>
++#endif
++
+ #endif
+
+ #include "project.h"
+@@ -1605,6 +1609,8 @@
+
+ if ((csp->content_type & CT_TEXT) && /* It's a text / * MIME-Type */
+ !http->ssl && /* We talk plaintext */
++ !(csp->content_type & CT_GZIP) &&
++ !(csp->content_type & CT_DEFLATE) &&
+ block_popups) /* Policy allows */
+ {
+ block_popups_now = 1;
+diff -Nru privoxy-3.0.3-stable.orig/parsers.c privoxy-3.0.3-stable/parsers.c
+--- privoxy-3.0.3-stable.orig/parsers.c 2003-07-11 16:21:25.000000000 +0300
++++ privoxy-3.0.3-stable/parsers.c 2006-03-29 01:19:45.361431750 +0300
+@@ -433,6 +433,10 @@
+ #include <assert.h>
+ #include <string.h>
+
++#ifdef FEATURE_ZLIB
++#include <zlib.h>
++#endif
++
+ #if !defined(_WIN32) && !defined(__OS2__)
+ #include <unistd.h>
+ #endif
+@@ -632,6 +636,281 @@
+ }
+
+
++#ifdef FEATURE_ZLIB
++/*********************************************************************
++ *
++ * Function : decompress_iob
++ *
++ * Description : Decompress buffered page, expanding the
++ * buffer as necessary. csp->iob->cur
++ * should point to the the beginning of the
++ * compressed data block.
++ *
++ * Parameters :
++ * 1 : csp = Current client state (buffers, headers, etc...)
++ *
++ * Returns : JB_ERR_OK on success, JB_ERR_MEMORY if out-of-memory
++ * limit reached, JB_ERR_GENERIC if error decompressing
++ * buffer.
++ *
++ *********************************************************************/
++jb_err decompress_iob(struct client_state *csp)
++{
++ char *buf; /* new, uncompressed buffer */
++ int bufsize = csp->iob->size; /* allocated size of the new buffer */
++ /* Number of bytes at the beginning
++ * of the iob that we should NOT
++ * decompress.
++ */
++ int skip_size = csp->iob->cur - csp->iob->buf;
++ int status; /* return status of the inflate() call */
++ z_stream zstr; /* used by calls to zlib */
++
++ /* This is to protect the parsing of gzipped data, but it should(?)
++ * be valid for deflated data also.
++ */
++ if (bufsize < 10)
++ {
++ log_error (LOG_LEVEL_ERROR, "Buffer too small decompressing iob");
++ return JB_ERR_GENERIC;
++ }
++
++ if (csp->content_type & CT_GZIP)
++ {
++ /* Our task is slightly complicated by the facts that data
++ * compressed by gzip does not include a zlib header, and
++ * that there is no easily accessible interface in zlib to
++ * handle a gzip header. We strip off the gzip header by
++ * hand, and later inform zlib not to expect a header.
++ */
++
++ /* Strip off the gzip header. Please see RFC 1952 for more
++ * explanation of the appropriate fields.
++ */
++ if ((*csp->iob->cur++ != (char)0x1f)
++ || (*csp->iob->cur++ != (char)0x8b)
++ || (*csp->iob->cur++ != Z_DEFLATED))
++ {
++ log_error (LOG_LEVEL_ERROR,
++ "Invalid gzip header when decompressing");
++ return JB_ERR_GENERIC;
++ }
++ else {
++ int flags = *csp->iob->cur++;
++ if (flags & 0xe0)
++ {
++ /* The gzip header has reserved bits set; bail out. */
++ log_error (LOG_LEVEL_ERROR,
++ "Invalid gzip header when decompressing");
++ return JB_ERR_GENERIC;
++ }
++ csp->iob->cur += 6;
++
++ /* Skip extra fields if necessary. */
++ if (flags & 0x04)
++ {
++ /* Skip a given number of bytes, specified as a 16-bit
++ * little-endian value.
++ */
++ csp->iob->cur += *csp->iob->cur++ + (*csp->iob->cur++ << 8);
++ }
++
++ /* Skip the filename if necessary. */
++ if (flags & 0x08)
++ {
++ /* A null-terminated string follows. */
++ while (*csp->iob->cur++);
++ }
++
++ /* Skip the comment if necessary. */
++ if (flags & 0x10)
++ {
++ while (*csp->iob->cur++);
++ }
++
++ /* Skip the CRC if necessary. */
++ if (flags & 0x02)
++ {
++ csp->iob->cur += 2;
++ }
++ }
++ }
++ else if (csp->content_type & CT_DEFLATE)
++ {
++ log_error (LOG_LEVEL_INFO, "Decompressing deflated iob: %d", *csp->iob->cur);
++ /* In theory (that is, according to RFC 1950), deflate-compressed
++ * data should begin with a two-byte zlib header and have an
++ * adler32 checksum at the end. It seems that in practice the
++ * only the raw compressed data is sent. Note that this means that
++ * we are not RFC 1950-compliant here, but the advantage is that
++ * this actually works. :)
++ *
++ * We add a dummy null byte to tell zlib where the data ends,
++ * and later inform it not to expect a header.
++ *
++ * Fortunately, add_to_iob() has thoughtfully null-terminated
++ * the buffer; we can just increment the end pointer to include
++ * the dummy byte.
++ */
++ csp->iob->eod++;
++ }
++ else
++ {
++ log_error (LOG_LEVEL_ERROR,
++ "Unable to determine compression format for decompression");
++ return JB_ERR_GENERIC;
++ }
++
++ /* Set up the fields required by zlib. */
++ zstr.next_in = csp->iob->cur;
++ zstr.avail_in = csp->iob->eod - csp->iob->cur;
++ zstr.zalloc = Z_NULL;
++ zstr.zfree = Z_NULL;
++ zstr.opaque = Z_NULL;
++
++ /* Passing -MAX_WBITS to inflateInit2 tells the library
++ * that there is no zlib header.
++ */
++ if (inflateInit2 (&zstr, -MAX_WBITS) != Z_OK)
++ {
++ log_error (LOG_LEVEL_ERROR,
++ "Error initializing decompression");
++ return JB_ERR_GENERIC;
++ }
++
++ /* Next, we allocate new storage for the inflated data.
++ * We don't modify the existing iob yet, so in case there
++ * is error in decompression we can recover gracefully.
++ */
++ buf = zalloc (bufsize);
++ if (NULL == buf)
++ {
++ log_error (LOG_LEVEL_ERROR,
++ "Out of memory decompressing iob");
++ return JB_ERR_MEMORY;
++ }
++
++ assert(bufsize >= skip_size);
++ memcpy(buf, csp->iob->buf, skip_size);
++ zstr.avail_out = bufsize - skip_size;
++ zstr.next_out = buf + skip_size;
++
++ /* Try to decompress the whole stream in one shot. */
++ while (Z_BUF_ERROR == (status = inflate(&zstr, Z_FINISH)))
++ {
++ /* We need to allocate more memory for the output buffer. */
++
++ char *tmpbuf; /* used for realloc'ing the buffer */
++ int oldbufsize = bufsize; /* keep track of the old bufsize */
++
++ /* If zlib wants more data then there's a problem, because
++ * the complete compressed file should have been buffered.
++ */
++ if (0 == zstr.avail_in)
++ {
++ log_error(LOG_LEVEL_ERROR,
++ "Unexpected end of compressed iob");
++ return JB_ERR_GENERIC;
++ }
++
++ /* If we tried the limit and still didn't have enough
++ * memory, just give up.
++ */
++ if (bufsize == csp->config->buffer_limit)
++ {
++ log_error(LOG_LEVEL_ERROR, "Out of memory decompressing iob");
++ return JB_ERR_MEMORY;
++ }
++
++ /* Try doubling the buffer size each time. */
++ bufsize *= 2;
++
++ /* Don't exceed the buffer limit. */
++ if (bufsize > csp->config->buffer_limit)
++ {
++ bufsize = csp->config->buffer_limit;
++ }
++
++ /* Try to allocate the new buffer. */
++ tmpbuf = realloc(buf, bufsize);
++ if (NULL == tmpbuf)
++ {
++ log_error(LOG_LEVEL_ERROR, "Out of memory decompressing iob");
++ freez(buf);
++ return JB_ERR_MEMORY;
++ }
++ else
++ {
++ char *oldnext_out = zstr.next_out;
++
++ /* Update the fields for inflate() to use the new
++ * buffer, which may be in a different location from
++ * the old one.
++ */
++ zstr.avail_out += bufsize - oldbufsize;
++ zstr.next_out = tmpbuf + bufsize - zstr.avail_out;
++
++ /* Compare with an uglier method of calculating these values
++ * that doesn't require the extra oldbufsize variable.
++ */
++ assert(zstr.avail_out ==
++ tmpbuf + bufsize - (char *)zstr.next_out);
++ assert((char *)zstr.next_out ==
++ tmpbuf + ((char *)oldnext_out - buf));
++ assert(zstr.avail_out > 0);
++
++ buf = tmpbuf;
++ }
++ }
++
++ inflateEnd(&zstr);
++ if (status != Z_STREAM_END)
++ {
++ /* We failed to decompress the stream. */
++ log_error(LOG_LEVEL_ERROR,
++ "Error in decompressing to the buffer (iob): %s",
++ zstr.msg);
++ return JB_ERR_GENERIC;
++ }
++
++ /* Finally, we can actually update the iob, since the
++ * decompression was successful. First, free the old
++ * buffer.
++ */
++ freez(csp->iob->buf);
++
++ /* Now, update the iob to use the new buffer. */
++ csp->iob->buf = buf;
++ csp->iob->cur = csp->iob->buf + skip_size;
++ csp->iob->eod = zstr.next_out;
++ csp->iob->size = bufsize;
++
++ /* Make sure the new uncompressed iob obeys some minimal
++ * consistency conditions.
++ */
++ if ((csp->iob->buf < csp->iob->cur)
++ && (csp->iob->cur <= csp->iob->eod)
++ && (csp->iob->eod <= csp->iob->buf + csp->iob->size))
++ {
++ char t = csp->iob->cur[100];
++ csp->iob->cur[100] = 0;
++ log_error(LOG_LEVEL_INFO,
++ "Sucessfully decompressed: %s", csp->iob->cur);
++ csp->iob->cur[100] = t;
++ return JB_ERR_OK;
++ }
++ else
++ {
++ /* It seems that zlib did something weird. */
++ log_error(LOG_LEVEL_ERROR,
++ "Unexpected error decompressing the buffer (iob): %d==%d, %d>%d, %d<%d", csp->iob->cur, csp->iob->buf + skip_size, csp->iob->eod, csp->iob->buf, csp->iob->eod, csp->iob->buf + csp->iob->size);
++ return JB_ERR_GENERIC;
++ }
++
++}
++#endif /* defined(FEATURE_ZLIB) */
++
++
+ /*********************************************************************
+ *
+ * Function : get_header
+@@ -937,13 +1216,59 @@
+ *********************************************************************/
+ jb_err server_content_encoding(struct client_state *csp, char **header)
+ {
++#ifdef FEATURE_ZLIB
++ if (strstr(*header, "gzip"))
++ {
++ /*
++ * If the body was modified, we have tried to
++ * decompress it, so adjust the header if necessary.
++ */
++ if ((csp->flags & CSP_FLAG_MODIFIED) /* we attempted to decompress */
++ && !(csp->content_type & CT_TABOO)) /* decompression was successful */
++ {
++ freez(*header);
++ *header = strdup("Content-Encoding: identity");
++ return (header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
++ }
++ else
++ {
++ csp->content_type |= CT_GZIP;
++ }
++ }
++ else if (strstr(*header, "deflate"))
++ {
++ /*
++ * If the body was modified, we have tried to
++ * decompress it, so adjust the header if necessary.
++ */
++ if ((csp->flags & CSP_FLAG_MODIFIED) /* we attempted to decompress */
++ && !(csp->content_type & CT_TABOO)) /* decompression was successful */
++ {
++ freez(*header);
++ *header = strdup("Content-Encoding: identity");
++ return (header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;
++ }
++ else
++ {
++ csp->content_type |= CT_DEFLATE;
++ }
++ }
++ else if (strstr(*header, "compress"))
++ {
++ /* We can't decompress this; therefore we can't filter
++ * it either.
++ */
++ csp->content_type |= CT_TABOO;
++ }
++#else /* !defined(FEATURE_GZIP) */
+ /*
+ * Turn off pcrs and gif filtering if body compressed
+ */
+ if (strstr(*header, "gzip") || strstr(*header, "compress") || strstr(*header, "deflate"))
+ {
+- csp->content_type = CT_TABOO;
++ csp->content_type |= CT_TABOO;
+ }
++#endif /* !defined(FEATURE_GZIP) */
+
+ return JB_ERR_OK;
+
+diff -Nru privoxy-3.0.3-stable.orig/parsers.h privoxy-3.0.3-stable/parsers.h
+--- privoxy-3.0.3-stable.orig/parsers.h 2002-09-25 17:52:46.000000000 +0300
++++ privoxy-3.0.3-stable/parsers.h 2006-03-29 01:19:45.361431750 +0300
+@@ -194,6 +194,7 @@
+
+ extern int flush_socket(jb_socket fd, struct client_state *csp);
+ extern jb_err add_to_iob(struct client_state *csp, char *buf, int n);
++extern jb_err decompress_iob(struct client_state *csp);
+ extern char *get_header(struct client_state *csp);
+ extern char *get_header_value(const struct list *header_list, const char *header_name);
+ extern char *sed(const struct parsers pats[], const add_header_func_ptr more_headers[], struct client_state *csp);
+diff -Nru privoxy-3.0.3-stable.orig/project.h privoxy-3.0.3-stable/project.h
+--- privoxy-3.0.3-stable.orig/project.h 2004-01-30 17:29:29.000000000 +0200
++++ privoxy-3.0.3-stable/project.h 2006-03-29 01:28:21.741703500 +0300
+@@ -563,7 +563,7 @@
+ #define JB_ERR_PARSE 4 /**< Error parsing file */
+ #define JB_ERR_MODIFIED 5 /**< File has been modified outside of the
+ CGI actions editor. */
+-
++#define JB_ERR_GENERIC 6
+
+ /**
+ * This macro is used to free a pointer that may be NULL.
+@@ -818,6 +818,15 @@
+ #define CT_TABOO 4 /**< csp->content_type bitmask:
+ DO NOT filter, irrespective of other flags. */
+
++/* Although these are not, strictly speaking, content types
++ * (they are content encodings), it is simple to handle
++ * them as such.
++ */
++#define CT_GZIP 8 /**< csp->content_type bitmask:
++ gzip-compressed data. */
++#define CT_DEFLATE 16 /**< csp->content_type bitmask:
++ zlib-compressed data. */
++
+ /**
+ * The mask which includes all actions.
+ */
+@@ -862,6 +871,8 @@
+ #define ACTION_VANILLA_WAFER 0x00008000UL
+ /** Action bitmap: Limit CONNECT requests to safe ports. */
+ #define ACTION_LIMIT_CONNECT 0x00010000UL
++/** Action bitmap: Uncompress incoming text for filtering. */
++#define ACTION_DECOMPRESS_IN 0x00020000UL
+
+ /** Action string index: How to deanimate GIFs */
+ #define ACTION_STRING_DEANIMATE 0
diff --git a/net-proxy/privoxy/privoxy-3.0.3-r4.ebuild b/net-proxy/privoxy/privoxy-3.0.3-r4.ebuild
new file mode 100644
index 000000000000..1338bbc85294
--- /dev/null
+++ b/net-proxy/privoxy/privoxy-3.0.3-r4.ebuild
@@ -0,0 +1,95 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-proxy/privoxy/privoxy-3.0.3-r4.ebuild,v 1.1 2006/03/30 16:40:08 mrness Exp $
+
+inherit toolchain-funcs eutils
+
+HOMEPAGE="http://www.privoxy.org"
+DESCRIPTION="A web proxy with advanced filtering capabilities for protecting privacy against internet junk."
+SRC_URI="mirror://sourceforge/ijbswa/${P}-stable-src.tar.gz"
+
+IUSE="pcre selinux zlib"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86"
+LICENSE="GPL-2"
+
+DEPEND="=sys-devel/autoconf-2.1*
+ pcre? ( dev-libs/libpcre )
+ zlib? ( sys-libs/zlib )"
+RDEPEND="selinux? ( sec-policy/selinux-privoxy )
+ pcre? ( dev-libs/libpcre )
+ zlib? ( sys-libs/zlib )"
+
+S="${WORKDIR}/${P}-stable"
+
+pkg_setup() {
+ enewgroup privoxy
+ enewuser privoxy -1 -1 /etc/privoxy privoxy
+}
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ # add gzip and zlib decompression
+ epatch "${FILESDIR}/${P}-zlib.patch"
+
+ rm "${S}"/autom4te.cache/{output.0,requests,traces.0}
+
+ sed -e 's:confdir .:confdir /etc/privoxy:' \
+ -e 's:logdir .:logdir /var/log/privoxy:' \
+ -e 's:logfile logfile:logfile privoxy.log:' \
+ -i "${S}/config" || die "sed failed."
+ sed -e 's:^\+set-image-blocker{pattern}:+set-image-blocker{blank}:' \
+ -i "${S}/default.action.master" || die "sed 2 failed."
+}
+
+src_compile() {
+ export WANT_AUTOCONF=2.1
+ autoheader || die "autoheader failed"
+ autoconf || die "autoconf failed"
+
+ export CC=$(tc-getCC)
+ econf \
+ $(use_enable pcre dynamic-pcre) \
+ $(use_enable zlib) \
+ --sysconfdir=/etc/privoxy || die "econf failed"
+
+ emake || die "make failed."
+}
+
+pkg_preinst() {
+ pkg_setup
+}
+
+src_install () {
+ diropts -m 0750 -g privoxy -o privoxy
+ insopts -m 0640 -g privoxy -o privoxy
+
+ keepdir /var/log/privoxy
+
+ insinto /etc/privoxy
+ doins default.action default.filter config standard.action trust user.action
+
+ insinto /etc/privoxy/templates
+ doins templates/*
+
+ doman privoxy.1
+ dodoc LICENSE README AUTHORS doc/text/faq.txt ChangeLog
+
+ insopts -m 0644 -g root -o root
+ diropts -m 0755 -g root -o root
+ local i
+ for i in developer-manual faq man-page user-manual ; do
+ insinto "/usr/share/doc/${PF}/${i}"
+ doins doc/webserver/"${i}"/*
+ done
+
+ insopts -m 0750 -g root -o root
+ insinto /usr/sbin
+ doins privoxy
+ newinitd "${FILESDIR}/privoxy.rc7" privoxy
+ insopts -m 0640
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/privoxy.logrotate" privoxy
+}