Creating irdp socket requires more privileges.
diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index fab7acb..acf2f8c 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -1,3 +1,7 @@
+2004-07-13 Hasso Tepper <hasso@estpak.ee>
+
+ * irdp_main.c: Add privilege change.
+
2004-07-12 Hasso Tepper <hasso@estpak.ee>
* irdp_interface.c: follow common style while naming vty command
diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c
index dac6aea..56e4184 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 @@
{
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;