summaryrefslogtreecommitdiff
path: root/zebra/irdp_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/irdp_main.c')
-rw-r--r--zebra/irdp_main.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c
index dac6aea1..56e41840 100644
--- a/zebra/irdp_main.c
+++ b/zebra/irdp_main.c
@@ -50,6 +50,7 @@
#include "log.h"
#include "zclient.h"
#include "thread.h"
+#include "privs.h"
#include "zebra/interface.h"
#include "zebra/rtadv.h"
#include "zebra/rib.h"
@@ -64,6 +65,8 @@
/* GLOBAL VARS */
+extern struct zebra_privs_t zserv_privs;
+
/* Master of threads. */
extern struct zebra_t zebrad;
struct thread *t_irdp_raw;
@@ -98,7 +101,16 @@ irdp_sock_init (void)
{
int ret, i;
+ if ( zserv_privs.change (ZPRIVS_RAISE) )
+ zlog_err ("irdp_sock_init: could not raise privs, %s",
+ strerror (errno) );
+
irdp_sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
+
+ if ( zserv_privs.change (ZPRIVS_LOWER) )
+ zlog_err ("irdp_sock_init: could not lower privs, %s",
+ strerror (errno) );
+
if (irdp_sock < 0) {
zlog_warn ("IRDP: can't create irdp socket %s", strerror(errno));
return irdp_sock;