Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
d9597549
Commit
d9597549
authored
Jan 29, 2017
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prevent excessive su requests
parent
13512b41
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
71 additions
and
24 deletions
+71
-24
SuRequestActivity.java
...ava/com/topjohnwu/magisk/superuser/SuRequestActivity.java
+63
-24
CallbackHandler.java
...main/java/com/topjohnwu/magisk/utils/CallbackHandler.java
+8
-0
No files found.
app/src/main/java/com/topjohnwu/magisk/superuser/SuRequestActivity.java
View file @
d9597549
...
@@ -10,6 +10,7 @@ import android.os.AsyncTask;
...
@@ -10,6 +10,7 @@ import android.os.AsyncTask;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.CountDownTimer
;
import
android.os.CountDownTimer
;
import
android.support.v7.app.AppCompatActivity
;
import
android.support.v7.app.AppCompatActivity
;
import
android.util.SparseArray
;
import
android.view.Window
;
import
android.view.Window
;
import
android.widget.ArrayAdapter
;
import
android.widget.ArrayAdapter
;
import
android.widget.Button
;
import
android.widget.Button
;
...
@@ -20,6 +21,8 @@ import android.widget.TextView;
...
@@ -20,6 +21,8 @@ import android.widget.TextView;
import
com.topjohnwu.magisk.Global
;
import
com.topjohnwu.magisk.Global
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.utils.Async
;
import
com.topjohnwu.magisk.utils.CallbackHandler
;
import
java.io.DataInputStream
;
import
java.io.DataInputStream
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -27,17 +30,19 @@ import java.io.IOException;
...
@@ -27,17 +30,19 @@ import java.io.IOException;
import
butterknife.BindView
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
butterknife.ButterKnife
;
public
class
SuRequestActivity
extends
AppCompatActivity
{
public
class
SuRequestActivity
extends
AppCompatActivity
implements
CallbackHandler
.
EventListener
{
private
static
final
int
[]
timeoutList
=
{
0
,
-
1
,
10
,
20
,
30
,
60
};
private
static
final
int
[]
timeoutList
=
{
0
,
-
1
,
10
,
20
,
30
,
60
};
private
final
static
int
SU_PROTOCOL_PARAM_MAX
=
20
;
private
static
final
int
SU_PROTOCOL_PARAM_MAX
=
20
;
private
final
static
int
SU_PROTOCOL_NAME_MAX
=
20
;
private
static
final
int
SU_PROTOCOL_NAME_MAX
=
20
;
private
final
static
int
SU_PROTOCOL_VALUE_MAX
=
256
;
private
static
final
int
SU_PROTOCOL_VALUE_MAX
=
256
;
private
static
final
int
PROMPT
=
0
;
private
static
final
int
PROMPT
=
0
;
private
static
final
int
AUTO_DENY
=
1
;
private
static
final
int
AUTO_DENY
=
1
;
private
static
final
int
AUTO_ALLOW
=
2
;
private
static
final
int
AUTO_ALLOW
=
2
;
private
static
SparseArray
<
CallbackHandler
.
Event
>
uidMap
=
new
SparseArray
<>();
@BindView
(
R
.
id
.
su_popup
)
LinearLayout
suPopup
;
@BindView
(
R
.
id
.
su_popup
)
LinearLayout
suPopup
;
@BindView
(
R
.
id
.
timeout
)
Spinner
timeout
;
@BindView
(
R
.
id
.
timeout
)
Spinner
timeout
;
@BindView
(
R
.
id
.
app_icon
)
ImageView
appIcon
;
@BindView
(
R
.
id
.
app_icon
)
ImageView
appIcon
;
...
@@ -54,6 +59,8 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -54,6 +59,8 @@ public class SuRequestActivity extends AppCompatActivity {
private
int
uid
;
private
int
uid
;
private
String
appName
,
packageName
;
private
String
appName
,
packageName
;
private
CountDownTimer
timer
;
private
CountDownTimer
timer
;
private
CallbackHandler
.
EventListener
self
;
private
CallbackHandler
.
Event
event
;
@Override
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
...
@@ -64,8 +71,9 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -64,8 +71,9 @@ public class SuRequestActivity extends AppCompatActivity {
Intent
intent
=
getIntent
();
Intent
intent
=
getIntent
();
socketPath
=
intent
.
getStringExtra
(
"socket"
);
socketPath
=
intent
.
getStringExtra
(
"socket"
);
self
=
this
;
new
SocketManager
().
exec
ute
();
new
SocketManager
().
exec
();
}
}
void
showRequest
()
{
void
showRequest
()
{
...
@@ -91,7 +99,8 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -91,7 +99,8 @@ public class SuRequestActivity extends AppCompatActivity {
appNameView
.
setText
(
appName
);
appNameView
.
setText
(
appName
);
packageNameView
.
setText
(
packageName
);
packageNameView
.
setText
(
packageName
);
ArrayAdapter
<
CharSequence
>
adapter
=
ArrayAdapter
.
createFromResource
(
this
,
R
.
array
.
allow_timeout
,
android
.
R
.
layout
.
simple_spinner_item
);
ArrayAdapter
<
CharSequence
>
adapter
=
ArrayAdapter
.
createFromResource
(
this
,
R
.
array
.
allow_timeout
,
android
.
R
.
layout
.
simple_spinner_item
);
adapter
.
setDropDownViewResource
(
android
.
R
.
layout
.
simple_spinner_dropdown_item
);
adapter
.
setDropDownViewResource
(
android
.
R
.
layout
.
simple_spinner_dropdown_item
);
timeout
.
setAdapter
(
adapter
);
timeout
.
setAdapter
(
adapter
);
...
@@ -122,13 +131,27 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -122,13 +131,27 @@ public class SuRequestActivity extends AppCompatActivity {
timer
.
start
();
timer
.
start
();
}
}
void
handleAction
(
boolean
action
,
int
timeout
)
{
@Override
public
void
onBackPressed
()
{
Policy
temp
=
new
Policy
();
temp
.
policy
=
Policy
.
DENY
;
event
.
trigger
(
temp
);
CallbackHandler
.
unRegister
(
event
);
uidMap
.
remove
(
uid
);
finish
();
}
@Override
public
void
onTrigger
(
CallbackHandler
.
Event
event
)
{
Policy
policy
=
(
Policy
)
event
.
getResult
();
try
{
try
{
socket
.
getOutputStream
().
write
((
action
?
"socket:ALLOW"
:
"socket:DENY"
).
getBytes
());
socket
.
getOutputStream
().
write
(
(
policy
.
policy
==
Policy
.
ALLOW
?
"socket:ALLOW"
:
"socket:DENY"
).
getBytes
());
}
catch
(
Exception
ignored
)
{}
}
catch
(
Exception
ignored
)
{}
}
void
handleAction
(
boolean
action
,
int
timeout
)
{
if
(
timeout
>=
0
)
{
Policy
policy
=
new
Policy
();
Policy
policy
=
new
Policy
();
policy
.
uid
=
uid
;
policy
.
uid
=
uid
;
policy
.
packageName
=
packageName
;
policy
.
packageName
=
packageName
;
...
@@ -137,13 +160,17 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -137,13 +160,17 @@ public class SuRequestActivity extends AppCompatActivity {
policy
.
policy
=
action
?
Policy
.
ALLOW
:
Policy
.
DENY
;
policy
.
policy
=
action
?
Policy
.
ALLOW
:
Policy
.
DENY
;
policy
.
logging
=
true
;
policy
.
logging
=
true
;
policy
.
notification
=
true
;
policy
.
notification
=
true
;
new
SuDatabaseHelper
(
this
).
addPolicy
(
policy
);
}
if
(
timeout
>=
0
)
new
SuDatabaseHelper
(
this
).
addPolicy
(
policy
);
event
.
trigger
(
policy
);
CallbackHandler
.
unRegister
(
event
);
uidMap
.
remove
(
uid
);
finish
();
finish
();
}
}
private
class
SocketManager
extends
AsyncTask
<
Void
,
Void
,
Boolean
>
{
private
class
SocketManager
extends
Async
.
Normal
Task
<
Void
,
Void
,
Boolean
>
{
@Override
@Override
protected
Boolean
doInBackground
(
Void
...
params
)
{
protected
Boolean
doInBackground
(
Void
...
params
)
{
...
@@ -194,10 +221,22 @@ public class SuRequestActivity extends AppCompatActivity {
...
@@ -194,10 +221,22 @@ public class SuRequestActivity extends AppCompatActivity {
protected
void
onPostExecute
(
Boolean
result
)
{
protected
void
onPostExecute
(
Boolean
result
)
{
try
{
try
{
if
(!
result
)
throw
new
Throwable
();
if
(!
result
)
throw
new
Throwable
();
boolean
showRequest
=
false
;
event
=
uidMap
.
get
(
uid
);
if
(
event
==
null
)
{
showRequest
=
true
;
event
=
new
CallbackHandler
.
Event
();
uidMap
.
put
(
uid
,
event
);
}
CallbackHandler
.
register
(
event
,
self
);
if
(
showRequest
)
{
String
[]
pkgs
=
pm
.
getPackagesForUid
(
uid
);
String
[]
pkgs
=
pm
.
getPackagesForUid
(
uid
);
if
(
pkgs
==
null
||
pkgs
.
length
==
0
)
throw
new
Throwable
();
if
(
pkgs
==
null
||
pkgs
.
length
==
0
)
throw
new
Throwable
();
info
=
pm
.
getPackageInfo
(
pkgs
[
0
],
0
);
info
=
pm
.
getPackageInfo
(
pkgs
[
0
],
0
);
showRequest
();
showRequest
();
}
else
{
finish
();
}
}
catch
(
Throwable
e
)
{
}
catch
(
Throwable
e
)
{
handleAction
(
false
,
-
1
);
handleAction
(
false
,
-
1
);
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/utils/CallbackHandler.java
View file @
d9597549
...
@@ -16,6 +16,14 @@ public class CallbackHandler {
...
@@ -16,6 +16,14 @@ public class CallbackHandler {
list
.
add
(
listener
);
list
.
add
(
listener
);
}
}
public
static
void
unRegister
(
Event
event
)
{
HashSet
<
EventListener
>
list
=
listeners
.
get
(
event
);
if
(
list
!=
null
)
{
list
.
clear
();
listeners
.
remove
(
event
);
}
}
public
static
void
unRegister
(
Event
event
,
EventListener
listener
)
{
public
static
void
unRegister
(
Event
event
,
EventListener
listener
)
{
HashSet
<
EventListener
>
list
=
listeners
.
get
(
event
);
HashSet
<
EventListener
>
list
=
listeners
.
get
(
event
);
if
(
list
!=
null
)
{
if
(
list
!=
null
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment