Avoid ctld(8) crash on getaddrinfo(3) failure.

MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Edward Tomasz Napierala 2014-09-06 09:03:13 +00:00
parent 34a0189341
commit 44a5953aa1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=271187

View File

@ -561,8 +561,10 @@ portal_new(struct portal_group *pg)
static void
portal_delete(struct portal *portal)
{
TAILQ_REMOVE(&portal->p_portal_group->pg_portals, portal, p_next);
freeaddrinfo(portal->p_ai);
if (portal->p_ai != NULL)
freeaddrinfo(portal->p_ai);
free(portal->p_listen);
free(portal);
}
@ -633,8 +635,7 @@ portal_group_add_listen(struct portal_group *pg, const char *value, bool iser)
arg = portal->p_listen;
if (arg[0] == '\0') {
log_warnx("empty listen address");
free(portal->p_listen);
free(portal);
portal_delete(portal);
return (1);
}
if (arg[0] == '[') {
@ -646,8 +647,7 @@ portal_group_add_listen(struct portal_group *pg, const char *value, bool iser)
if (arg == NULL) {
log_warnx("invalid listen address %s",
portal->p_listen);
free(portal->p_listen);
free(portal);
portal_delete(portal);
return (1);
}
if (arg[0] == '\0') {
@ -657,8 +657,7 @@ portal_group_add_listen(struct portal_group *pg, const char *value, bool iser)
} else {
log_warnx("invalid listen address %s",
portal->p_listen);
free(portal->p_listen);
free(portal);
portal_delete(portal);
return (1);
}
} else {
@ -691,8 +690,7 @@ portal_group_add_listen(struct portal_group *pg, const char *value, bool iser)
if (error != 0) {
log_warnx("getaddrinfo for %s failed: %s",
portal->p_listen, gai_strerror(error));
free(portal->p_listen);
free(portal);
portal_delete(portal);
return (1);
}