diff options
3 files changed, 79 insertions, 29 deletions
| 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<String> tunmtu = getOption("mtu", 1, 1); +        Vector<String> 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<Vector<String>>  option: options.values()) +        { +            for (Vector<String> 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 = "<ca>\n" + +            "-----BEGIN CERTIFICATE-----\n" + +            "\n" + +            "-----END CERTIFICATE-----\n" + +            "\n" + +            "</ca>\n" + +            "\n" + +            "<cert>\n" + +            "-----BEGIN CERTIFICATE-----\n" + +            "\n" + +            "-----END CERTIFICATE-----\n" + +            "\n" + +            "</cert>\n" + +            "\n" + +            "<key>\n" + +            "-----BEGIN PRIVATE KEY-----\n" + +            "\n" + +            "-----END PRIVATE KEY-----\n" + +            "\n" + +            "</key>"; +    private final String miniconfig = "client\nremote test.blinkt.de\n";      @Test      public void testHttpProxyPass() throws IOException, ConfigParser.ConfigParseError { @@ -47,6 +67,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" + +                "<connection>\n" + +                "remote foo.bar\n" + +                "tun-mtu 1222\n"+ +                "</connection>\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 =                  "ca baz\n" + @@ -166,26 +225,7 @@ public class TestConfigParser {                  "http-proxy-option CUSTOM-HEADER \"DNT: 1\"\n" +                  "http-proxy-option CUSTOM-HEADER \"Tk: N\"\n" +                  "\n" + -                "<ca>\n" + -                "-----BEGIN CERTIFICATE-----\n" + -                "\n" + -                "-----END CERTIFICATE-----\n" + -                "\n" + -                "</ca>\n" + -                "\n" + -                "<cert>\n" + -                "-----BEGIN CERTIFICATE-----\n" + -                "\n" + -                "-----END CERTIFICATE-----\n" + -                "\n" + -                "</cert>\n" + -                "\n" + -                "<key>\n" + -                "-----BEGIN PRIVATE KEY-----\n" + -                "\n" + -                "-----END PRIVATE KEY-----\n" + -                "\n" + -                "</key>"; +                fakeCerts;          ConfigParser cp = new ConfigParser();          cp.parseConfig(new StringReader(proxyconf)); | 
