]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: *bsd needs priviledge escalation to init PIM
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 30 Oct 2018 18:17:02 +0000 (14:17 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 31 Oct 2018 11:26:35 +0000 (07:26 -0400)
When trying to run PIM on *bsd, the kernel expects to only
allow the pim kernel socket to work if we elevate priviledges.
So do so.

This commit gets us further in the startup of PIM on *bsd
but is not sufficient to get it fully started yet.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_mroute.c

index 436e0508f3dd378cfaecf736f8610e83ade7bcf6..8ad9a28aee3799f1f5ddf7e487119453c17da7cc 100644 (file)
@@ -74,15 +74,19 @@ static int pim_mroute_set(struct pim_instance *pim, int enable)
                }
        }
 
-       opt = enable ? MRT_INIT : MRT_DONE;
-       err = setsockopt(pim->mroute_socket, IPPROTO_IP, opt, &opt, opt_len);
-       if (err) {
-               zlog_warn(
-                       "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s",
-                       __FILE__, __PRETTY_FUNCTION__, pim->mroute_socket,
-                       enable ? "MRT_INIT" : "MRT_DONE", opt, errno,
-                       safe_strerror(errno));
-               return -1;
+       frr_elevate_privs(&pimd_privs) {
+               opt = enable ? MRT_INIT : MRT_DONE;
+               err = setsockopt(pim->mroute_socket, IPPROTO_IP,
+                                opt, &opt, opt_len);
+               if (err) {
+                       zlog_warn(
+                                 "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s",
+                                 __FILE__, __PRETTY_FUNCTION__,
+                                 pim->mroute_socket,
+                                 enable ? "MRT_INIT" : "MRT_DONE", opt, errno,
+                                 safe_strerror(errno));
+                       return -1;
+               }
        }
 
 #if defined(HAVE_IP_PKTINFO)