diff --git a/Makefile b/Makefile index e8110bd2e..2ff6cd38b 100644 --- a/Makefile +++ b/Makefile @@ -878,7 +878,7 @@ OBJS += src/mux_h2.o src/mux_fcgi.o src/http_ana.o src/stream.o \ src/ebistree.o src/auth.o src/wdt.o src/http_acl.o \ src/hpack-enc.o src/hpack-huff.o src/ebtree.o src/base64.o \ src/hash.o src/dgram.o src/version.o src/fix.o src/mqtt.o src/dns.o \ - src/server_state.o src/proto_uxdg.o src/init.o + src/server_state.o src/proto_uxdg.o src/init.o src/cfgdiag.o ifneq ($(TRACE),) OBJS += src/calltrace.o diff --git a/include/haproxy/cfgdiag.h b/include/haproxy/cfgdiag.h new file mode 100644 index 000000000..6ec84b1e1 --- /dev/null +++ b/include/haproxy/cfgdiag.h @@ -0,0 +1,11 @@ +#ifndef _HAPROXY_CFGDIAG_H +#define _HAPROXY_CFGDIAG_H + +/* Placeholder to execute various diagnostic checks after the configuration file + * has been fully parsed. It will output a warning for each diagnostic found. + * + * Returns 0 if no diagnostic message has been found else 1. + */ +int cfg_run_diagnostics(); + +#endif /* _HAPROXY_CFGDIAG_H */ diff --git a/src/cfgdiag.c b/src/cfgdiag.c new file mode 100644 index 000000000..35c8e67d9 --- /dev/null +++ b/src/cfgdiag.c @@ -0,0 +1,45 @@ +#include +#include + +#include +#include + +/* Use this fonction to emit diagnostic. + * This can be used as a shortcut to set value pointed by to 1 at the + * same time. + */ +static inline void diag_warning(int *ret, char *fmt, ...) +{ + va_list argp; + + va_start(argp, fmt); + *ret = 1; + _ha_vdiag_warning(fmt, argp); + va_end(argp); +} + +/* Use this for dynamic allocation in diagnostics. + * In case of allocation failure, this will immediately terminates haproxy. + */ +static inline void *diag_alloc(size_t size) +{ + void *out = NULL; + + if (!(out = malloc(size))) { + fprintf(stderr, "out of memory\n"); + exit(1); + } + + return out; +} + +/* Placeholder to execute various diagnostic checks after the configuration file + * has been fully parsed. It will output a warning for each diagnostic found. + * + * Returns 0 if no diagnostic message has been found else 1. + */ +int cfg_run_diagnostics() +{ + int ret = 0; + return ret; +} diff --git a/src/haproxy.c b/src/haproxy.c index aeb92e6b0..e7d30b01f 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -87,6 +87,7 @@ #include #include #include +#include #include #include #include @@ -1806,6 +1807,10 @@ static void init(int argc, char **argv) exit(2); } + if (global.mode & MODE_DIAG) { + cfg_run_diagnostics(); + } + /* now we know the buffer size, we can initialize the channels and buffers */ init_buffer();