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
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))
*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;