diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-05-03 19:34:30 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-03 19:34:30 -0400 |
| commit | eaefb842ffb3d40c40f998a78e8fde080f332b0f (patch) | |
| tree | 944f533be169e99a3f8c53315628a9a2994fdda5 | |
| parent | 4a3608625c52c36acb78469e84d22faf6b58e92e (diff) | |
| parent | 16927ecd7537faac212b5de40362e36cc15379e6 (diff) | |
Merge pull request #4254 from opensourcerouting/fixes-for-6.0
[6.0] ldpd: *BSD fixes
| -rw-r--r-- | ldpd/ldpe.c | 18 | ||||
| -rw-r--r-- | ldpd/socket.c | 13 | ||||
| -rw-r--r-- | zebra/kernel_socket.c | 2 |
3 files changed, 23 insertions, 10 deletions
diff --git a/ldpd/ldpe.c b/ldpd/ldpe.c index 56af76d94e..c16d92f28b 100644 --- a/ldpd/ldpe.c +++ b/ldpd/ldpe.c @@ -139,6 +139,16 @@ ldpe(void) void ldpe_init(struct ldpd_init *init) { +#ifdef __OpenBSD__ + /* This socket must be open before dropping privileges. */ + global.pfkeysock = pfkey_init(); + if (sysdep.no_pfkey == 0) { + pfkey_ev = NULL; + thread_add_read(master, ldpe_dispatch_pfkey, NULL, global.pfkeysock, + &pfkey_ev); + } +#endif + /* drop privileges */ ldpe_privs.user = init->user; ldpe_privs.group = init->group; @@ -159,14 +169,6 @@ ldpe_init(struct ldpd_init *init) fatal("inet_pton"); if (inet_pton(AF_INET6, AllRouters_v6, &global.mcast_addr_v6) != 1) fatal("inet_pton"); -#ifdef __OpenBSD__ - global.pfkeysock = pfkey_init(); - if (sysdep.no_pfkey == 0) { - pfkey_ev = NULL; - thread_add_read(master, ldpe_dispatch_pfkey, NULL, global.pfkeysock, - &pfkey_ev); - } -#endif /* mark sockets as closed */ global.ipv4.ldp_disc_socket = -1; diff --git a/ldpd/socket.c b/ldpd/socket.c index bebd7a7d61..78a07b1ed4 100644 --- a/ldpd/socket.c +++ b/ldpd/socket.c @@ -268,9 +268,18 @@ sock_set_bindany(int fd, int enable) return (-1); } return (0); +#elif defined(IP_BINDANY) + frr_elevate_privs(&ldpd_privs) { + if (setsockopt(fd, IPPROTO_IP, IP_BINDANY, &enable, sizeof(int)) + < 0) { + log_warn("%s: error setting IP_BINDANY", __func__); + return (-1); + } + } #else - log_warnx("%s: missing SO_BINDANY and IP_FREEBIND, unable to bind " - "to a nonlocal IP address", __func__); + log_warnx( + "%s: missing SO_BINDANY, IP_FREEBIND and IP_BINDANY, unable to bind to a nonlocal IP address", + __func__); return (-1); #endif /* HAVE_SO_BINDANY */ } diff --git a/zebra/kernel_socket.c b/zebra/kernel_socket.c index 3721ed52a3..25007d6c8c 100644 --- a/zebra/kernel_socket.c +++ b/zebra/kernel_socket.c @@ -194,7 +194,9 @@ const struct message rtm_type_str[] = {{RTM_ADD, "RTM_ADD"}, {RTM_LOSING, "RTM_LOSING"}, {RTM_REDIRECT, "RTM_REDIRECT"}, {RTM_MISS, "RTM_MISS"}, +#ifdef RTM_LOCK {RTM_LOCK, "RTM_LOCK"}, +#endif /* RTM_LOCK */ #ifdef OLDADD {RTM_OLDADD, "RTM_OLDADD"}, #endif /* RTM_OLDADD */ |
