MEDIUM: improve config check return codes
When checking a configuration file using "-c -f xxx", sometimes it is
reported that a config is valid while it will later fail (eg: no enabled
listener). Instead, let's improve the return values :
- return 0 if config is 100% OK
- return 1 if config has errors
- return 2 if config is OK but no listener nor peer is enabled
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 6fa549a..73b7f71 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -5574,12 +5574,6 @@
proxy = next;
}
- if ((curproxy = proxy) == NULL) {
- Alert("config : no <listen> line. Nothing to do !\n");
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
while (curproxy != NULL) {
struct switching_rule *rule;
struct sticking_rule *mrule;
diff --git a/src/haproxy.c b/src/haproxy.c
index 363f306..66cf18f 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -548,8 +548,24 @@
}
if (global.mode & MODE_CHECK) {
- qfprintf(stdout, "Configuration file is valid\n");
- exit(0);
+ struct peers *pr;
+ struct proxy *px;
+
+ for (pr = peers; pr; pr = pr->next)
+ if (pr->peers_fe)
+ break;
+
+ for (px = proxy; px; px = px->next)
+ if (px->state == PR_STNEW && px->listen)
+ break;
+
+ if (pr || px) {
+ /* At least one peer or one listener has been found */
+ qfprintf(stdout, "Configuration file is valid\n");
+ exit(0);
+ }
+ qfprintf(stdout, "Configuration file has no error but will not start (no listener) => exit(2).\n");
+ exit(2);
}
global_listener_queue_task = task_new();