stable-bot: Bugfixes waiting for a release 2.4 (1), 2.3 (2), 2.2 (1)

2021-08-31 Thread stable-bot
Hi,

This is a friendly bot that watches fixes pending for the next haproxy-stable 
release!  One such e-mail is sent periodically once patches are waiting in the 
last maintenance branch, and an ideal release date is computed based on the 
severity of these fixes and their merge date.  Responses to this mail must be 
sent to the mailing list.


Last release 2.4.3 was issued on 2021-08-17.  There are currently 1 patches 
in the queue cut down this way:
- 1 MEDIUM, first one merged on 2021-08-20

Thus the computed ideal release date for 2.4.4 would be 2021-09-19, which is in 
three weeks or less.

Last release 2.3.13 was issued on 2021-08-17.  There are currently 2 
patches in the queue cut down this way:
- 2 MEDIUM, first one merged on 2021-08-20

Thus the computed ideal release date for 2.3.14 would be 2021-09-19, which is 
in three weeks or less.

Last release 2.2.16 was issued on 2021-08-17.  There are currently 1 
patches in the queue cut down this way:
- 1 MEDIUM, first one merged on 2021-08-20

Thus the computed ideal release date for 2.2.17 would be 2021-10-19, which is 
in seven weeks or less.

The current list of patches in the queue is:
 - 2.3   - MEDIUM  : sock: really fix detection of early 
connection failures in for 2.3-
 - 2.2, 2.3, 2.4 - MEDIUM  : h2: match absolute-path not 
path-absolute for :path

-- 
The haproxy stable-bot is freely provided by HAProxy Technologies to help 
improve the quality of each HAProxy release.  If you have any issue with these 
emails or if you want to suggest some improvements, please post them on the 
list so that the solutions suiting the most users can be found.



Re: [PATCH] variables cleanup/fixup

2021-08-31 Thread Willy Tarreau
On Tue, Aug 31, 2021 at 06:37:45PM +0200, Willy Tarreau wrote:
> > As such: Your patches LGTM, thanks. Please proceed :-)
> 
> Will do, and reference the issue above and update the doc regarding ifexist,
> just mentioning that it's now ignored for legacy compatibility.

I'll finally wait for Christopher next week to confirm that we can get
rid of the equivalent in SPOE. By default it protects itself against
registration of random variable names and there's a force-set-var option
to bypass that for trusted agents. In my opinion this can go since we do
not have this problem anymore, but let's confirm before risking to break
setups.

Cheers,
Willy



Re: [PATCH] variables cleanup/fixup

2021-08-31 Thread Willy Tarreau
On Tue, Aug 31, 2021 at 04:41:16PM +0200, Tim Düsterhus wrote:
> Willy,
> 
> On 8/31/21 9:07 AM, Willy Tarreau wrote:
> > I've finally implemented the replacement of the global variables table
> 
> Okay, please refer to issue #624 in the commit:
> https://github.com/haproxy/haproxy/issues/624. I believe it should be
> resolved afterwards.

Ah yes, thank you, I forgot about this one!

