mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-27 09:06:46 -04:00
[PATCH] use backends only with use_backend directive
Hello,
As it is possible to use the same name for two proxies, make sure that
use_backed & friends does not match wrong proxy when used with use_backend/
default_backend/setbe. For example, without this patch, when there is a
backend and frontend with the same name (first backend and then frontend
trying to use specific backend), the application will likely try to use
frontend instead of backend, complaining loudly about a loop.
Best regards,
Krzysztof Oledzki
This commit is contained in:
parent
106bf274c4
commit
0259419f41
1 changed files with 6 additions and 18 deletions
|
|
@ -2532,20 +2532,16 @@ int readcfgfile(const char *file)
|
|||
struct proxy *target;
|
||||
|
||||
for (target = proxy; target != NULL; target = target->next) {
|
||||
if (strcmp(target->id, curproxy->defbe.name) == 0)
|
||||
if ((target->cap & PR_CAP_BE) && !strcmp(target->id, curproxy->defbe.name))
|
||||
break;
|
||||
}
|
||||
if (target == NULL) {
|
||||
Alert("parsing %s : default backend '%s' in HTTP %s '%s' was not found !\n",
|
||||
Alert("parsing %s: default proxy '%s' with backend capability in HTTP %s '%s' was not found!\n",
|
||||
file, curproxy->defbe.name, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target == curproxy) {
|
||||
Alert("parsing %s : loop detected for default backend %s !\n", file, curproxy->defbe.name);
|
||||
cfgerr++;
|
||||
} else if (!(target->cap & PR_CAP_BE)) {
|
||||
Alert("parsing %s : default backend '%s' in HTTP %s '%s' has no backend capability !\n",
|
||||
file, curproxy->defbe.name, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target->mode != curproxy->mode) {
|
||||
Alert("parsing %s : default backend '%s' in HTTP %s '%s' is not of same mode (tcp/http) !\n",
|
||||
file, curproxy->defbe.name, proxy_type_str(curproxy), curproxy->id);
|
||||
|
|
@ -2565,20 +2561,16 @@ int readcfgfile(const char *file)
|
|||
if (exp->action != ACT_SETBE)
|
||||
continue;
|
||||
for (target = proxy; target != NULL; target = target->next) {
|
||||
if (strcmp(target->id, exp->replace) == 0)
|
||||
if ((target->cap & PR_CAP_BE) && !strcmp(target->id, exp->replace))
|
||||
break;
|
||||
}
|
||||
if (target == NULL) {
|
||||
Alert("parsing %s : backend '%s' in HTTP %s '%s' was not found !\n",
|
||||
Alert("parsing %s: proxy '%s' with backend capability in HTTP %s '%s' was not found!\n",
|
||||
file, exp->replace, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target == curproxy) {
|
||||
Alert("parsing %s : loop detected for backend %s !\n", file, exp->replace);
|
||||
cfgerr++;
|
||||
} else if (!(target->cap & PR_CAP_BE)) {
|
||||
Alert("parsing %s : target '%s' in HTTP %s '%s' has no backend capability !\n",
|
||||
file, exp->replace, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target->mode != PR_MODE_HTTP) {
|
||||
Alert("parsing %s : backend '%s' in HTTP %s '%s' is not HTTP (use 'mode http') !\n",
|
||||
file, exp->replace, proxy_type_str(curproxy), curproxy->id);
|
||||
|
|
@ -2596,21 +2588,17 @@ int readcfgfile(const char *file)
|
|||
struct proxy *target;
|
||||
|
||||
for (target = proxy; target != NULL; target = target->next) {
|
||||
if (strcmp(target->id, rule->be.name) == 0)
|
||||
if ((target->cap & PR_CAP_BE) && !strcmp(target->id, rule->be.name))
|
||||
break;
|
||||
}
|
||||
|
||||
if (target == NULL) {
|
||||
Alert("parsing %s : backend '%s' in HTTP %s '%s' was not found !\n",
|
||||
Alert("parsing %s: proxy '%s' with backend capability in HTTP %s '%s' was not found!\n",
|
||||
file, rule->be.name, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target == curproxy) {
|
||||
Alert("parsing %s : loop detected for backend %s !\n", file, rule->be.name);
|
||||
cfgerr++;
|
||||
} else if (!(target->cap & PR_CAP_BE)) {
|
||||
Alert("parsing %s : target '%s' in HTTP %s '%s' has no backend capability !\n",
|
||||
file, rule->be.name, proxy_type_str(curproxy), curproxy->id);
|
||||
cfgerr++;
|
||||
} else if (target->mode != curproxy->mode) {
|
||||
Alert("parsing %s : backend '%s' referenced in %s '%s' is of different mode !\n",
|
||||
file, rule->be.name, proxy_type_str(curproxy), curproxy->id);
|
||||
|
|
|
|||
Loading…
Reference in a new issue