MINOR: backend: srv_queue helper

In preparation of providing further server converters, split the code
for finding the server from the sample out.

Additionally, update the documentation for srv_queue converter to note
security concerns.
This commit is contained in:
Chris Staite 2025-09-26 09:04:28 +01:00 committed by Willy Tarreau
parent b3b910cc3f
commit faba98c85f
2 changed files with 15 additions and 7 deletions

View File

@ -21410,7 +21410,10 @@ srv_queue
format and returns the number of queued streams on that server. Can be used
in places where we want to look up queued streams from a dynamic name, like a
cookie value (e.g. req.cook(SRVID),srv_queue) and then make a decision to break
persistence or direct a request elsewhere.
persistence or direct a request elsewhere. Before using this, please keep in
mind that using this converter on uncontrolled data might allow an external
observer to query the state of any server in the whole configuration, which
might possibly not be acceptable in some environments.
strcmp(<var>)
Compares the contents of <var> with the input value of type string. Returns

View File

@ -3738,11 +3738,9 @@ static int sample_conv_nbsrv(const struct arg *args, struct sample *smp, void *p
return 1;
}
static int
sample_conv_srv_queue(const struct arg *args, struct sample *smp, void *private)
static struct server *sample_conv_srv(struct sample *smp)
{
struct proxy *px;
struct server *srv;
char *bksep;
if (!smp_make_safe(smp))
@ -3754,15 +3752,22 @@ sample_conv_srv_queue(const struct arg *args, struct sample *smp, void *private)
*bksep = '\0';
px = proxy_find_by_name(smp->data.u.str.area, PR_CAP_BE, 0);
if (!px)
return 0;
return NULL;
smp->data.u.str.area = bksep + 1;
} else {
if (!(smp->px->cap & PR_CAP_BE))
return 0;
return NULL;
px = smp->px;
}
srv = server_find(px, smp->data.u.str.area);
return server_find(px, smp->data.u.str.area);
}
static int
sample_conv_srv_queue(const struct arg *args, struct sample *smp, void *private)
{
struct server *srv = sample_conv_srv(smp);
if (!srv)
return 0;