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..64a59e2 100644 --- a/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java +++ b/libraries/sharedCode/src/main/java/sharedcode/turboeditor/util/LinuxShell.java @@ -17,56 +17,46 @@ * along with this program. If not, see . */ -/** - * 920 Text Editor is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * 920 Text Editor is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with 920 Text Editor. If not, see . - */ - package sharedcode.turboeditor.util; 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 +64,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;