Merge pull request #30 from DF1E/master
update LinuxShell from SimpleExplorer
This commit is contained in:
commit
04faa104ed
@ -17,56 +17,46 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* 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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package sharedcode.turboeditor.util;
|
package sharedcode.turboeditor.util;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
public class LinuxShell {
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 返回执行完<EFBFBD><EFBFBD>?的结果
|
|
||||||
*
|
|
||||||
* @param cmd 命令内容
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static BufferedReader execute(String cmd) {
|
public static BufferedReader execute(String cmd) {
|
||||||
BufferedReader reader = null; //errReader = null;
|
BufferedReader reader = null;
|
||||||
try {
|
try {
|
||||||
Process process = Runtime.getRuntime().exec("su");
|
Process process = Runtime.getRuntime().exec("su");
|
||||||
DataOutputStream os = new DataOutputStream(process.getOutputStream());
|
DataOutputStream os = new DataOutputStream(
|
||||||
//os.writeBytes("mount -oremount,rw /dev/block/mtdblock3 /system\n");
|
process.getOutputStream());
|
||||||
//os.writeBytes("busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
|
|
||||||
os.writeBytes(cmd + "\n");
|
os.writeBytes(cmd + "\n");
|
||||||
os.writeBytes("exit\n");
|
os.writeBytes("exit\n");
|
||||||
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
reader = new BufferedReader(new InputStreamReader(
|
||||||
String err = (new BufferedReader(new InputStreamReader(process.getErrorStream()))).readLine();
|
process.getInputStream()));
|
||||||
|
String err = (new BufferedReader(new InputStreamReader(
|
||||||
|
process.getErrorStream()))).readLine();
|
||||||
os.flush();
|
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 null;
|
||||||
}
|
}
|
||||||
return reader;
|
return reader;
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@ -74,69 +64,14 @@ public class LinuxShell {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public static boolean isRoot()
|
public static boolean containsIllegals(String toExamine) {
|
||||||
{
|
// checks for "+" sign so the program doesn't throw an error when its
|
||||||
boolean retval = false;
|
// not erroring.
|
||||||
Process suProcess;
|
Pattern pattern = Pattern.compile("[+]");
|
||||||
|
Matcher matcher = pattern.matcher(toExamine);
|
||||||
try
|
return matcher.find();
|
||||||
{
|
|
||||||
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;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,8 +80,7 @@ public class RootUtils {
|
|||||||
} else {
|
} else {
|
||||||
BufferedReader reader = null; //errReader = null;
|
BufferedReader reader = null; //errReader = null;
|
||||||
try {
|
try {
|
||||||
|
LinuxShell.execute("ls -a " + LinuxShell.getCommandLineString(path));
|
||||||
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");
|
|
||||||
if (reader == null)
|
if (reader == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user