setsockopt_ipv4_tos(sock, IPTOS_PREC_INTERNETCONTROL);
#endif
- if (ripd_privs.change(ZPRIVS_RAISE))
- flog_err(LIB_ERR_PRIVILEGES,
- "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)
+ frr_elevate_privs(&ripd_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))
- flog_err(LIB_ERR_PRIVILEGES,
- "rip_create_socket: could not lower privs");
-
- flog_err_sys(LIB_ERR_SOCKET,
- "%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;
- }
+ {
+ int save_errno = errno;
+
+ 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));
- if (ripd_privs.change(ZPRIVS_LOWER))
- flog_err(LIB_ERR_PRIVILEGES,
- "rip_create_socket: could not lower privs");
+ close(sock);
+ return ret;
+ }
+
+ }
return sock;
}