]> git.proxmox.com Git - mirror_frr.git/blobdiff - pimd/pim_sock.c
lib: enforce vrf_name_to_id by returning default_vrf when name is null
[mirror_frr.git] / pimd / pim_sock.c
index fb0d6b5064e78a20dc83e88923363dee89ad5d8d..c4538a4ac52e83d4ccbae8d25b88320c981899f4 100644 (file)
@@ -33,6 +33,7 @@
 #include "if.h"
 #include "vrf.h"
 #include "sockopt.h"
+#include "lib_errors.h"
 
 #include "pimd.h"
 #include "pim_mroute.h"
@@ -45,15 +46,11 @@ int pim_socket_raw(int protocol)
 {
        int fd;
 
-       if (pimd_privs.change(ZPRIVS_RAISE))
-               zlog_err("pim_sockek_raw: could not raise privs, %s",
-                        safe_strerror(errno));
+       frr_elevate_privs(&pimd_privs) {
 
-       fd = socket(AF_INET, SOCK_RAW, protocol);
+               fd = socket(AF_INET, SOCK_RAW, protocol);
 
-       if (pimd_privs.change(ZPRIVS_LOWER))
-               zlog_err("pim_socket_raw: could not lower privs, %s",
-                        safe_strerror(errno));
+       }
 
        if (fd < 0) {
                zlog_warn("Could not create raw socket: errno=%d: %s", errno,
@@ -68,17 +65,13 @@ void pim_socket_ip_hdr(int fd)
 {
        const int on = 1;
 
-       if (pimd_privs.change(ZPRIVS_RAISE))
-               zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__,
-                        safe_strerror(errno));
+       frr_elevate_privs(&pimd_privs) {
 
-       if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)))
-               zlog_err("%s: Could not turn on IP_HDRINCL option: %s",
-                        __PRETTY_FUNCTION__, safe_strerror(errno));
+               if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)))
+                       zlog_err("%s: Could not turn on IP_HDRINCL option: %s",
+                                __PRETTY_FUNCTION__, safe_strerror(errno));
 
-       if (pimd_privs.change(ZPRIVS_LOWER))
-               zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__,
-                        safe_strerror(errno));
+       }
 }
 
 /*
@@ -90,16 +83,12 @@ int pim_socket_bind(int fd, struct interface *ifp)
        int ret = 0;
 #ifdef SO_BINDTODEVICE
 
-       if (pimd_privs.change(ZPRIVS_RAISE))
-               zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__,
-                        safe_strerror(errno));
+       frr_elevate_privs(&pimd_privs) {
 
-       ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name,
-                        strlen(ifp->name));
+               ret = setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifp->name,
+                                strlen(ifp->name));
 
-       if (pimd_privs.change(ZPRIVS_LOWER))
-               zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__,
-                        safe_strerror(errno));
+       }
 
 #endif
        return ret;
@@ -161,7 +150,8 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp,
                                fd, errno, safe_strerror(errno));
                }
 #else
-               zlog_err(
+               flog_err(
+                       EC_LIB_DEVELOPMENT,
                        "%s %s: Missing IP_PKTINFO and IP_RECVDSTADDR: unable to get dst addr from recvmsg()",
                        __FILE__, __PRETTY_FUNCTION__);
                close(fd);
@@ -298,7 +288,8 @@ int pim_socket_join(int fd, struct in_addr group, struct in_addr ifaddr,
                               sizeof(ifaddr_str)))
                        sprintf(ifaddr_str, "<ifaddr?>");
 
-               zlog_err(
+               flog_err(
+                       EC_LIB_SOCKET,
                        "Failure socket joining fd=%d group %s on interface address %s: errno=%d: %s",
                        fd, group_str, ifaddr_str, errno, safe_strerror(errno));
                return ret;