diff options
author | paul <paul> | 2003-11-17 09:04:53 +0000 |
---|---|---|
committer | paul <paul> | 2003-11-17 09:04:53 +0000 |
commit | 27d47aa7af603720724bd219b7ef4dbdb8aaaa7b (patch) | |
tree | eda800a3527a9be061edaeef30401a5c20dc5f5f /ripngd | |
parent | b5f2c1267ef8c7694bb96aff748a866775ab1cbe (diff) |
2003-11-17 Hasso Tepper <hasso@estpak.ee>
* ripngd/ripngd.c: ripng_make_socket() add calls to raise/lower
privs.
Diffstat (limited to 'ripngd')
-rw-r--r-- | ripngd/ripngd.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index 94a5efbc..e203dc40 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -35,6 +35,7 @@ #include "plist.h" #include "routemap.h" #include "if_rmap.h" +#include "privs.h" #include "ripngd/ripngd.h" #include "ripngd/ripng_route.h" @@ -52,6 +53,8 @@ enum ripng_changed_route, }; +extern struct zebra_privs_t ripngd_privs; + /* Prototypes. */ void ripng_output_process (struct interface *, struct sockaddr_in6 *, int); @@ -153,12 +156,19 @@ ripng_make_socket (void) #endif /* SIN6_LEN */ ripaddr.sin6_port = htons (RIPNG_PORT_DEFAULT); + if (ripngd_privs.change (ZPRIVS_RAISE)) + zlog_err ("ripng_make_socket: could not raise privs"); + ret = bind (sock, (struct sockaddr *) &ripaddr, sizeof (ripaddr)); if (ret < 0) - { - zlog (NULL, LOG_ERR, "Can't bind ripng socket: %s.", strerror (errno)); - return ret; - } + { + zlog (NULL, LOG_ERR, "Can't bind ripng socket: %s.", strerror (errno)); + if (ripngd_privs.change (ZPRIVS_LOWER)) + zlog_err ("ripng_make_socket: could not lower privs"); + return ret; + } + if (ripngd_privs.change (ZPRIVS_LOWER)) + zlog_err ("ripng_make_socket: could not lower privs"); return sock; } |