diff options
Diffstat (limited to 'pimd/pim_mroute.c')
-rw-r--r-- | pimd/pim_mroute.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index f021abaa..48213b0b 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -22,6 +22,7 @@ #include <zebra.h> #include "log.h" +#include "privs.h" #include "pimd.h" #include "pim_mroute.h" @@ -30,6 +31,9 @@ #include "pim_iface.h" #include "pim_macro.h" +/* GLOBAL VARS */ +extern struct zebra_privs_t pimd_privs; + static void mroute_read_on(void); static int pim_mroute_set(int fd, int enable) @@ -259,7 +263,16 @@ int pim_mroute_socket_enable() if (PIM_MROUTE_IS_ENABLED) return -1; + if ( pimd_privs.change (ZPRIVS_RAISE) ) + zlog_err ("pim_mroute_socket_enable: could not raise privs, %s", + safe_strerror (errno) ); + fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP); + + if ( pimd_privs.change (ZPRIVS_LOWER) ) + zlog_err ("pim_mroute_socket_enable: could not lower privs, %s", + safe_strerror (errno) ); + if (fd < 0) { zlog_warn("Could not create mroute socket: errno=%d: %s", errno, strerror(errno)); |