From 564e55385fd147d45e88d96a5a8e925d46fc59d3 Mon Sep 17 00:00:00 2001 From: DF1E Date: Thu, 2 Oct 2014 18:25:12 +0200 Subject: [PATCH] update LinuxShell from SimpleExplorer https://github.com/DF1E/SimpleExplorer/blob/master/src/com/dnielfe/manager/commands/RootCommands.java --- .../turboeditor/util/LinuxShell.java | 104 +++++------------- .../turboeditor/util/RootUtils.java | 3 +- 2 files changed, 28 insertions(+), 79 deletions(-) diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java index f9cfe8a..6e65d7e 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java @@ -38,35 +38,40 @@ import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.util.Log; public class LinuxShell { - public static String getCmdPath(String path) { - return path.replace(" ", "\\ ").replace("'", "\\'"); + + private static final String UNIX_ESCAPE_EXPRESSION = "(\\(|\\)|\\[|\\]|\\s|\'|\"|`|\\{|\\}|&|\\\\|\\?)"; + + public static String getCommandLineString(String input) { + return input.replaceAll(UNIX_ESCAPE_EXPRESSION, "\\\\$1"); } - /** - * 返回执行完��?的结果 - * - * @param cmd 命令内容 - * @return - */ public static BufferedReader execute(String cmd) { - BufferedReader reader = null; //errReader = null; + BufferedReader reader = null; try { Process process = Runtime.getRuntime().exec("su"); - DataOutputStream os = new DataOutputStream(process.getOutputStream()); - //os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n"); - //os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n"); + DataOutputStream os = new DataOutputStream( + process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit\n"); - reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String err = (new BufferedReader(new InputStreamReader(process.getErrorStream()))).readLine(); + reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + String err = (new BufferedReader(new InputStreamReader( + process.getErrorStream()))).readLine(); os.flush(); - if (process.waitFor() != 0 || (!"".equals(err) && null != err)) { + if (process.waitFor() != 0 || (!"".equals(err) && null != err) + && containsIllegals(err) != true) { + Log.e("Root Error, cmd: " + cmd, err); return null; } return reader; + } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { @@ -74,69 +79,14 @@ public class LinuxShell { } catch (Exception e) { e.printStackTrace(); } - return null; } - - /*public static boolean isRoot() - { - boolean retval = false; - Process suProcess; - - try - { - suProcess = Runtime.getRuntime().exec("su"); - - DataOutputStream os = - new DataOutputStream(suProcess.getOutputStream()); - DataInputStream osRes = - new DataInputStream(suProcess.getInputStream()); - - if (null != os && null != osRes) - { - // Getting the id of the current user to check if this is root - os.writeBytes("id\n"); - os.flush(); - String currUid = osRes.readLine(); - boolean exitSu = false; - if (null == currUid) - { - retval = false; - exitSu = false; - Log.e("ROOT", "Can't get root access or denied by user"); - } - else if (true == currUid.contains("uid=0")) - { - retval = true; - exitSu = true; - } - else - { - retval = false; - exitSu = true; - Log.e("ROOT", "Root access rejected: " + currUid); - } - - if (exitSu) - { - os.writeBytes("exit\n"); - os.flush(); - } - } - } - catch (Exception e) - { - // Can't get root ! - // Probably broken pipe exception on trying to write to output - // stream after su failed, meaning that the device is not rooted - - retval = false; - Log.d("ROOT", "Root access rejected [" + - e.getClass().getName() + "] : " + e.getMessage()); - } - - return retval; - }*/ + public static boolean containsIllegals(String toExamine) { + // checks for "+" sign so the program doesn't throw an error when its + // not erroring. + Pattern pattern = Pattern.compile("[+]"); + Matcher matcher = pattern.matcher(toExamine); + return matcher.find(); + } } - diff --git a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java index e60f59d..b1d7654 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/RootUtils.java @@ -80,8 +80,7 @@ public class RootUtils { } else { BufferedReader reader = null; //errReader = null; try { - - reader = LinuxShell.execute("IFS='\n';CURDIR='" + LinuxShell.getCmdPath(path) + "';for i in `ls $CURDIR`; do if [ -d $CURDIR/$i ]; then echo \"d $CURDIR/$i\";else echo \"f $CURDIR/$i\"; fi; done"); + LinuxShell.execute("ls -a " + LinuxShell.getCommandLineString(path)); if (reader == null) return null;