diff options
Diffstat (limited to 'ripd/ripd.c')
| -rw-r--r-- | ripd/ripd.c | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/ripd/ripd.c b/ripd/ripd.c index 8032cf2ec5..02ead6fde2 100644 --- a/ripd/ripd.c +++ b/ripd/ripd.c @@ -40,9 +40,11 @@ #include "md5.h" #include "keychain.h" #include "privs.h" +#include "lib_errors.h" #include "ripd/ripd.h" #include "ripd/rip_debug.h" +#include "ripd/rip_errors.h" DEFINE_QOBJ_TYPE(rip) @@ -1056,9 +1058,9 @@ static void rip_auth_md5_set(struct stream *s, struct rip_interface *ri, /* Check packet length. */ if (len < (RIP_HEADER_SIZE + RIP_RTE_SIZE)) { - zlog_err( - "rip_auth_md5_set(): packet length %ld is less than minimum length.", - len); + flog_err(RIP_ERR_PACKET, + "rip_auth_md5_set(): packet length %ld is less than minimum length.", + len); return; } @@ -1339,7 +1341,8 @@ static int rip_create_socket(void) /* Make datagram socket. */ sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock < 0) { - zlog_err("Cannot create UDP socket: %s", safe_strerror(errno)); + flog_err_sys(LIB_ERR_SOCKET, "Cannot create UDP socket: %s", + safe_strerror(errno)); exit(1); } @@ -1354,27 +1357,20 @@ static int rip_create_socket(void) setsockopt_ipv4_tos(sock, IPTOS_PREC_INTERNETCONTROL); #endif - if (ripd_privs.change(ZPRIVS_RAISE)) - zlog_err("rip_create_socket: could not raise privs"); - setsockopt_so_recvbuf(sock, RIP_UDP_RCV_BUF); - if ((ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr))) < 0) - - { - int save_errno = errno; - if (ripd_privs.change(ZPRIVS_LOWER)) - zlog_err("rip_create_socket: could not lower privs"); - - zlog_err("%s: Can't bind socket %d to %s port %d: %s", __func__, - sock, inet_ntoa(addr.sin_addr), - (int)ntohs(addr.sin_port), safe_strerror(save_errno)); - - close(sock); - return ret; + frr_elevate_privs(&ripd_privs) { + setsockopt_so_recvbuf(sock, RIP_UDP_RCV_BUF); + if ((ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr))) + < 0) { + zlog_err("%s: Can't bind socket %d to %s port %d: %s", + __func__, sock, inet_ntoa(addr.sin_addr), + (int)ntohs(addr.sin_port), + safe_strerror(errno)); + + close(sock); + return ret; + } } - if (ripd_privs.change(ZPRIVS_LOWER)) - zlog_err("rip_create_socket: could not lower privs"); - return sock; } @@ -2812,6 +2808,7 @@ DEFUN_NOSH (router_rip, return CMD_WARNING_CONFIG_FAILED; } } + VTY_PUSH_CONTEXT(RIP_NODE, rip); return CMD_SUCCESS; |
