From 7c020349d214a942293047954ce45aab04cc6420 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Sun, 6 May 2012 18:13:09 +0200 Subject: Add ability to send the log (closes issue #9) protect fd over unix socket --- src/de/blinkt/openvpn/LogWindow.java | 25 ++++++++++++++++++++++ src/de/blinkt/openvpn/OpenVpnManagementThread.java | 12 ++--------- src/de/blinkt/openvpn/VpnProfile.java | 19 ++++++++++------ 3 files changed, 40 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/de/blinkt/openvpn/LogWindow.java b/src/de/blinkt/openvpn/LogWindow.java index 65e8c66c..f3809e27 100644 --- a/src/de/blinkt/openvpn/LogWindow.java +++ b/src/de/blinkt/openvpn/LogWindow.java @@ -1,13 +1,19 @@ package de.blinkt.openvpn; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.charset.Charset; import java.util.Vector; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ListActivity; import android.content.DialogInterface; +import android.content.Intent; import android.content.DialogInterface.OnClickListener; import android.database.DataSetObserver; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Handler.Callback; @@ -20,6 +26,7 @@ import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import de.blinkt.openvpn.OpenVPN.LogListener; public class LogWindow extends ListActivity { @@ -56,6 +63,22 @@ public class LogWindow extends ListActivity { } } + String getLogStr() { + String str = ""; + for(String entry:myEntries) { + str+=entry + '\n'; + } + return str; + } + + private void shareLog() { + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.putExtra(Intent.EXTRA_TEXT, getLogStr()); + shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.ics_openvpn_log_file)); + shareIntent.setType("text/plain"); + startActivity(Intent.createChooser(shareIntent, "Send Logfile")); + } + @Override public void registerDataSetObserver(DataSetObserver observer) { observers.add(observer); @@ -190,6 +213,8 @@ public class LogWindow extends ListActivity { } else if(item.getItemId()==R.id.info) { if(mBconfig==null) OpenVPN.triggerLogBuilderConfig(); + } else if(item.getItemId()==R.id.send) { + ladapter.shareLog(); } return super.onOptionsItemSelected(item); diff --git a/src/de/blinkt/openvpn/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/OpenVpnManagementThread.java index 2bae9e5e..4162d315 100644 --- a/src/de/blinkt/openvpn/OpenVpnManagementThread.java +++ b/src/de/blinkt/openvpn/OpenVpnManagementThread.java @@ -31,14 +31,6 @@ public class OpenVpnManagementThread implements Runnable { } - private String managmentEscape(String unescape) { - String escapedString = unescape.replace("\\", "\\\\"); - escapedString = escapedString.replace("\"","\\\""); - escapedString = escapedString.replace("\n","\\n"); - return '"' + escapedString + '"'; - } - - public void managmentCommand(String cmd) { try { mSocket.getOutputStream().write(cmd.getBytes()); @@ -177,7 +169,7 @@ public class OpenVpnManagementThread implements Runnable { pw = mProfile.getPasswordPrivateKey(); } else if (needed.equals("Auth")) { String usercmd = String.format("username '%s' %s\n", - needed, managmentEscape(mProfile.mUsername)); + needed, VpnProfile.openVpnEscape(mProfile.mUsername)); managmentCommand(usercmd); pw = mProfile.getPasswordAuth(); } else if (needed.equals("PROTECTFD")) { @@ -187,7 +179,7 @@ public class OpenVpnManagementThread implements Runnable { response="needok"; } if(pw!=null) { - String cmd = String.format("%s '%s' %s\n",response, needed, managmentEscape(pw)); + String cmd = String.format("%s '%s' %s\n",response, needed, VpnProfile.openVpnEscape(pw)); managmentCommand(cmd); } diff --git a/src/de/blinkt/openvpn/VpnProfile.java b/src/de/blinkt/openvpn/VpnProfile.java index 572c0c2d..75f0235d 100644 --- a/src/de/blinkt/openvpn/VpnProfile.java +++ b/src/de/blinkt/openvpn/VpnProfile.java @@ -148,6 +148,13 @@ public class VpnProfile implements Serializable{ } }; + public static String openVpnEscape(String unescape) { + String escapedString = unescape.replace("\\", "\\\\"); + escapedString = escapedString.replace("\"","\\\""); + escapedString = escapedString.replace("\n","\\n"); + return '"' + escapedString + '"'; + } + static final String OVPNCONFIGPKCS12 = "android.pkcs12"; @@ -231,22 +238,22 @@ public class VpnProfile implements Serializable{ case VpnProfile.TYPE_CERTIFICATES: // Ca cfg+="ca "; - cfg+=mCaFilename; + cfg+=openVpnEscape(mCaFilename); cfg+="\n"; // Client Cert + Key cfg+="key "; - cfg+=mClientKeyFilename; + cfg+=openVpnEscape(mClientKeyFilename); cfg+="\n"; cfg+="cert "; - cfg+=mClientCertFilename; + cfg+=openVpnEscape(mClientCertFilename); cfg+="\n"; break; case VpnProfile.TYPE_USERPASS_PKCS12: cfg+="auth-user-pass\n"; case VpnProfile.TYPE_PKCS12: cfg+="pkcs12 "; - cfg+=mPKCS12Filename; + cfg+=openVpnEscape(mPKCS12Filename); cfg+="\n"; cfg+="management-query-passwords\n"; break; @@ -262,7 +269,7 @@ public class VpnProfile implements Serializable{ case VpnProfile.TYPE_USERPASS: cfg+="auth-user-pass\n"; cfg+="management-query-passwords\n"; - cfg+="ca " + mCaFilename +"\n"; + cfg+="ca " +openVpnEscape(mCaFilename) +"\n"; } if(mUseLzo) { @@ -274,7 +281,7 @@ public class VpnProfile implements Serializable{ cfg+="secret "; else cfg+="tls-auth "; - cfg+=mTLSAuthFilename; + cfg+=openVpnEscape(mTLSAuthFilename); cfg+=" "; cfg+= mTLSAuthDirection; cfg+="\n"; -- cgit v1.2.3