Attention is currently required from: Arne Schwabe.

Hello Arne Schwabe,

I'd like you to do a code review.
Please visit

    https://gerrit.openvpn.net/c/openvpn/+/2150?usp=email

to review the following change.


Change subject: route: add route_exec() for the per-OS route commands
......................................................................

route: add route_exec() for the per-OS route commands

The non-Linux, non-Windows add and delete paths all log the route
command, run it with openvpn_execve_check() and turn the result into
RTA_SUCCESS or RTA_ERROR. Do that in one helper.

Change-Id: Ie9b2723486214232aad33991b267dc0ff4d1c535
Signed-off-by: Razvan Cojocaru <[email protected]>
---
M src/openvpn/route.c
1 file changed, 38 insertions(+), 70 deletions(-)



  git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/50/2150/1

diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 53550c4..d483c5f 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -1446,6 +1446,16 @@
 }
 #endif

+#if !defined(TARGET_LINUX) && !defined(TARGET_ANDROID) && !defined(_WIN32)
+/* Log and run a route command, returning RTA_SUCCESS or RTA_ERROR */
+static int
+route_exec(const struct argv *argv, const struct env_set *es, const char 
*error_message)
+{
+    argv_msg(D_ROUTE, argv);
+    return openvpn_execve_check(argv, es, 0, error_message) ? RTA_SUCCESS : 
RTA_ERROR;
+}
+#endif
+
 bool
 add_route(struct route_ipv4 *r, const struct tuntap *tt, unsigned int flags,
           const struct route_gateway_info *rgi, /* may be NULL */
@@ -1601,9 +1611,7 @@
         argv_printf_cat(&argv, "%d", r->metric);
     }

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: Solaris route add command failed");

 #elif defined(TARGET_FREEBSD)

@@ -1620,9 +1628,7 @@

     /* FIXME -- add on-link support for FreeBSD */

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: FreeBSD route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: FreeBSD route add command failed");

 #elif defined(TARGET_DRAGONFLY)

@@ -1639,9 +1645,7 @@

     /* FIXME -- add on-link support for Dragonfly */

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: DragonFly route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: DragonFly route add command 
failed");

 #elif defined(TARGET_DARWIN)

@@ -1666,9 +1670,7 @@
         argv_printf_cat(&argv, "-net %s %s %s", network, gateway, netmask);
     }

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OS X route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: OS X route add command failed");

 #elif defined(TARGET_OPENBSD) || defined(TARGET_NETBSD)

@@ -1685,18 +1687,14 @@

     /* FIXME -- add on-link support for OpenBSD/NetBSD */

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD/NetBSD route 
add command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: OpenBSD/NetBSD route add command 
failed");

 #elif defined(TARGET_AIX)

     {
         int netbits = netmask_to_netbits2(r->netmask);
         argv_printf(&argv, "%s add -net %s/%d %s", ROUTE_PATH, network, 
netbits, gateway);
-        argv_msg(D_ROUTE, &argv);
-        bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add 
command failed");
-        status = ret ? RTA_SUCCESS : RTA_ERROR;
+        status = route_exec(&argv, es, "ERROR: AIX route add command failed");
     }

 #elif defined(TARGET_HAIKU)
@@ -1704,9 +1702,7 @@
     /* ex: route add /dev/net/ipro1000/0 0.0.0.0 gw 192.168.1.1 netmask 
128.0.0.0 */
     argv_printf(&argv, "%s add %s inet %s gw %s netmask %s", ROUTE_PATH, 
rgi->iface, network,
                 gateway, netmask);
-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: Haiku inet route add command 
failed");

 #else  /* if defined(TARGET_LINUX) */
     msg(M_FATAL,
@@ -1898,9 +1894,7 @@
         argv_printf_cat(&argv, "0");
     }

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route add 
-inet6 command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: Solaris route add -inet6 command 
failed");

 #elif defined(TARGET_FREEBSD) || defined(TARGET_DRAGONFLY)

@@ -1915,9 +1909,7 @@
         argv_printf_cat(&argv, "-iface %s", device);
     }

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: *BSD route add 
-inet6 command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: *BSD route add -inet6 command 
failed");

 #elif defined(TARGET_DARWIN)

@@ -1932,42 +1924,32 @@
         argv_printf_cat(&argv, "-iface %s", device);
     }

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: MacOS X route add 
-inet6 command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: MacOS X route add -inet6 command 
failed");

 #elif defined(TARGET_OPENBSD)

     argv_printf(&argv, "%s add -inet6 %s -prefixlen %d %s", ROUTE_PATH, 
network, r6->netbits,
                 gateway);

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD route add 
-inet6 command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: OpenBSD route add -inet6 command 
failed");

 #elif defined(TARGET_NETBSD)

     argv_printf(&argv, "%s add -inet6 %s/%d %s", ROUTE_PATH, network, 
r6->netbits, gateway);

-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: NetBSD route add 
-inet6 command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: NetBSD route add -inet6 command 
failed");

 #elif defined(TARGET_AIX)

     argv_printf(&argv, "%s add -inet6 %s/%d %s", ROUTE_PATH, network, 
r6->netbits, gateway);
-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: AIX route add 
command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: AIX route add command failed");

 #elif defined(TARGET_HAIKU)

     /* ex: route add /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen 64 */
     argv_printf(&argv, "%s add %s inet6 %s gw %s prefixlen %d", ROUTE_PATH, 
r6->iface, network,
                 gateway, r6->netbits);
