summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2003-11-17 09:04:53 +0000
committerpaul <paul>2003-11-17 09:04:53 +0000
commit27d47aa7af603720724bd219b7ef4dbdb8aaaa7b (patch)
treeeda800a3527a9be061edaeef30401a5c20dc5f5f
parentb5f2c1267ef8c7694bb96aff748a866775ab1cbe (diff)
2003-11-17 Hasso Tepper <hasso@estpak.ee>
* ripngd/ripngd.c: ripng_make_socket() add calls to raise/lower privs.
-rw-r--r--ripngd/ripngd.c18
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;
}