| Index: src/org/adblockplus/android/configurators/IptablesProxyConfigurator.java |
| =================================================================== |
| --- a/src/org/adblockplus/android/configurators/IptablesProxyConfigurator.java |
| +++ b/src/org/adblockplus/android/configurators/IptablesProxyConfigurator.java |
| @@ -58,14 +58,7 @@ |
| throw new IllegalStateException("No root access"); |
| } |
| - final File ipt = this.context.getFileStreamPath("iptables"); |
| - |
| - if (!ipt.exists()) |
| - { |
| - throw new FileNotFoundException("No iptables executable"); |
| - } |
| - |
| - final String path = ipt.getAbsolutePath(); |
| + final String path = getIptablesExecutablePath(); |
| RootTools.sendShell("chmod 700 " + path, DEFAULT_TIMEOUT); |
| @@ -103,6 +96,19 @@ |
| } |
| } |
| + private String getIptablesExecutablePath() throws FileNotFoundException |
| + { |
| + File iptablesExecutable = new File("/system/bin/iptables"); |
| + if (!iptablesExecutable.exists()) |
| + { |
| + Log.i(TAG, "iptables not found on the system, using embedded binary"); |
| + iptablesExecutable = context.getFileStreamPath("iptables"); |
| + } |
| + if (!iptablesExecutable.exists()) |
| + throw new FileNotFoundException("No iptables executable"); |
| + return iptablesExecutable.getAbsolutePath(); |
| + } |
| + |
| @Override |
| public boolean registerProxy(final InetAddress address, final int port) |
| { |