]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/ipforward_solaris.c
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[mirror_frr.git] / zebra / ipforward_solaris.c
index 88a3bb79bf6e360751a03e2db827b2c54e730d17..1a45328248be9ac8f393504eaca233a0a1d73cd8 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with GNU Zebra; see the file COPYING.  If not, write to the Free
- * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <zebra.h>
+
+#ifdef SUNOS_5
+
 #include "log.h"
 #include "prefix.h"
+#include "lib_errors.h"
 
 #include "privs.h"
 #include "zebra/ipforward.h"
+#include "zebra/zebra_errors.h"
 
 /*
 ** Solaris should define IP_DEV_NAME in <inet/ip.h>, but we'll save
@@ -67,10 +71,10 @@ static int solaris_nd(const int cmd, const char *parameter, const int value)
        else if (cmd == ND_GET)
                snprintf(nd_buf, ND_BUFFER_SIZE, "%s", parameter);
        else {
-               zlog_err(
-                       "internal error - inappropriate command given to "
-                       "solaris_nd()%s:%d",
-                       __FILE__, __LINE__);
+               flog_err_sys(EC_LIB_SYSTEM_CALL,
+                            "internal error - inappropriate command given to "
+                            "solaris_nd()%s:%d",
+                            __FILE__, __LINE__);
                return -1;
        }
 
@@ -79,33 +83,28 @@ static int solaris_nd(const int cmd, const char *parameter, const int value)
        strioctl.ic_len = ND_BUFFER_SIZE;
        strioctl.ic_dp = nd_buf;
 
-       if (zserv_privs.change(ZPRIVS_RAISE))
-               zlog_err("solaris_nd: Can't raise privileges");
-       if ((fd = open(device, O_RDWR)) < 0) {
-               zlog_warn("failed to open device %s - %s", device,
-                         safe_strerror(errno));
-               if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("solaris_nd: Can't lower privileges");
-               return -1;
-       }
-       if (ioctl(fd, I_STR, &strioctl) < 0) {
-               int save_errno = errno;
-               if (zserv_privs.change(ZPRIVS_LOWER))
-                       zlog_err("solaris_nd: Can't lower privileges");
+       frr_with_privs(&zserv_privs) {
+               if ((fd = open(device, O_RDWR)) < 0) {
+                       flog_err_sys(EC_LIB_SYSTEM_CALL,
+                                    "failed to open device %s - %s", device,
+                                    safe_strerror(errno));
+                       return -1;
+               }
+               if (ioctl(fd, I_STR, &strioctl) < 0) {
+                       close(fd);
+                       flog_err_sys(EC_LIB_SYSTEM_CALL,
+                                    "ioctl I_STR failed on device %s - %s",
+                                    device, safe_strerror(errno));
+                       return -1;
+               }
                close(fd);
-               zlog_warn("ioctl I_STR failed on device %s - %s", device,
-                         safe_strerror(save_errno));
-               return -1;
        }
-       close(fd);
-       if (zserv_privs.change(ZPRIVS_LOWER))
-               zlog_err("solaris_nd: Can't lower privileges");
 
        if (cmd == ND_GET) {
                errno = 0;
                retval = atoi(nd_buf);
                if (errno) {
-                       zlog_warn(
+                       zlog_debug(
                                "failed to convert returned value to integer - %s",
                                safe_strerror(errno));
                        retval = -1;
@@ -154,3 +153,5 @@ int ipforward_ipv6_off(void)
        (void)solaris_nd_set("ip6_forwarding", 0);
        return ipforward_ipv6();
 }
+
+#endif /* SUNOS_5 */