wpadebug: Add generic shell command mechanism
Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
d1f7a9b331
commit
cb54718c50
6 changed files with 139 additions and 13 deletions
|
@ -28,5 +28,9 @@
|
|||
<data android:mimeType="application/vnd.wfa.wsc" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="w1.fi.wpadebug.CommandListActivity"
|
||||
android:label="Command list"
|
||||
android:parentActivityName="w1.fi.wpadebug.MainActivity">
|
||||
</activity>
|
||||
</application>
|
||||
</manifest>
|
||||
|
|
|
@ -44,6 +44,11 @@ adb root
|
|||
adb remount
|
||||
adb shell chmod 6755 /system/bin/mksh-su
|
||||
|
||||
Optionally, a text file with a set of command can be installed to allow
|
||||
arbitrary shell commands to be executed. This text file need to be in
|
||||
/data/local/wpadebug.cmds and use title@command format per line. For
|
||||
example:
|
||||
version@cat /proc/version
|
||||
|
||||
|
||||
Uninstallation
|
||||
|
|
|
@ -122,11 +122,6 @@
|
|||
android:onClick="runWpaCliCmd"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Shell commands"
|
||||
/>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
@ -135,8 +130,8 @@
|
|||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="id"
|
||||
android:onClick="runId"
|
||||
android:text="Shell commands"
|
||||
android:onClick="runCommands"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
|
|
2
wpadebug/res/raw/shell_commands.txt
Normal file
2
wpadebug/res/raw/shell_commands.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
id@id
|
||||
version@cat /proc/version
|
124
wpadebug/src/w1/fi/wpadebug/CommandListActivity.java
Normal file
124
wpadebug/src/w1/fi/wpadebug/CommandListActivity.java
Normal file
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* wpadebug - wpa_supplicant and Wi-Fi debugging app for Android
|
||||
* Copyright (c) 2013, Jouni Malinen <j@w1.fi>
|
||||
*
|
||||
* This software may be distributed under the terms of the BSD license.
|
||||
* See README for more details.
|
||||
*/
|
||||
|
||||
package w1.fi.wpadebug;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Scanner;
|
||||
import java.io.FileReader;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import android.app.ListActivity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Toast;
|
||||
import android.text.method.ScrollingMovementMethod;
|
||||
import android.util.Log;
|
||||
|
||||
class CmdList
|
||||
{
|
||||
String title;
|
||||
String command;
|
||||
|
||||
public CmdList(String _title, String _command)
|
||||
{
|
||||
title = _title;
|
||||
command = _command;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return title;
|
||||
}
|
||||
}
|
||||
|
||||
public class CommandListActivity extends ListActivity
|
||||
{
|
||||
private static final String TAG = "wpadebug";
|
||||
private static final String cmdfile = "/data/local/wpadebug.cmds";
|
||||
|
||||
private void read_commands(ArrayList<CmdList> list, Scanner in)
|
||||
{
|
||||
in.useDelimiter("@");
|
||||
while (in.hasNext()) {
|
||||
String title = in.next();
|
||||
String cmd = in.nextLine().substring(1);
|
||||
list.add(new CmdList(title, cmd));
|
||||
}
|
||||
in.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
ArrayList<CmdList> list = new ArrayList<CmdList>();
|
||||
|
||||
FileReader in;
|
||||
try {
|
||||
in = new FileReader(cmdfile);
|
||||
read_commands(list, new Scanner(in));
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(this, "Could not read " + cmdfile,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
InputStream inres = getResources().openRawResource(R.raw.shell_commands);
|
||||
read_commands(list, new Scanner(inres));
|
||||
|
||||
ArrayAdapter<CmdList> listAdapter;
|
||||
listAdapter = new ArrayAdapter<CmdList>(this, android.R.layout.simple_list_item_1, list);
|
||||
|
||||
setListAdapter(listAdapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onListItemClick(ListView l, View v, int position, long id)
|
||||
{
|
||||
CmdList item = (CmdList) getListAdapter().getItem(position);
|
||||
Toast.makeText(this, "Running: " + item.command,
|
||||
Toast.LENGTH_SHORT).show();
|
||||
String message = run(item.command);
|
||||
if (message == null)
|
||||
return;
|
||||
Intent intent = new Intent(this, DisplayMessageActivity.class);
|
||||
intent.putExtra(MainActivity.EXTRA_MESSAGE, message);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private String run(String cmd)
|
||||
{
|
||||
try {
|
||||
Process proc = Runtime.getRuntime().exec(new String[]{"/system/bin/mksh-su", "-c", cmd});
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
|
||||
StringBuffer output = new StringBuffer();
|
||||
int read;
|
||||
char[] buffer = new char[1024];
|
||||
while ((read = reader.read(buffer)) > 0)
|
||||
output.append(buffer, 0, read);
|
||||
reader.close();
|
||||
proc.waitFor();
|
||||
return output.toString();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(this, "Could not run command",
|
||||
Toast.LENGTH_LONG).show();
|
||||
return null;
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -41,13 +41,9 @@ public class MainActivity extends Activity
|
|||
setContentView(R.layout.main);
|
||||
}
|
||||
|
||||
public void runId(View view)
|
||||
public void runCommands(View view)
|
||||
{
|
||||
Intent intent = new Intent(this, DisplayMessageActivity.class);
|
||||
String message = run("/system/bin/id");
|
||||
if (message == null)
|
||||
return;
|
||||
intent.putExtra(EXTRA_MESSAGE, message);
|
||||
Intent intent = new Intent(this, CommandListActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue