Update for Pound to 2.6:

- allow multiple AddHeader directives
    - fixed memory leak in config/AddHeader
    - fixed memory leak in DH
    - fixed problem in SNI certificate storage
    - changed long to long long for support of requests larger than 2GB
    - added parsing for certificate CN
    - fixed problem in task enqueing
    - fixed small problem in Makefile

And others, while here, GROFF is not needed and patches applied
upstream.

Ok 'Looks fine' aja@
This commit is contained in:
gonzalo 2012-09-17 13:05:14 +00:00
parent 2a572e6134
commit 076b365b14
6 changed files with 8 additions and 315 deletions

View File

@ -1,10 +1,9 @@
# $OpenBSD: Makefile,v 1.10 2012/01/26 08:03:57 ajacoutot Exp $
# $OpenBSD: Makefile,v 1.11 2012/09/17 13:05:14 gonzalo Exp $
COMMENT = HTTP reverse proxy/load balancer/SSL offload
DISTNAME = Pound-2.5
DISTNAME = Pound-2.6
PKGNAME = ${DISTNAME:L}
REVISION = 2
CATEGORIES = www
@ -29,7 +28,6 @@ CONFIGURE_ARGS += CPPFLAGS="-I${LOCALBASE}/include" \
--with-owner=root \
--with-group=bin
USE_GROFF = Yes
NO_REGRESS = Yes
pre-configure:

View File

@ -1,5 +1,2 @@
MD5 (Pound-2.5.tgz) = ijn1kCCUYZr82n0S2dg0LA==
RMD160 (Pound-2.5.tgz) = b41V7/EbJbCsDatmqskK9TgOJ1M=
SHA1 (Pound-2.5.tgz) = C8jEW5r7ZPuIELRCEzRcKmfOiow=
SHA256 (Pound-2.5.tgz) = Ed+ntGljbUOuyANFWJSzCCG6f2ZBwc/UXfUwWdOsTJU=
SIZE (Pound-2.5.tgz) = 172084
SHA256 (Pound-2.6.tgz) = CtJeNlLiIRervBenC12JE+BZkTGKVQa8dDfmYmFv3yE=
SIZE (Pound-2.6.tgz) = 180595

View File

@ -1,42 +0,0 @@
$OpenBSD: patch-config_c,v 1.1 2010/10/04 08:47:22 sthen Exp $
fix for openssl 1.0
http://www.apsis.ch/pound/pound_list/archive/2010/2010-02/1266065082000
--- config.c.orig Tue Feb 2 11:49:02 2010
+++ config.c Sun Oct 3 23:27:58 2010
@@ -431,14 +431,22 @@ t_hash(const TABNODE *e)
res = (res ^ *k++) * 16777619;
return res;
}
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+static IMPLEMENT_LHASH_HASH_FN(t, TABNODE)
+#else
static IMPLEMENT_LHASH_HASH_FN(t_hash, const TABNODE *)
+#endif
static int
t_cmp(const TABNODE *d1, const TABNODE *d2)
{
return strcmp(d1->key, d2->key);
}
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+static IMPLEMENT_LHASH_COMP_FN(t, TABNODE)
+#else
static IMPLEMENT_LHASH_COMP_FN(t_cmp, const TABNODE *)
+#endif
/*
* parse a service
@@ -460,7 +468,11 @@ parse_service(const char *svc_name)
pthread_mutex_init(&res->mut, NULL);
if(svc_name)
strncpy(res->name, svc_name, KEY_SIZE);
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ if((res->sessions = LHM_lh_new(TABNODE, t)) == NULL)
+#else
if((res->sessions = lh_new(LHASH_HASH_FN(t_hash), LHASH_COMP_FN(t_cmp))) == NULL)
+#endif
conf_err("lh_new failed - aborted");
ign_case = ignore_case;
while(conf_fgets(lin, MAXBUF)) {

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-pound_8,v 1.2 2010/10/03 22:27:53 sthen Exp $
--- pound.8.orig Tue Feb 2 11:49:02 2010
+++ pound.8 Sun Oct 3 23:27:32 2010
$OpenBSD: patch-pound_8,v 1.3 2012/09/17 13:05:14 gonzalo Exp $
--- pound.8.orig Wed Dec 28 10:57:45 2011
+++ pound.8 Tue Sep 4 17:04:51 2012
@@ -155,7 +155,7 @@ running a quick syntax check before actually activatin
\fB\-f\fR config_file
Location of the configuration file (see below for a full description of the format).
@ -10,7 +10,7 @@ $OpenBSD: patch-pound_8,v 1.2 2010/10/03 22:27:53 sthen Exp $
.TP
\fB\-p\fR pid_file
Location of the pid file.
@@ -1142,11 +1142,11 @@ this is where
@@ -1191,11 +1191,11 @@ this is where
.B Pound
will attempt to record its process id.
.TP

View File

@ -1,30 +0,0 @@
$OpenBSD: patch-pound_h,v 1.1 2010/10/04 08:47:22 sthen Exp $
fix for openssl 1.0
http://www.apsis.ch/pound/pound_list/archive/2010/2010-02/1266065082000
--- pound.h.orig Tue Feb 2 11:49:02 2010
+++ pound.h Sun Oct 3 23:27:58 2010
@@ -322,6 +322,10 @@ typedef struct _tn {
/* maximal session key size */
#define KEY_SIZE 127
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+DECLARE_LHASH_OF(TABNODE);
+#endif
+
/* service definition */
typedef struct _service {
char name[KEY_SIZE + 1]; /* symbolic name */
@@ -337,7 +341,11 @@ typedef struct _service {
int sess_ttl; /* session time-to-live */
regex_t sess_start; /* pattern to identify the session data */
regex_t sess_pat; /* pattern to match the session data */
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHASH_OF(TABNODE) *sessions; /* currently active sessions */
+#else
LHASH *sessions; /* currently active sessions */
+#endif
int dynscale; /* true if the back-ends should be dynamically rescaled */
int disabled; /* true if the service is disabled */
struct _service *next;

View File

@ -1,230 +0,0 @@
$OpenBSD: patch-svc_c,v 1.1 2010/10/04 08:47:22 sthen Exp $
fix for openssl 1.0
http://www.apsis.ch/pound/pound_list/archive/2010/2010-02/1266065082000
--- svc.c.orig Tue Feb 2 11:49:02 2010
+++ svc.c Sun Oct 3 23:27:58 2010
@@ -27,12 +27,17 @@
#include "pound.h"
+#ifndef LHASH_OF
+#define LHASH_OF(x) LHASH
+#define CHECKED_LHASH_OF(type, h) h
+#endif
+
/*
* Add a new key/content pair to a hash table
* the table should be already locked
*/
static void
-t_add(LHASH *const tab, const char *key, const void *content, const size_t cont_len)
+t_add(LHASH_OF(TABNODE) *const tab, const char *key, const void *content, const size_t cont_len)
{
TABNODE *t, *old;
@@ -53,7 +58,11 @@ t_add(LHASH *const tab, const char *key, const void *c
}
memcpy(t->content, content, cont_len);
t->last_acc = time(NULL);
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ if((old = LHM_lh_insert(TABNODE, tab, t)) != NULL) {
+#else
if((old = (TABNODE *)lh_insert(tab, t)) != NULL) {
+#endif
free(old->key);
free(old->content);
free(old);
@@ -68,12 +77,16 @@ t_add(LHASH *const tab, const char *key, const void *c
* side-effect: update the time of last access
*/
static void *
-t_find(LHASH *const tab, char *const key)
+t_find(LHASH_OF(TABNODE) *const tab, char *const key)
{
TABNODE t, *res;
t.key = key;
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ if((res = LHM_lh_retrieve(TABNODE, tab, &t)) != NULL) {
+#else
if((res = (TABNODE *)lh_retrieve(tab, &t)) != NULL) {
+#endif
res->last_acc = time(NULL);
return res->content;
}
@@ -84,12 +97,16 @@ t_find(LHASH *const tab, char *const key)
* Delete a key
*/
static void
-t_remove(LHASH *const tab, char *const key)
+t_remove(LHASH_OF(TABNODE) *const tab, char *const key)
{
TABNODE t, *res;
t.key = key;
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ if((res = LHM_lh_delete(TABNODE, tab, &t)) != NULL) {
+#else
if((res = (TABNODE *)lh_delete(tab, &t)) != NULL) {
+#endif
free(res->key);
free(res->content);
free(res);
@@ -98,59 +115,75 @@ t_remove(LHASH *const tab, char *const key)
}
typedef struct {
- LHASH *tab;
+ LHASH_OF(TABNODE) *tab;
time_t lim;
void *content;
int cont_len;
} ALL_ARG;
static void
-t_old(TABNODE *t, void *arg)
+t_old_doall_arg(TABNODE *t, ALL_ARG *a)
{
- ALL_ARG *a;
-
- a = (ALL_ARG *)arg;
if(t->last_acc < a->lim)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHM_lh_delete(TABNODE, a->tab, t);
+#else
lh_delete(a->tab, t);
+#endif
return;
}
-IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, void *)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE, ALL_ARG)
+#else
+#define t_old t_old_doall_arg
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_old, TABNODE *, ALL_ARG *)
+#endif
/*
* Expire all old nodes
*/
static void
-t_expire(LHASH *const tab, const time_t lim)
+t_expire(LHASH_OF(TABNODE) *const tab, const time_t lim)
{
ALL_ARG a;
int down_load;
a.tab = tab;
a.lim = lim;
- down_load = tab->down_load;
- tab->down_load = 0;
+ down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load;
+ CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0;
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_old), ALL_ARG, &a);
+#else
lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_old), &a);
- tab->down_load = down_load;
+#endif
+ CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load;
return;
}
static void
-t_cont(TABNODE *t, void *arg)
+t_cont_doall_arg(TABNODE *t, ALL_ARG *a)
{
- ALL_ARG *a;
-
- a = (ALL_ARG *)arg;
if(memcmp(t->content, a->content, a->cont_len) == 0)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHM_lh_delete(TABNODE, a->tab, t);
+#else
lh_delete(a->tab, t);
+#endif
return;
}
-IMPLEMENT_LHASH_DOALL_ARG_FN(t_cont, TABNODE *, void *)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_cont, TABNODE, ALL_ARG)
+#else
+#define t_cont t_cont_doall_arg
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_cont, TABNODE *, ALL_ARG *)
+#endif
/*
* Remove all nodes with the given content
*/
static void
-t_clean(LHASH *const tab, void *const content, const size_t cont_len)
+t_clean(LHASH_OF(TABNODE) *const tab, void *const content, const size_t cont_len)
{
ALL_ARG a;
int down_load;
@@ -158,10 +191,14 @@ t_clean(LHASH *const tab, void *const content, const s
a.tab = tab;
a.content = content;
a.cont_len = cont_len;
- down_load = tab->down_load;
- tab->down_load = 0;
+ down_load = CHECKED_LHASH_OF(TABNODE, tab)->down_load;
+ CHECKED_LHASH_OF(TABNODE, tab)->down_load = 0;
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHM_lh_doall_arg(TABNODE, tab, LHASH_DOALL_ARG_FN(t_cont), ALL_ARG, &a);
+#else
lh_doall_arg(tab, LHASH_DOALL_ARG_FN(t_cont), &a);
- tab->down_load = down_load;
+#endif
+ CHECKED_LHASH_OF(TABNODE, tab)->down_load = down_load;
return;
}
@@ -1410,13 +1447,11 @@ typedef struct {
} DUMP_ARG;
static void
-t_dump(TABNODE *t, void *arg)
+t_dump_doall_arg(TABNODE *t, DUMP_ARG *a)
{
- DUMP_ARG *a;
BACKEND *be, *bep;
int n_be, sz;
- a = (DUMP_ARG *)arg;
memcpy(&bep, t->content, sizeof(bep));
for(n_be = 0, be = a->backends; be; be = be->next, n_be++)
if(be == bep)
@@ -1432,19 +1467,28 @@ t_dump(TABNODE *t, void *arg)
return;
}
-IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE *, void *)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE, DUMP_ARG)
+#else
+#define t_dump t_dump_doall_arg
+IMPLEMENT_LHASH_DOALL_ARG_FN(t_dump, TABNODE *, DUMP_ARG *)
+#endif
/*
* write sessions to the control socket
*/
static void
-dump_sess(const int control_sock, LHASH *const sess, BACKEND *const backends)
+dump_sess(const int control_sock, LHASH_OF(TABNODE) *const sess, BACKEND *const backends)
{
DUMP_ARG a;
a.control_sock = control_sock;
a.backends = backends;
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ LHM_lh_doall_arg(TABNODE, sess, LHASH_DOALL_ARG_FN(t_dump), DUMP_ARG, &a);
+#else
lh_doall_arg(sess, LHASH_DOALL_ARG_FN(t_dump), &a);
+#endif
return;
}