-    argv_msg(D_ROUTE, &argv);
-    bool ret = openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet6 route 
add command failed");
-    status = ret ? RTA_SUCCESS : RTA_ERROR;
+    status = route_exec(&argv, es, "ERROR: Haiku inet6 route add command 
failed");

 #else  /* if defined(TARGET_LINUX) */
     msg(M_FATAL,
@@ -2086,22 +2068,19 @@

     argv_printf(&argv, "%s delete %s -netmask %s %s", ROUTE_PATH, network, 
netmask, gateway);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route delete command 
failed");
+    route_exec(&argv, es, "ERROR: Solaris route delete command failed");
 
 #elif defined(TARGET_FREEBSD)

     argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network, 
gateway, netmask);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: FreeBSD route delete command 
failed");
+    route_exec(&argv, es, "ERROR: FreeBSD route delete command failed");

 #elif defined(TARGET_DRAGONFLY)

     argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network, 
gateway, netmask);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: DragonFly route delete command 
failed");
+    route_exec(&argv, es, "ERROR: DragonFly route delete command failed");

 #elif defined(TARGET_DARWIN)

@@ -2115,15 +2094,13 @@
         argv_printf(&argv, "%s delete -net %s %s %s", ROUTE_PATH, network, 
gateway, netmask);
     }

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: OS X route delete command 
failed");
+    route_exec(&argv, es, "ERROR: OS X route delete command failed");

 #elif defined(TARGET_OPENBSD) || defined(TARGET_NETBSD)

     argv_printf(&argv, "%s delete -net %s %s -netmask %s", ROUTE_PATH, 
network, gateway, netmask);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD/NetBSD route delete 
command failed");
+    route_exec(&argv, es, "ERROR: OpenBSD/NetBSD route delete command failed");

 #elif defined(TARGET_ANDROID)
     /* Avoids the unused variables warnings that all other platforms use
@@ -2138,8 +2115,7 @@
     {
         int netbits = netmask_to_netbits2(r->netmask);
         argv_printf(&argv, "%s delete -net %s/%d %s", ROUTE_PATH, network, 
netbits, gateway);
-        argv_msg(D_ROUTE, &argv);
-        openvpn_execve_check(&argv, es, 0, "ERROR: AIX route delete command 
failed");
+        route_exec(&argv, es, "ERROR: AIX route delete command failed");
     }

 #elif defined(TARGET_HAIKU)
@@ -2147,8 +2123,7 @@
     /* ex: route delete /dev/net/ipro1000/0 inet 192.168.0.0 gw 192.168.1.1 
netmask 255.255.0.0 */
     argv_printf(&argv, "%s delete %s inet %s gw %s netmask %s", ROUTE_PATH, 
rgi->iface, network,
                 gateway, netmask);
-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet route delete command 
failed");
+    route_exec(&argv, es, "ERROR: Haiku inet route delete command failed");

 #else  /* if defined(TARGET_LINUX) */
     msg(M_FATAL,
@@ -2255,8 +2230,7 @@

     argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network, 
r6->netbits, gateway);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: Solaris route delete -inet6 
command failed");
+    route_exec(&argv, es, "ERROR: Solaris route delete -inet6 command failed");

 #elif defined(TARGET_FREEBSD) || defined(TARGET_DRAGONFLY)

@@ -2271,8 +2245,7 @@
         argv_printf_cat(&argv, "-iface %s", device);
     }

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: *BSD route delete -inet6 
command failed");
+    route_exec(&argv, es, "ERROR: *BSD route delete -inet6 command failed");

 #elif defined(TARGET_DARWIN)

@@ -2287,29 +2260,25 @@
         argv_printf_cat(&argv, "-iface %s", device);
     }

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: MacOS X route delete -inet6 
command failed");
+    route_exec(&argv, es, "ERROR: MacOS X route delete -inet6 command failed");

 #elif defined(TARGET_OPENBSD)

     argv_printf(&argv, "%s delete -inet6 %s -prefixlen %d %s", ROUTE_PATH, 
network, r6->netbits,
                 gateway);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: OpenBSD route delete -inet6 
command failed");
+    route_exec(&argv, es, "ERROR: OpenBSD route delete -inet6 command failed");

 #elif defined(TARGET_NETBSD)

     argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network, 
r6->netbits, gateway);

-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: NetBSD route delete -inet6 
command failed");
+    route_exec(&argv, es, "ERROR: NetBSD route delete -inet6 command failed");

 #elif defined(TARGET_AIX)

     argv_printf(&argv, "%s delete -inet6 %s/%d %s", ROUTE_PATH, network, 
r6->netbits, gateway);
-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: AIX route delete command 
failed");
+    route_exec(&argv, es, "ERROR: AIX route delete command failed");

 #elif defined(TARGET_ANDROID)
     msg(D_ROUTE_DEBUG, "Deleting routes on Android is not possible/not "
@@ -2323,8 +2292,7 @@
     /* ex: route delete /dev/net/ipro1000/0 inet6 :: gw beef::cafe prefixlen 
64 */
     argv_printf(&argv, "%s delete %s inet6 %s gw %s prefixlen %d", ROUTE_PATH, 
r6->iface, network,
                 gateway, r6->netbits);
-    argv_msg(D_ROUTE, &argv);
-    openvpn_execve_check(&argv, es, 0, "ERROR: Haiku inet6 route delete 
command failed");
+    route_exec(&argv, es, "ERROR: Haiku inet6 route delete command failed");

 #else  /* if defined(TARGET_LINUX) */
     msg(M_FATAL,

--
To view, visit https://gerrit.openvpn.net/c/openvpn/+/2150?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.openvpn.net/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: Ie9b2723486214232aad33991b267dc0ff4d1c535
Gerrit-Change-Number: 2150
Gerrit-PatchSet: 1
Gerrit-Owner: Răzvan Cojocaru <[email protected]>
Gerrit-Reviewer: Arne Schwabe <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: Arne Schwabe <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to