summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2004-05-11 10:55:22 +0000
committerpaul <paul>2004-05-11 10:55:22 +0000
commit48a46fa0c35f8f46e482ed1fef8b4bf63e413e0a (patch)
treebbc9032e718f6de580b87752e6cbb0a6a34a4359
parent19877dd2dcc9f2a9ce7ca557441ac1fc4f80faa1 (diff)
2004-05-11 Paul Jakma <paul@dishone.st>
* Makefile.am: support for IOCTL_METHOD, as per Sowmini's patch. * if_ioctl_solaris.c: Fixup some erroneous privilege changes and add privs.h header. * ioctl_solaris.c: ditto
-rw-r--r--zebra/ChangeLog5
-rw-r--r--zebra/if_ioctl_solaris.c15
-rw-r--r--zebra/ioctl_solaris.c46
3 files changed, 13 insertions, 53 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog
index 8381cf32..d453aea1 100644
--- a/zebra/ChangeLog
+++ b/zebra/ChangeLog
@@ -1,7 +1,10 @@
2004-05-11 Paul Jakma <paul@dishone.st>
* Makefile.am: support for IOCTL_METHOD, as per Sowmini's patch.
-
+ * if_ioctl_solaris.c: Fixup some erroneous privilege changes and
+ add privs.h header.
+ * ioctl_solaris.c: ditto
+
2004-05-09 Paul Jakma <paul@dishone.st>
* zserv.c: (zsend_route_multipath) Set the nexthop_num
diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c
index b07580c2..9441abed 100644
--- a/zebra/if_ioctl_solaris.c
+++ b/zebra/if_ioctl_solaris.c
@@ -29,13 +29,14 @@
#include "connected.h"
#include "memory.h"
#include "log.h"
+#include "privs.h"
#include "zebra/interface.h"
void lifreq_set_name (struct lifreq *, struct interface *);
static int if_get_addr (struct interface *, struct sockaddr *);
static void interface_info_ioctl (struct interface *);
-
+extern struct zebra_privs_t zserv_privs;
int
interface_list_ioctl (int af)
@@ -161,9 +162,6 @@ if_get_index (struct interface *ifp)
lifreq_set_name (&lifreq, ifp);
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
if (ifp->flags & IFF_IPV4)
ret = AF_IOCTL (AF_INET, SIOCGLIFINDEX, (caddr_t) & lifreq);
else if (ifp->flags & IFF_IPV6)
@@ -171,9 +169,6 @@ if_get_index (struct interface *ifp)
else
ret = -1;
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
-
if (ret < 0)
{
zlog_warn ("SIOCGLIFINDEX(%s) failed", ifp->name);
@@ -221,13 +216,7 @@ if_get_addr (struct interface *ifp, struct sockaddr *addr)
if (ifp->flags & IFF_POINTOPOINT)
{
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
ret = AF_IOCTL (af, SIOCGLIFDSTADDR, (caddr_t) & lifreq);
-
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
{
diff --git a/zebra/ioctl_solaris.c b/zebra/ioctl_solaris.c
index 2fdffc61..805a9ca0 100644
--- a/zebra/ioctl_solaris.c
+++ b/zebra/ioctl_solaris.c
@@ -27,10 +27,12 @@
#include "prefix.h"
#include "ioctl.h"
#include "log.h"
+#include "privs.h"
#include "zebra/rib.h"
#include "zebra/rt.h"
+extern struct zebra_privs_t zserv_privs;
/* clear and set interface name string */
void
@@ -130,18 +132,12 @@ if_get_metric (struct interface *ifp)
lifreq_set_name (&lifreq, ifp);
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
if (ifp->flags & IFF_IPV4)
ret = AF_IOCTL (AF_INET, SIOCGLIFMETRIC, (caddr_t) & lifreq);
else if (ifp->flags & IFF_IPV6)
ret = AF_IOCTL (AF_INET6, SIOCGLIFMETRIC, (caddr_t) & lifreq);
else
ret = -1;
-
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
if (ret < 0)
return;
@@ -159,9 +155,6 @@ if_get_mtu (struct interface *ifp)
struct lifreq lifreq;
int ret;
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
if (ifp->flags & IFF_IPV4)
{
lifreq_set_name (&lifreq, ifp);
@@ -180,7 +173,6 @@ if_get_mtu (struct interface *ifp)
if ((ifp->flags & IFF_IPV6) == 0)
- goto out;
lifreq_set_name (&lifreq, ifp);
ret = AF_IOCTL (AF_INET6, SIOCGLIFMTU, (caddr_t) & lifreq);
@@ -193,10 +185,6 @@ if_get_mtu (struct interface *ifp)
{
ifp->mtu6 = lifreq.lifr_metric;
}
-
-out:
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
}
/* Set up interface's address, netmask (and broadcast? ).
@@ -241,7 +229,7 @@ if_set_prefix (struct interface *ifp, struct connected *ifc)
memcpy (&ifreq.ifr_broadaddr, &broad, sizeof (struct sockaddr_in));
ret = if_ioctl (SIOCSIFBRDADDR, (caddr_t) & ifreq);
if (ret < 0)
- goto out;
+ return ret;
}
mask.sin_family = p->family;
@@ -249,7 +237,7 @@ if_set_prefix (struct interface *ifp, struct connected *ifc)
memcpy (&mask, &ifreq.ifr_addr, sizeof (mask));
#else
memcpy (&ifreq.ifr_netmask, &mask, sizeof (struct sockaddr_in));
-#endif /* SUNOS5 */
+#endif /* SUNOS_5 */
ret = if_ioctl (SIOCSIFNETMASK, (caddr_t) & ifreq);
return ((ret < 0) ? ret : 0);
@@ -293,13 +281,7 @@ if_get_flags (struct interface *ifp)
{
lifreq_set_name (&lifreq, ifp);
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
ret = AF_IOCTL (AF_INET, SIOCGLIFFLAGS, (caddr_t) & lifreq);
-
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
flags4 = (lifreq.lifr_flags & 0xffffffff);
if (!(flags4 & IFF_UP))
@@ -310,13 +292,7 @@ if_get_flags (struct interface *ifp)
{
lifreq_set_name (&lifreq, ifp);
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
ret = AF_IOCTL (AF_INET6, SIOCGLIFFLAGS, (caddr_t) & lifreq);
-
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
flags6 = (lifreq.lifr_flags & 0xffffffff);
if (!(flags6 & IFF_UP))
@@ -338,9 +314,6 @@ if_set_flags (struct interface *ifp, unsigned long flags)
lifreq.lifr_flags = ifp->flags;
lifreq.lifr_flags |= flags;
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
if (ifp->flags & IFF_IPV4)
ret = AF_IOCTL (AF_INET, SIOCSLIFFLAGS, (caddr_t) & lifreq);
else if (ifp->flags & IFF_IPV6)
@@ -353,9 +326,8 @@ if_set_flags (struct interface *ifp, unsigned long flags)
strerror (errno));
else
ret = 0;
-
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
+
+ return ret;
}
/* Unset interface's flag. */
@@ -370,9 +342,6 @@ if_unset_flags (struct interface *ifp, unsigned long flags)
lifreq.lifr_flags = ifp->flags;
lifreq.lifr_flags &= ~flags;
- if (zserv_privs.change(ZPRIVS_RAISE))
- zlog (NULL, LOG_ERR, "Can't raise privileges");
-
if (ifp->flags & IFF_IPV4)
ret = AF_IOCTL (AF_INET, SIOCSLIFFLAGS, (caddr_t) & lifreq);
else if (ifp->flags & IFF_IPV6)
@@ -385,8 +354,7 @@ if_unset_flags (struct interface *ifp, unsigned long flags)
else
ret = 0;
- if (zserv_privs.change(ZPRIVS_LOWER))
- zlog (NULL, LOG_ERR, "Can't lower privileges");
+ return ret;
}
#ifdef HAVE_IPV6