[-]
[+]
|
Changed |
_service
|
@@ -3,5 +3,5 @@
- <param name="protocol">http</param><param name="host">haproxy.1wt.eu</param><param name="path">/download/1.5/src/haproxy-1.5.9.tar.gz</param></service>
+ <param name="protocol">http</param><param name="host">haproxy.1wt.eu</param><param name="path">/download/1.5/src/haproxy-1.5.10.tar.gz</param></service>
</services>
\ No newline at end of file
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/CHANGELOG
^
|
@@ -1,6 +1,24 @@
ChangeLog :
===========
+2014/12/31 : 1.5.10
+ - DOC: fix a few typos
+ - BUG/MINOR: http: fix typo: "401 Unauthorized" => "407 Unauthorized"
+ - BUG/MINOR: parse: refer curproxy instead of proxy
+ - DOC: httplog does not support 'no'
+ - MINOR: map/acl/dumpstats: remove the "Done." message
+ - BUG/MEDIUM: sample: fix random number upper-bound
+ - BUG/MEDIUM: patterns: previous fix was incomplete
+ - BUG/MEDIUM: payload: ensure that a request channel is available
+ - BUG/MINOR: tcp-check: don't condition data polling on check type
+ - BUG/MEDIUM: tcp-check: don't rely on random memory contents
+ - BUG/MEDIUM: tcp-checks: disable quick-ack unless next rule is an expect
+ - BUG/MINOR: config: fix typo in condition when propagating process binding
+ - BUG/MEDIUM: config: do not propagate processes between stopped processes
+ - BUG/MAJOR: stream-int: properly check the memory allocation return
+ - BUG/MEDIUM: memory: fix freeing logic in pool_gc2()
+ - BUG/MEDIUM: compression: correctly report zlib_mem
+
2014/11/26 : 1.5.9
- BUILD: fix "make install" to support spaces in the install dirs
- BUG/MEDIUM: checks: fix conflicts between agent checks and ssl healthchecks
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/README
^
|
@@ -1,9 +1,9 @@
----------------------
HAProxy how-to
----------------------
- version 1.5.9
+ version 1.5.10
willy tarreau
- 2014/11/25
+ 2014/12/31
1) How to build it
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/VERDATE
^
|
@@ -1,2 +1,2 @@
$Format:%ci$
-2014/11/25
+2014/12/31
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/VERSION
^
|
@@ -1 +1 @@
-1.5.9
+1.5.10
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/doc/configuration.txt
^
|
@@ -2,9 +2,9 @@
HAProxy
Configuration Manual
----------------------
- version 1.5.9
+ version 1.5.10
willy tarreau
- 2014/11/25
+ 2014/12/31
This document covers the configuration language as implemented in the version
@@ -4426,10 +4426,8 @@
This option may be set either in the frontend or the backend.
- If this option has been enabled in a "defaults" section, it can be disabled
- in a specific instance by prepending the "no" keyword before it. Specifying
- only "option httplog" will automatically clear the 'clf' mode if it was set
- by default.
+ Specifying only "option httplog" will automatically clear the 'clf' mode
+ if it was set by default.
See also : section 8 about logging.
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/examples/haproxy.spec
^
|
@@ -1,6 +1,6 @@
Summary: HA-Proxy is a TCP/HTTP reverse proxy for high availability environments
Name: haproxy
-Version: 1.5.9
+Version: 1.5.10
Release: 1
License: GPL
Group: System Environment/Daemons
@@ -76,6 +76,9 @@
%attr(0755,root,root) %config %{_sysconfdir}/rc.d/init.d/%{name}
%changelog
+* Wed Dec 31 2014 Willy Tarreau <w@1wt.eu>
+- updated to 1.5.10
+
* Wed Nov 26 2014 Willy Tarreau <w@1wt.eu>
- updated to 1.5.9
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/include/types/proto_http.h
^
|
@@ -70,7 +70,7 @@
/* indicate how we *want* the connection to behave, regardless of what is in
* the headers. We have 4 possible values right now :
- * - WANT_KAL : try to maintain keep-alive (default hwen nothing configured)
+ * - WANT_KAL : try to maintain keep-alive (default when nothing configured)
* - WANT_TUN : will be a tunnel (CONNECT).
* - WANT_SCL : enforce close on the server side
* - WANT_CLO : enforce close on both sides
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/include/types/server.h
^
|
@@ -43,7 +43,7 @@
#include <types/checks.h>
-/* server states. Only SRV_ST_DOWN indicates a down server. */
+/* server states. Only SRV_ST_STOPPED indicates a down server. */
enum srv_state {
SRV_ST_STOPPED = 0, /* the server is down. Please keep set to zero. */
SRV_ST_STARTING, /* the server is warming up (up but throttled) */
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/backend.c
^
|
@@ -552,7 +552,7 @@
(__objt_server(conn->target)->nbpend + 1) < s->be->max_ka_queue))) &&
srv_is_usable(__objt_server(conn->target))) {
/* This session was relying on a server in a previous request
- * and the proxy has "option prefer-current-server" set, so
+ * and the proxy has "option prefer-last-server" set, so
* let's try to reuse the same server.
*/
srv = __objt_server(conn->target);
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/cfgparse.c
^
|
@@ -6006,7 +6006,10 @@
from = to;
}
- if (!from->cap & PR_CAP_FE)
+ if (!(from->cap & PR_CAP_FE))
+ return;
+
+ if (from->state == PR_STSTOPPED)
return;
/* default_backend */
@@ -6601,7 +6604,7 @@
curproxy->conf.args.file = curproxy->conf.uif_file;
curproxy->conf.args.line = curproxy->conf.uif_line;
parse_logformat_string(curproxy->conf.uniqueid_format_string, curproxy, &curproxy->format_unique_id, LOG_OPT_HTTP,
- (proxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
+ (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
curproxy->conf.uif_file, curproxy->conf.uif_line);
curproxy->conf.args.file = NULL;
curproxy->conf.args.line = 0;
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/checks.c
^
|
@@ -1381,6 +1381,7 @@
struct connection *conn = check->conn;
struct protocol *proto;
int ret;
+ int quickack;
/* tcpcheck send/expect initialisation */
if (check->type == PR_O2_TCPCHK_CHK)
@@ -1436,18 +1437,23 @@
set_host_port(&conn->addr.to, check->port);
}
- if (check->type == PR_O2_TCPCHK_CHK) {
+ /* only plain tcp-check supports quick ACK */
+ quickack = check->type == 0 || check->type == PR_O2_TCPCHK_CHK;
+
+ if (check->type == PR_O2_TCPCHK_CHK && !LIST_ISEMPTY(&s->proxy->tcpcheck_rules)) {
struct tcpcheck_rule *r = (struct tcpcheck_rule *) s->proxy->tcpcheck_rules.n;
/* if first step is a 'connect', then tcpcheck_main must run it */
if (r->action == TCPCHK_ACT_CONNECT) {
tcpcheck_main(conn);
return SN_ERR_UP;
}
+ if (r->action == TCPCHK_ACT_EXPECT)
+ quickack = 0;
}
ret = SN_ERR_INTERNAL;
if (proto->connect)
- ret = proto->connect(conn, check->type, (check->type) ? 0 : 2);
+ ret = proto->connect(conn, check->type, quickack ? 2 : 0);
conn->flags |= CO_FL_WAKE_DATA;
if (s->check.send_proxy) {
conn->send_proxy_ofs = 1;
@@ -1850,7 +1856,7 @@
static void tcpcheck_main(struct connection *conn)
{
char *contentptr;
- struct tcpcheck_rule *cur = NULL;
+ struct tcpcheck_rule *cur, *next;
int done = 0, ret = 0;
struct check *check = conn->owner;
struct server *s = check->server;
@@ -1946,6 +1952,11 @@
break;
}
+ /* have 'next' point to the next rule or NULL if we're on the last one */
+ next = (struct tcpcheck_rule *)cur->list.n;
+ if (&next->list == head)
+ next = NULL;
+
if (check->current_step->action == TCPCHK_ACT_CONNECT) {
struct protocol *proto;
struct xprt_ops *xprt;
@@ -1995,7 +2006,9 @@
ret = SN_ERR_INTERNAL;
if (proto->connect)
- ret = proto->connect(conn, check->type, (check->type) ? 0 : 2);
+ ret = proto->connect(conn,
+ 1 /* I/O polling is always needed */,
+ (next && next->action == TCPCHK_ACT_EXPECT) ? 0 : 2);
conn->flags |= CO_FL_WAKE_DATA;
if (check->current_step->conn_opts & TCPCHK_OPT_SEND_PROXY) {
conn->send_proxy_ofs = 1;
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/compression.c
^
|
@@ -412,6 +412,7 @@
struct comp_ctx *ctx = opaque;
static char round = 0; /* order in deflateInit2 */
void *buf = NULL;
+ struct pool_head *pool = NULL;
if (global.maxzlibmem > 0 && (global.maxzlibmem - zlib_used_memory) < (long)(items * size))
goto end;
@@ -420,35 +421,40 @@
case 0:
if (zlib_pool_deflate_state == NULL)
zlib_pool_deflate_state = create_pool("zlib_state", size * items, MEM_F_SHARED);
- ctx->zlib_deflate_state = buf = pool_alloc2(zlib_pool_deflate_state);
+ pool = zlib_pool_deflate_state;
+ ctx->zlib_deflate_state = buf = pool_alloc2(pool);
break;
case 1:
if (zlib_pool_window == NULL)
zlib_pool_window = create_pool("zlib_window", size * items, MEM_F_SHARED);
- ctx->zlib_window = buf = pool_alloc2(zlib_pool_window);
+ pool = zlib_pool_window;
+ ctx->zlib_window = buf = pool_alloc2(pool);
break;
case 2:
if (zlib_pool_prev == NULL)
zlib_pool_prev = create_pool("zlib_prev", size * items, MEM_F_SHARED);
- ctx->zlib_prev = buf = pool_alloc2(zlib_pool_prev);
+ pool = zlib_pool_prev;
+ ctx->zlib_prev = buf = pool_alloc2(pool);
break;
case 3:
if (zlib_pool_head == NULL)
zlib_pool_head = create_pool("zlib_head", size * items, MEM_F_SHARED);
- ctx->zlib_head = buf = pool_alloc2(zlib_pool_head);
+ pool = zlib_pool_head;
+ ctx->zlib_head = buf = pool_alloc2(pool);
break;
case 4:
if (zlib_pool_pending_buf == NULL)
zlib_pool_pending_buf = create_pool("zlib_pending_buf", size * items, MEM_F_SHARED);
- ctx->zlib_pending_buf = buf = pool_alloc2(zlib_pool_pending_buf);
+ pool = zlib_pool_pending_buf;
+ ctx->zlib_pending_buf = buf = pool_alloc2(pool);
break;
}
if (buf != NULL)
- zlib_used_memory += items * size;
+ zlib_used_memory += pool->size;
end:
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/dumpstats.c
^
|
@@ -1295,8 +1295,7 @@
pat_ref_prune(appctx->ctx.map.ref);
/* return response */
- appctx->ctx.cli.msg = "Done.\n";
- appctx->st0 = STAT_CLI_PRINT;
+ appctx->st0 = STAT_CLI_PROMPT;
return 1;
}
else {
@@ -1788,8 +1787,7 @@
}
/* The set is done, send message. */
- appctx->ctx.cli.msg = "Done.\n";
- appctx->st0 = STAT_CLI_PRINT;
+ appctx->st0 = STAT_CLI_PROMPT;
return 1;
}
#ifdef USE_OPENSSL
@@ -2138,8 +2136,7 @@
}
/* The deletion is done, send message. */
- appctx->ctx.cli.msg = "Done.\n";
- appctx->st0 = STAT_CLI_PRINT;
+ appctx->st0 = STAT_CLI_PROMPT;
return 1;
}
else { /* unknown "del" parameter */
@@ -2215,8 +2212,7 @@
}
/* The add is done, send message. */
- appctx->ctx.cli.msg = "Done.\n";
- appctx->st0 = STAT_CLI_PRINT;
+ appctx->st0 = STAT_CLI_PROMPT;
return 1;
}
else { /* unknown "del" parameter */
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/memory.c
^
|
@@ -142,8 +142,7 @@
//qfprintf(stderr, "Flushing pool %s\n", entry->name);
next = entry->free_list;
while (next &&
- entry->allocated > entry->minavail &&
- entry->allocated > entry->used) {
+ (int)(entry->allocated - entry->used) > (int)entry->minavail) {
temp = next;
next = *(void **)temp;
entry->allocated--;
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/pattern.c
^
|
@@ -2096,7 +2096,7 @@
struct pat_ref *ref;
struct pattern_expr *expr;
struct pat_ref_elt *elt;
- int reuse;
+ int reuse = 0;
/* Lookup for the existing reference. */
ref = pat_ref_lookup(filename);
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/payload.c
^
|
@@ -72,6 +72,9 @@
chn = ((opt & SMP_OPT_DIR) == SMP_OPT_DIR_RES) ? s->rep : s->req;
+ if (!chn)
+ goto not_ssl_hello;
+
bleft = chn->buf->i;
data = (const unsigned char *)chn->buf->p;
@@ -276,6 +279,9 @@
chn = ((opt & SMP_OPT_DIR) == SMP_OPT_DIR_RES) ? s->rep : s->req;
+ if (!chn)
+ goto not_ssl_hello;
+
bleft = chn->buf->i;
data = (unsigned char *)chn->buf->p;
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/proto_http.c
^
|
@@ -124,7 +124,7 @@
"Content-Type: text/html\r\n"
"Proxy-Authenticate: Basic realm=\"%s\"\r\n"
"\r\n"
- "<html><body><h1>401 Unauthorized</h1>\nYou need a valid user and password to access this content.\n</body></html>\n";
+ "<html><body><h1>407 Unauthorized</h1>\nYou need a valid user and password to access this content.\n</body></html>\n";
const int http_err_codes[HTTP_ERR_SIZE] = {
@@ -9611,7 +9611,7 @@
* if prefix == "/", we don't want to add anything, otherwise it
* makes it hard for the user to configure a self-redirection.
*/
- proxy->conf.args.ctx = ARGC_RDR;
+ curproxy->conf.args.ctx = ARGC_RDR;
if (!(type == REDIRECT_TYPE_PREFIX && destination[0] == '/' && destination[1] == '\0')) {
parse_logformat_string(destination, curproxy, &rule->rdr_fmt, LOG_OPT_HTTP,
(curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/sample.c
^
|
@@ -1369,7 +1369,7 @@
/* reduce if needed. Don't do a modulo, use all bits! */
if (args && args[0].type == ARGT_UINT)
- smp->data.uint = ((uint64_t)smp->data.uint * args[0].data.uint) >> 32;
+ smp->data.uint = ((uint64_t)smp->data.uint * args[0].data.uint) / ((u64)RAND_MAX+1);
smp->type = SMP_T_UINT;
smp->flags |= SMP_F_VOL_TEST | SMP_F_MAY_CHANGE;
|
[-]
[+]
|
Changed |
_service:download_url:haproxy-1.5.10.tar.gz/src/stream_interface.c
^
|
@@ -366,7 +366,7 @@
DPRINTF(stderr, "registering handler %p for si %p (was %p)\n", app, si, si->owner);
appctx = si_alloc_appctx(si);
- if (!si)
+ if (!appctx)
return NULL;
appctx_set_applet(appctx, app);
|