diff options
Diffstat (limited to 'zebra/ioctl_solaris.c')
| -rw-r--r-- | zebra/ioctl_solaris.c | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/zebra/ioctl_solaris.c b/zebra/ioctl_solaris.c index eb68451f7c..260911ce67 100644 --- a/zebra/ioctl_solaris.c +++ b/zebra/ioctl_solaris.c @@ -31,6 +31,7 @@ #include "privs.h" #include "vty.h" #include "vrf.h" +#include "lib_errors.h" #include "zebra/rib.h" #include "zebra/rt.h" @@ -57,24 +58,19 @@ int if_ioctl(unsigned long request, caddr_t buffer) int ret; int err; - if (zserv_privs.change(ZPRIVS_RAISE)) - zlog_err("Can't raise privileges"); - - sock = socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) { - int save_errno = errno; - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); - zlog_err("Cannot create UDP socket: %s", - safe_strerror(save_errno)); - exit(1); - } + frr_elevate_privs(&zserv_privs) { + + sock = socket(AF_INET, SOCK_DGRAM, 0); + if (sock < 0) { + zlog_err("Cannot create UDP socket: %s", + safe_strerror(errno)); + exit(1); + } - if ((ret = ioctl(sock, request, buffer)) < 0) - err = errno; + if ((ret = ioctl(sock, request, buffer)) < 0) + err = errno; - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); + } close(sock); @@ -92,24 +88,19 @@ int if_ioctl_ipv6(unsigned long request, caddr_t buffer) int ret; int err; - if (zserv_privs.change(ZPRIVS_RAISE)) - zlog_err("Can't raise privileges"); - - sock = socket(AF_INET6, SOCK_DGRAM, 0); - if (sock < 0) { - int save_errno = errno; - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); - zlog_err("Cannot create IPv6 datagram socket: %s", - safe_strerror(save_errno)); - exit(1); - } + frr_elevate_privs(&zserv_privs) { + + sock = socket(AF_INET6, SOCK_DGRAM, 0); + if (sock < 0) { + zlog_err("Cannot create IPv6 datagram socket: %s", + safe_strerror(errno)); + exit(1); + } - if ((ret = ioctl(sock, request, buffer)) < 0) - err = errno; + if ((ret = ioctl(sock, request, buffer)) < 0) + err = errno; - if (zserv_privs.change(ZPRIVS_LOWER)) - zlog_err("Can't lower privileges"); + } close(sock); |
