]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/if_ioctl_solaris.c
*: use frr_elevate_privs() (1/2: coccinelle)
[mirror_frr.git] / zebra / if_ioctl_solaris.c
index 6cf98e85f58da359dd6a92c1ec9a49838ff24a6b..ee7f22e780cd2389b60c93ee25de574cae553e1d 100644 (file)
@@ -34,6 +34,7 @@
 #include "privs.h"
 #include "vrf.h"
 #include "vty.h"
+#include "lib_errors.h"
 
 #include "zebra/interface.h"
 #include "zebra/ioctl_solaris.h"
@@ -58,29 +59,24 @@ static int interface_list_ioctl(int af)
        size_t needed, lastneeded = 0;
        char *buf = NULL;
 
-       if (zserv_privs.change(ZPRIVS_RAISE))
-               zlog_err("Can't raise privileges");
-
-       sock = socket(af, SOCK_DGRAM, 0);
-       if (sock < 0) {
-               zlog_warn("Can't make %s socket stream: %s",
-                         (af == AF_INET ? "AF_INET" : "AF_INET6"),
-                         safe_strerror(errno));
+       frr_elevate_privs(&zserv_privs) {
 
-               if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("Can't lower privileges");
+               sock = socket(af, SOCK_DGRAM, 0);
+               if (sock < 0) {
+                       zlog_warn("Can't make %s socket stream: %s",
+                                 (af == AF_INET ? "AF_INET" : "AF_INET6"),
+                                 safe_strerror(errno));
 
-               return -1;
-       }
+                       return -1;
+               }
 
 calculate_lifc_len: /* must hold privileges to enter here */
-       lifn.lifn_family = af;
-       lifn.lifn_flags = LIFC_NOXMIT; /* we want NOXMIT interfaces too */
-       ret = ioctl(sock, SIOCGLIFNUM, &lifn);
-       save_errno = errno;
+               lifn.lifn_family = af;
+               lifn.lifn_flags = LIFC_NOXMIT; /* we want NOXMIT interfaces too */
+               ret = ioctl(sock, SIOCGLIFNUM, &lifn);
+               save_errno = errno;
 
-       if (zserv_privs.change(ZPRIVS_LOWER))
-               zlog_err("Can't lower privileges");
+       }
 
        if (ret < 0) {
                zlog_warn("interface_list_ioctl: SIOCGLIFNUM failed %s",
@@ -100,11 +96,7 @@ calculate_lifc_len: /* must hold privileges to enter here */
        if (needed > lastneeded || needed < lastneeded / 2) {
                if (buf != NULL)
                        XFREE(MTYPE_TMP, buf);
-               if ((buf = XMALLOC(MTYPE_TMP, needed)) == NULL) {
-                       zlog_warn("interface_list_ioctl: malloc failed");
-                       close(sock);
-                       return -1;
-               }
+               buf = XMALLOC(MTYPE_TMP, needed);
        }
        lastneeded = needed;
 
@@ -114,7 +106,7 @@ calculate_lifc_len: /* must hold privileges to enter here */
        lifconf.lifc_buf = buf;
 
        if (zserv_privs.change(ZPRIVS_RAISE))
-               zlog_err("Can't raise privileges");
+               flog_err(LIB_ERR_PRIVILEGES, "Can't raise privileges");
 
        ret = ioctl(sock, SIOCGLIFCONF, &lifconf);
 
@@ -126,13 +118,13 @@ calculate_lifc_len: /* must hold privileges to enter here */
                zlog_warn("SIOCGLIFCONF: %s", safe_strerror(errno));
 
                if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("Can't lower privileges");
+                       flog_err(LIB_ERR_PRIVILEGES, "Can't lower privileges");
 
                goto end;
        }
 
        if (zserv_privs.change(ZPRIVS_LOWER))
-               zlog_err("Can't lower privileges");
+               flog_err(LIB_ERR_PRIVILEGES, "Can't lower privileges");
 
        /* Allocate interface. */
        lifreq = lifconf.lifc_req;