From de2173c73acd042d5364685ac36fa287161face2 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 2 Oct 2018 18:57:28 +0200 Subject: Fix some VPN Config import problem (closes #935) --- .../main/java/de/blinkt/openvpn/VpnProfile.java | 3 +- .../java/de/blinkt/openvpn/core/ConfigParser.java | 23 ++++-- .../de/blinkt/openvpn/core/TestConfigParser.java | 82 ++++++++++++++++------ 3 files changed, 79 insertions(+), 29 deletions(-) (limited to 'main') diff --git a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java index 031e77ca..db8f157c 100644 --- a/main/src/main/java/de/blinkt/openvpn/VpnProfile.java +++ b/main/src/main/java/de/blinkt/openvpn/VpnProfile.java @@ -122,7 +122,7 @@ public class VpnProfile implements Serializable, Cloneable { public String mCustomConfigOptions = ""; public String mVerb = "1"; //ignored public String mCipher = ""; - public boolean mNobind = false; + public boolean mNobind = true; public boolean mUseDefaultRoutev6 = true; public String mCustomRoutesv6 = ""; public String mKeyPassword = ""; @@ -253,6 +253,7 @@ public class VpnProfile implements Serializable, Cloneable { mAllowLocalLAN = true; mPushPeerInfo = false; mMssFix = 0; + mNobind = false; } public UUID getUUID() { diff --git a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java index ee0fdd05..0148bfb7 100644 --- a/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java +++ b/main/src/main/java/de/blinkt/openvpn/core/ConfigParser.java @@ -34,7 +34,7 @@ public class ConfigParser { // Ignore all scripts // in most cases these won't work and user who wish to execute scripts will // figure out themselves - final String[] ignoreOptions = {"tls-client", + private final String[] ignoreOptions = {"tls-client", "allow-recursive-routing", "askpass", "auth-nocache", @@ -42,7 +42,6 @@ public class ConfigParser { "down", "route-up", "ipchange", - "route-up", "route-pre-down", "auth-user-pass-verify", "block-outside-dns", @@ -88,15 +87,16 @@ public class ConfigParser { "user", "win-sys", }; - final String[][] ignoreOptionsWithArg = + private final String[][] ignoreOptionsWithArg = { {"setenv", "IV_GUI_VER"}, + {"setenv", "IV_PLAT_VER"}, {"setenv", "IV_OPENVPN_GUI_VERSION"}, {"engine", "dynamic"}, {"setenv", "CLIENT_CERT"}, - {"resolve-retry", "60"} + {"resolv-retry", "60"} }; - final String[] connectionOptions = { + private final String[] connectionOptions = { "local", "remote", "float", @@ -469,7 +469,7 @@ public class ConfigParser { } - Vector tunmtu = getOption("mtu", 1, 1); + Vector tunmtu = getOption("tun-mtu", 1, 1); if (tunmtu != null) { try { @@ -908,7 +908,16 @@ public class ConfigParser { options.remove(option); - if (options.size() > 0) { + boolean customOptions=false; + for (Vector> option: options.values()) + { + for (Vector optionsline : option) { + if (!ignoreThisOption(optionsline)) { + customOptions = true; + } + } + } + if (customOptions) { np.mCustomConfigOptions = "# These options found in the config file do not map to config settings:\n" + np.mCustomConfigOptions; diff --git a/main/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java b/main/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java index f0047ac7..248f6089 100644 --- a/main/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java +++ b/main/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java @@ -29,7 +29,27 @@ import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) public class TestConfigParser { - String miniconfig = "client\nremote test.blinkt.de\n"; + public static final String fakeCerts = "\n" + + "-----BEGIN CERTIFICATE-----\n" + + "\n" + + "-----END CERTIFICATE-----\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "-----BEGIN CERTIFICATE-----\n" + + "\n" + + "-----END CERTIFICATE-----\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "-----BEGIN PRIVATE KEY-----\n" + + "\n" + + "-----END PRIVATE KEY-----\n" + + "\n" + + ""; + private final String miniconfig = "client\nremote test.blinkt.de\n"; @Test public void testHttpProxyPass() throws IOException, ConfigParser.ConfigParseError { @@ -46,6 +66,45 @@ public class TestConfigParser { } + @Test + public void cleanReImport() throws IOException, ConfigParser.ConfigParseError { + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(miniconfig + fakeCerts)); + VpnProfile vp = cp.convertProfile(); + + String outConfig = vp.getConfigFile(RuntimeEnvironment.application, false); + + cp = new ConfigParser(); + cp.parseConfig(new StringReader(outConfig)); + VpnProfile vp2 = cp.convertProfile(); + + String outConfig2 = vp2.getConfigFile(RuntimeEnvironment.application, false); + + Assert.assertEquals(outConfig, outConfig2); + Assert.assertFalse(vp.mUseCustomConfig); + Assert.assertFalse(vp2.mUseCustomConfig); + + } + + @Test + public void testCommonOptionsImport() throws IOException, ConfigParser.ConfigParseError + { + String config = "client\n" + + "tun-mtu 1234\n" + + "\n" + + "remote foo.bar\n" + + "tun-mtu 1222\n"+ + "\n"; + + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(config)); + VpnProfile vp = cp.convertProfile(); + + Assert.assertEquals(1234, vp.mTunMtu); + Assert.assertTrue(vp.mConnections[0].mCustomConfiguration.contains("tun-mtu 1222")); + Assert.assertTrue(vp.mConnections[0].mUseCustomConfig); + } + @Test public void testSockProxyImport() throws IOException, ConfigParser.ConfigParseError { String proxy = @@ -166,26 +225,7 @@ public class TestConfigParser { "http-proxy-option CUSTOM-HEADER \"DNT: 1\"\n" + "http-proxy-option CUSTOM-HEADER \"Tk: N\"\n" + "\n" + - "\n" + - "-----BEGIN CERTIFICATE-----\n" + - "\n" + - "-----END CERTIFICATE-----\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "-----BEGIN CERTIFICATE-----\n" + - "\n" + - "-----END CERTIFICATE-----\n" + - "\n" + - "\n" + - "\n" + - "\n" + - "-----BEGIN PRIVATE KEY-----\n" + - "\n" + - "-----END PRIVATE KEY-----\n" + - "\n" + - ""; + fakeCerts; ConfigParser cp = new ConfigParser(); cp.parseConfig(new StringReader(proxyconf)); -- cgit v1.2.3