Mercurial > hg > dhcpcd
changeset 5146:389bc505382e draft
privsep: Don't abort if we fail to init a protocol.
It's only an error if we cannot init anything.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Thu, 16 Apr 2020 21:00:58 +0100 |
| parents | c0341181c51f |
| children | e90134cc9520 |
| files | src/privsep-inet.c |
| diffstat | 1 files changed, 21 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/src/privsep-inet.c Wed Apr 15 16:50:32 2020 +0100 +++ b/src/privsep-inet.c Thu Apr 16 21:00:58 2020 +0100 @@ -99,37 +99,37 @@ close(ctx->ps_data_fd); ctx->ps_data_fd = -1; + errno = 0; + #ifdef INET if ((ctx->options & (DHCPCD_IPV4 | DHCPCD_MASTER)) == (DHCPCD_IPV4 | DHCPCD_MASTER)) { ctx->udp_fd = dhcp_openudp(NULL); - if (ctx->udp_fd == -1) { + if (ctx->udp_fd == -1) logerr("%s: dhcp_open", __func__); - return -1; - } - if (eloop_event_add(ctx->eloop, ctx->udp_fd, + else if (eloop_event_add(ctx->eloop, ctx->udp_fd, ps_inet_recvbootp, ctx) == -1) { logerr("%s: eloop_event_add DHCP", __func__); - return -1; - } - ret++; + close(ctx->udp_fd); + ctx->udp_fd = -1; + } else + ret++; } #endif #if defined(INET6) && !defined(__sun) if (ctx->options & DHCPCD_IPV6) { - if (ipv6nd_open(ctx) == -1) { + if (ipv6nd_open(ctx) == -1) logerr("%s: ipv6nd_open", __func__); - return -1; - } - if (eloop_event_add(ctx->eloop, ctx->nd_fd, + else if (eloop_event_add(ctx->eloop, ctx->nd_fd, ps_inet_recvra, ctx) == -1) { logerr("%s: eloop_event_add RA", __func__); - return -1; - } - ret++; + close(ctx->nd_fd); + ctx->nd_fd = -1; + } else + ret++; } #endif #ifdef DHCP6 @@ -137,21 +137,20 @@ (DHCPCD_DHCP6 | DHCPCD_MASTER)) { ctx->dhcp6_fd = dhcp6_openudp(0, NULL); - if (ctx->dhcp6_fd == -1) { + if (ctx->dhcp6_fd == -1) logerr("%s: dhcp6_open", __func__); - return -1; - } - if (eloop_event_add(ctx->eloop, ctx->dhcp6_fd, + else if (eloop_event_add(ctx->eloop, ctx->dhcp6_fd, ps_inet_recvdhcp6, ctx) == -1) { logerr("%s: eloop_event_add DHCP6", __func__); - return -1; - } - ret++; + close(ctx->dhcp6_fd); + ctx->dhcp6_fd = -1; + } else + ret++; } #endif - if (ret == 0) { + if (ret == 0 && errno == 0) { errno = ENXIO; return -1; }
