#define SRV_F_CHK_NO_AUTO_SNI 0x20000 /* disable automatic SNI selection for healthcheck */
#define SRV_F_UDP_GSO_NOTSUPP 0x40000 /* UDP GSO is disabled due to a previous error encountered */
#define SRV_F_NAME_REFD 0x80000 /* this server's name is statically referenced (use-server, track, sample arg) */
+#define SRV_F_UMODIFIED 0x100000 /* at least one setting has been explicitely set via a server keyword */
/* configured server options for send-proxy (server->pp_opts) */
#define SRV_PP_V1 0x0001 /* proxy protocol version 1 */
{
if (!curproxy)
return 0; // nothing to do
- if ((curproxy->cap & PR_CAP_LISTEN) && !(curproxy->cap & PR_CAP_DEF)) {
- /* This is a regular proxy (not defaults). It doesn't need
- * to keep a default-server section if it still had one. We
- * want to keep it for defaults however, obviously.
- */
- if (curproxy->defsrv) {
+ /* Perform clean up of empty default-server in proxies. This is not
+ * executed for defaults section as this may still be useful.
+ */
+ if ((curproxy->cap & PR_CAP_LISTEN) && !(curproxy->cap & PR_CAP_DEF)) {
+ /* Default-server is removed if it does not define specific setting. */
+ if (curproxy->defsrv && !(curproxy->defsrv->flags & SRV_F_UMODIFIED)) {
srv_free_params(curproxy->defsrv);
srv_free(&curproxy->defsrv);
}
*/
void srv_settings_init(struct server *srv)
{
+ /* Mark server as reset. A default-server will be purged on post parsing. */
+ srv->flags &= ~SRV_F_UMODIFIED;
+
srv->check.inter = DEF_CHKINTR;
srv->check.fastinter = 0;
srv->check.downinter = 0;
parse_flags);
if (err_code & ERR_FATAL)
goto out;
+
+ /* Mark server as modified by a keyword. Prevents a
+ * default-server to be purged on post parsing.
+ */
+ newsrv->flags |= SRV_F_UMODIFIED;
}
if (!(parse_flags & SRV_PARSE_DEFAULT_SERVER)) {