diff options
author | hasso <hasso> | 2004-07-13 03:06:51 +0000 |
---|---|---|
committer | hasso <hasso> | 2004-07-13 03:06:51 +0000 |
commit | 1c24294cc0727b2b34b925814eb6be28baa13235 (patch) | |
tree | c2077b5626de9b87d7bf0dcfe520c9406d50e600 /zebra/irdp_main.c | |
parent | f925c2c008bb15ef06b271966ac7af34c2847a7e (diff) | |
download | quagga-1c24294cc0727b2b34b925814eb6be28baa13235.tar.bz2 quagga-1c24294cc0727b2b34b925814eb6be28baa13235.tar.xz |
Creating irdp socket requires more privileges.
Diffstat (limited to 'zebra/irdp_main.c')
-rw-r--r-- | zebra/irdp_main.c | 12 |
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; |