#ifdef USE_QUIC
struct list quic_init_rules; /* quic-initial rules */
#endif
- struct server *srv, defsrv; /* known servers; default server configuration */
+ struct server *srv, *defsrv; /* known servers; default server configuration */
struct lbprm lbprm; /* load-balancing parameters */
int srv_act, srv_bck; /* # of servers eligible for LB (UP|!checked) AND (enabled+weight!=0) */
int served; /* # of active sessions currently being served */
goto err;
}
- srv_settings_cpy(srv_raw, &px->defsrv, 0);
+ srv_settings_cpy(srv_raw, px->defsrv, 0);
srv_raw->iweight = 0;
srv_raw->uweight = 0;
srv_raw->xprt = xprt_get(XPRT_RAW);
err_code |= ERR_ALERT | ERR_FATAL;
goto err;
}
- srv_settings_cpy(srv_ssl, &px->defsrv, 0);
+ srv_settings_cpy(srv_ssl, px->defsrv, 0);
srv_ssl->iweight = 0;
srv_ssl->uweight = 0;
srv_ssl->xprt = xprt_get(XPRT_SSL);
/* also free default-server parameters since some of them might have
* been dynamically allocated (e.g.: config hints, cookies, ssl..)
*/
- srv_free_params(&p->defsrv);
+ if (p->defsrv) {
+ srv_free_params(p->defsrv);
+ ha_free(&p->defsrv);
+ }
if (p->lbprm.proxy_deinit)
p->lbprm.proxy_deinit(p);
MT_LIST_INIT(&p->lbprm.lb_free_list);
- p->defsrv.id = "default-server";
p->conf.used_listener_id = EB_ROOT;
p->conf.used_server_id = EB_ROOT;
p->used_server_addr = EB_ROOT_UNIQUE;
defproxy->options2 |= PR_O2_INDEPSTR;
defproxy->max_out_conns = MAX_SRV_LIST;
- srv_settings_init(&defproxy->defsrv);
-
lf_expr_init(&defproxy->logformat);
lf_expr_init(&defproxy->logformat_sd);
lf_expr_init(&defproxy->format_unique_id);
proxy_free_common(defproxy);
/* default proxy specific cleanup */
- ha_free((char **)&defproxy->defsrv.conf.file);
+ ha_free((char **)&defproxy->defsrv->conf.file);
ha_free(&defproxy->defbe.name);
+ ha_free(&defproxy->defsrv);
h = defproxy->req_cap;
while (h) {
{
init_new_proxy(px);
+ /* allocate the default server section */
+ px->defsrv = calloc(1, sizeof(*px->defsrv));
+ if (!px->defsrv) {
+ memprintf(errmsg, "out of memory");
+ goto fail;
+ }
+
+ px->defsrv->id = "default-server";
+ srv_settings_init(px->defsrv);
+
if (name) {
px->id = strdup(name);
if (!px->id) {
if (name)
memprintf(errmsg, "proxy '%s': %s", name, *errmsg);
+ ha_free(&px->defsrv);
ha_free(&px->id);
counters_fe_shared_drop(px->fe_counters.shared);
counters_be_shared_drop(px->be_counters.shared);
* but its not worth trying to unroll everything here just before
* quitting.
*/
+ if (curproxy)
+ free(curproxy->defsrv);
free(curproxy);
return NULL;
}
struct eb32_node *node;
/* set default values from the specified default proxy */
- srv_settings_cpy(&curproxy->defsrv, &defproxy->defsrv, 0);
+ srv_settings_cpy(curproxy->defsrv, defproxy->defsrv, 0);
curproxy->flags = (defproxy->flags & PR_FL_DISABLED); /* Only inherit from disabled flag */
curproxy->options = defproxy->options;
/* <src> is the current proxy's default server and SSL is enabled */
BUG_ON(src->ssl_ctx.ctx != NULL); /* the SSL_CTX must never be initialized in a default-server */
- if (srv->proxy && src == &srv->proxy->defsrv && src->use_ssl == 1)
+ if (srv->proxy && src == srv->proxy->defsrv && src->use_ssl == 1)
srv->flags |= SRV_F_DEFSRV_USE_SSL;
if (src->ssl_ctx.ca_file != NULL)
skip_addr:
if (!(parse_flags & SRV_PARSE_DYNAMIC)) {
/* Copy default server settings to new server */
- srv_settings_cpy(newsrv, &curproxy->defsrv, 0);
+ srv_settings_cpy(newsrv, curproxy->defsrv, 0);
} else
srv_settings_init(newsrv);
HA_SPIN_INIT(&newsrv->lock);
}
else {
- *srv = newsrv = &curproxy->defsrv;
+ *srv = newsrv = curproxy->defsrv;
*cur_arg = 1;
}