> > with a hash instead. However it now obviously breaks the "ifexist"
> > argument that you added to Lua's set_var() that was designed to work
> > around the growing table problem.
> > 
> > Given that the limitation used to be made on the existence of a similarly
> > named variable anywhere in the process (and not of the variable in the
> > current list), I conclude that it was only used to preserve precious
> > resources and never to conditionally set a variable in one's context.
> > As such we could simply remove this test and silently ignore the ifexist
> > argument now. Do you agree with this ? I'd really like it if we could
> > definitely get rid of this old mess!
> 
> For the record this is my the repository I care about:
> 
> https://github.com/TimWolla/haproxy-auth-request
> 
> It includes tests based on VTest. I just ran the tests with patches applied:
> 
> > $ vtest -Dhaproxy_version=2.5.0 -q -k -t 10 -C test/*.vtc
> > #top  TEST test/no_variable_leak.vtc FAILED (0.203) exit=2
> > 1 tests failed, 0 tests skipped, 19 tests passed
> 
> Naturally the no_variable_leak.vtc test 
> (https://github.com/TimWolla/haproxy-auth-request/blob/main/test/no_variable_leak.vtc)
> fails now, as it specifically tests that my detection of the ifexist
> parameter works as expected. I can simply exclude HAProxy 2.5 from that test
> and all is well.

Yeah that's the same now in 2.5-dev with the dedicated test.

> In my case I only care about not bloating HAProxy's memory usage infinitely,
> in case the backend sends sends headers with randomly generated names (these
> are exposed as req.auth_response_header.*). The fact that variables are
> unavailable to Lua is a side-effect of this, not a feature.

That's what I remembered as well, thanks for confirming!

> It would certainly be preferable for the user if they could simply use the
> variables from Lua, without needing to reference them in the config.

... and without eating all the memory :-)

> As such: Your patches LGTM, thanks. Please proceed :-)

Will do, and reference the issue above and update the doc regarding ifexist,
just mentioning that it's now ignored for legacy compatibility.

Thanks!
Willy



Re: [PATCH] variables cleanup/fixup

2021-08-31 Thread Tim Düsterhus

Willy,

On 8/31/21 9:07 AM, Willy Tarreau wrote:

I've finally implemented the replacement of the global variables table


Okay, please refer to issue #624 in the commit: 
https://github.com/haproxy/haproxy/issues/624. I believe it should be 
resolved afterwards.



with a hash instead. However it now obviously breaks the "ifexist"
argument that you added to Lua's set_var() that was designed to work
around the growing table problem.

Given that the limitation used to be made on the existence of a similarly
named variable anywhere in the process (and not of the variable in the
current list), I conclude that it was only used to preserve precious
resources and never to conditionally set a variable in one's context.
As such we could simply remove this test and silently ignore the ifexist
argument now. Do you agree with this ? I'd really like it if we could
definitely get rid of this old mess!


For the record this is my the repository I care about:

https://github.com/TimWolla/haproxy-auth-request

It includes tests based on VTest. I just ran the tests with patches applied:


$ vtest -Dhaproxy_version=2.5.0 -q -k -t 10 -C test/*.vtc
#top  TEST test/no_variable_leak.vtc FAILED (0.203) exit=2
1 tests failed, 0 tests skipped, 19 tests passed


Naturally the no_variable_leak.vtc test 
(https://github.com/TimWolla/haproxy-auth-request/blob/main/test/no_variable_leak.vtc) 
fails now, as it specifically tests that my detection of the ifexist 
parameter works as expected. I can simply exclude HAProxy 2.5 from that 
test and all is well.


In my case I only care about not bloating HAProxy's memory usage 
infinitely, in case the backend sends sends headers with randomly 
generated names (these are exposed as req.auth_response_header.*). The 
fact that variables are unavailable to Lua is a side-effect of this, not 
a feature.


It would certainly be preferable for the user if they could simply use 
the variables from Lua, without needing to reference them in the config.


As such: Your patches LGTM, thanks. Please proceed :-)


For reference I'm appending the current patch series.



Best regards
Tim Düsterhus



Bid Writing, Fundraising and Volunteering Workshops

2021-08-31 Thread NFP Workshops

NFP   WORKSHOPS
 Affordable Training Courses



Bid Writing


 Do you know the most common reasons for rejection? Are you gathering the right 
evidence? Are you making the right arguments? Are you using the right 
terminology? Are your numbers right? Are you learning from rejections? 

Are you assembling the right documents? Do you know how to create a clear and 
concise standard funding bid? Are you communicating with people or just 
excluding them? Do you know your own organisation well enough? 

Are you thinking through your projects carefully enough? Do you know enough 
about your competitors? Are you answering the questions funders will ask 
themselves about your application? Are you submitting applications correctly?
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
MON 06 SEP 2021
MON 20 SEP 2021
MON 04 OCT 2021
MON 18 OCT 2021
MON 01 NOV 2021
MON 15 NOV 2021




Trust Fundraising

 Are you applying to the right trusts? Are you applying to enough trusts? Are 
you asking for the right amount of money? Are you applying in the right ways? 
Are your projects the most fundable projects? 

Are you carrying out trust fundraising in a professional way? Are you 
delegating enough work? Are you highly productive or just very busy? Are you 
looking for trusts in all the right places? 

How do you compare with your competitors for funding? Is the rest of your 
fundraising hampering your bids to trusts? Do you understand what trusts are 
ideally looking for?
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
TUE 21 SEP 2021
TUE 19 OCT 2021
TUE 16 NOV 2021



Recruiting and Managing Volunteers

Where do you find volunteers? How do you find the right volunteers? How do you 
attract volunteers? How do you run volunteer recruitment events? How do you 
interview volunteers?  

How do you train volunteers? How do you motivate volunteers? How do you involve 
volunteers? How do you recognise volunteers? How do you recognise problems with 
volunteers? How do you learn from volunteer problems?  

How do you retain volunteers? How do you manage volunteers? What about 
volunteers and your own staff? What about younger, older and employee 
volunteers?
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
WED 08 SEP 2021
WED 03 NOV 2021



Legacy Fundraising 

Why do people make legacy gifts? What are the ethical issues? What are the 
regulations? What are the tax issues? What are the statistics? What are the 
trends? How can we integrate legacy fundraising into our other fundraising? 

What are the sources for research? How should we set a budget? How should we 
evaluate our results? How should we forecast likely income? Should we use 
consultants? How should we build a case for support? 

What media and marketing channels should we use? What about in memory giving? 
How should we setup our admin systems? What are the common problems & pitfalls?
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
WED 22 SEP 2021
WED 17 NOV 2021



Major Donor Fundraising

 Major Donor Characteristics, Motivations and Requirements. Researching and 
Screening Major Donors. Encouraging, Involving and Retaining Major Donors.

Building Relationships with Major Donors. Major Donor Events and Activities. 
Setting Up Major Donor Clubs. Asking For Major Gifts. Looking After and 
Reporting Back to Major Donors.  
 
Delivering on Major Donor Expectations. Showing Your Appreciation to Major 
Donors. Fundraising Budgets and Committees.   
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
WED 06 OCT 2021
WED 01 DEC 2021



Corporate Fundraising 

Who are these companies? Why do they get involved? What do they like? What can 
you get from them? What can you offer them? What are the differences between 
donations, sponsorship, advertising and cause related marketing? 

Are companies just like trusts? How do you find these companies? How do you 
research them? How do you contact them? How do you pitch to them? How do you 
negotiate with them? 

When should you say no? How do you draft contracts? How do you manage the 
relationships? What could go wrong? What are the tax issues? What are the legal 
considerations?
ONLINE VIA ZOOM
10.00 TO 12.30
COST £95.00
CLICK ON DATE TO BOOK YOUR PLACE
WED 20 OCT 2021
WED 15 DEC 2021



Feedback From Past Attendees
I must say I was really impressed with the course and the content. My knowledge 
and confidence has increased hugely. I got a lot from your course and a lot of 
pointers! 
I can say after years of fundraising I learnt so much from your bid writing 
course. It was a very informative day and for someone who has not written bids 
before I am definitely more confident to get involved with them. 
I found the workshops very helpful. It is a whole new area for me but the 
information you imparted has given me a lot of confidence with the direction I 
need to take and for that I am very grateful.  

[PATCH] variables cleanup/fixup

2021-08-31 Thread Willy Tarreau
Hi Tim,

I've finally implemented the replacement of the global variables table
with a hash instead. However it now obviously breaks the "ifexist"
argument that you added to Lua's set_var() that was designed to work
around the growing table problem.

Given that the limitation used to be made on the existence of a similarly
named variable anywhere in the process (and not of the variable in the
current list), I conclude that it was only used to preserve precious
resources and never to conditionally set a variable in one's context.
As such we could simply remove this test and silently ignore the ifexist
argument now. Do you agree with this ? I'd really like it if we could
definitely get rid of this old mess!

For reference I'm appending the current patch series.

Thanks!
Willy
>From 6abb2e9fd745311c091029933a86fe363d09a7fb Mon Sep 17 00:00:00 2001
From: Willy Tarreau 
Date: Tue, 31 Aug 2021 08:13:25 +0200
Subject: MINOR: vars: rename vars_init() to vars_init_head()

The vars_init() name is particularly confusing as it does not initialize
the variables code but the head of a list of variables passed in
arguments. And we'll soon need to have proper initialization code, so
let's rename it now.
---
 include/haproxy/vars.h | 2 +-
 src/haproxy.c  | 2 +-
 src/http_ana.c | 6 +++---
 src/session.c  | 2 +-
 src/stream.c   | 6 +++---
 src/tcpcheck.c | 2 +-
 src/vars.c | 4 ++--
 7 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/include/haproxy/vars.h b/include/haproxy/vars.h
index f809c62d5..fedc8ca15 100644
--- a/include/haproxy/vars.h
+++ b/include/haproxy/vars.h
@@ -29,7 +29,7 @@
 
 extern struct vars proc_vars;
 
-void vars_init(struct vars *vars, enum vars_scope scope);
+void vars_init_head(struct vars *vars, enum vars_scope scope);
 void var_accounting_diff(struct vars *vars, struct session *sess, struct 
stream *strm, int size);
 unsigned int var_clear(struct var *var);
 void vars_prune(struct vars *vars, struct session *sess, struct stream *strm);
diff --git a/src/haproxy.c b/src/haproxy.c
index db957256e..32a08441d 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1529,7 +1529,7 @@ static void init(int argc, char **argv)
hlua_init();
 
/* Initialize process vars */
-   vars_init(&proc_vars, SCOPE_PROC);
+   vars_init_head(&proc_vars, SCOPE_PROC);
 
global.tune.options |= GTUNE_USE_SELECT;  /* select() is always 
available */
 #if defined(USE_POLL)
diff --git a/src/http_ana.c b/src/http_ana.c
index b36054088..3443f7ec4 100644
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -2955,7 +2955,7 @@ int http_eval_after_res_rules(struct stream *s)
if (s->vars_reqres.scope != SCOPE_RES) {
if (!LIST_ISEMPTY(&s->vars_reqres.head))
vars_prune(&s->vars_reqres, s->sess, s);
-   vars_init(&s->vars_reqres, SCOPE_RES);
+   vars_init_head(&s->vars_reqres, SCOPE_RES);
}
 
ret = http_res_get_intercept_rule(s->be, &s->be->http_after_res_rules, 
s);
@@ -5083,8 +5083,8 @@ struct http_txn *http_create_txn(struct stream *s)
 
txn->auth.method = HTTP_AUTH_UNKNOWN;
 
-   vars_init(&s->vars_txn,SCOPE_TXN);
-   vars_init(&s->vars_reqres, SCOPE_REQ);
+   vars_init_head(&s->vars_txn,SCOPE_TXN);
+   vars_init_head(&s->vars_reqres, SCOPE_REQ);
 
return txn;
 }
diff --git a/src/session.c b/src/session.c
index 92d03eaed..7ad5cbb3e 100644
--- a/src/session.c
+++ b/src/session.c
@@ -47,7 +47,7 @@ struct session *session_new(struct proxy *fe, struct listener 
*li, enum obj_type
sess->accept_date = date; /* user-visible date for logging */
sess->tv_accept   = now;  /* corrected date for internal use */
memset(sess->stkctr, 0, sizeof(sess->stkctr));
-   vars_init(&sess->vars, SCOPE_SESS);
+   vars_init_head(&sess->vars, SCOPE_SESS);
sess->task = NULL;
sess->t_handshake = -1; /* handshake not done yet */
sess->t_idle = -1;
diff --git a/src/stream.c b/src/stream.c
index 132ee3abd..27062ea4b 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -451,8 +451,8 @@ struct stream *stream_new(struct session *sess, enum 
obj_type *origin, struct bu
/* Initialise all the variables contexts even if not used.
 * This permits to prune these contexts without errors.
 */
-   vars_init(&s->vars_txn,SCOPE_TXN);
-   vars_init(&s->vars_reqres, SCOPE_REQ);
+   vars_init_head(&s->vars_txn,SCOPE_TXN);
+   vars_init_head(&s->vars_reqres, SCOPE_REQ);
 
/* this part should be common with other protocols */
if (si_reset(&s->si[0]) < 0)
@@ -2201,7 +2201,7 @@ struct task *process_stream(struct task *t, void 
*context, unsigned int state)
if (s->vars_reqres.scope != SCOPE_RES) {
if (!LIST_ISEMPTY(&s->vars_reqres.head))