Skip to content

Commit 49fc519

Browse files
committed
Initial commit with version 2.3.1
0 parents  commit 49fc519

File tree

7 files changed

+895
-0
lines changed

7 files changed

+895
-0
lines changed

Android.mk

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
LOCAL_PATH := $(call my-dir)
2+
include $(CLEAR_VARS)
3+
4+
LOCAL_MODULE := su
5+
LOCAL_SRC_FILES := su.c activity.cpp
6+
7+
8+
LOCAL_C_INCLUDES += external/sqlite/dist
9+
LOCAL_SHARED_LIBRARIES := liblog libsqlite libandroid_runtime
10+
11+
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
12+
13+
include $(BUILD_EXECUTABLE)

MODULE_LICENSE_APACHE2

Whitespace-only changes.

NOTICE

+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
2+
Copyright (c) 2005-2008, The Android Open Source Project
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
7+
Unless required by applicable law or agreed to in writing, software
8+
distributed under the License is distributed on an "AS IS" BASIS,
9+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
See the License for the specific language governing permissions and
11+
limitations under the License.
12+
13+
14+
Apache License
15+
Version 2.0, January 2004
16+
http://www.apache.org/licenses/
17+
18+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
19+
20+
1. Definitions.
21+
22+
"License" shall mean the terms and conditions for use, reproduction,
23+
and distribution as defined by Sections 1 through 9 of this document.
24+
25+
"Licensor" shall mean the copyright owner or entity authorized by
26+
the copyright owner that is granting the License.
27+
28+
"Legal Entity" shall mean the union of the acting entity and all
29+
other entities that control, are controlled by, or are under common
30+
control with that entity. For the purposes of this definition,
31+
"control" means (i) the power, direct or indirect, to cause the
32+
direction or management of such entity, whether by contract or
33+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
34+
outstanding shares, or (iii) beneficial ownership of such entity.
35+
36+
"You" (or "Your") shall mean an individual or Legal Entity
37+
exercising permissions granted by this License.
38+
39+
"Source" form shall mean the preferred form for making modifications,
40+
including but not limited to software source code, documentation
41+
source, and configuration files.
42+
43+
"Object" form shall mean any form resulting from mechanical
44+
transformation or translation of a Source form, including but
45+
not limited to compiled object code, generated documentation,
46+
and conversions to other media types.
47+
48+
"Work" shall mean the work of authorship, whether in Source or
49+
Object form, made available under the License, as indicated by a
50+
copyright notice that is included in or attached to the work
51+
(an example is provided in the Appendix below).
52+
53+
"Derivative Works" shall mean any work, whether in Source or Object
54+
form, that is based on (or derived from) the Work and for which the
55+
editorial revisions, annotations, elaborations, or other modifications
56+
represent, as a whole, an original work of authorship. For the purposes
57+
of this License, Derivative Works shall not include works that remain
58+
separable from, or merely link (or bind by name) to the interfaces of,
59+
the Work and Derivative Works thereof.
60+
61+
"Contribution" shall mean any work of authorship, including
62+
the original version of the Work and any modifications or additions
63+
to that Work or Derivative Works thereof, that is intentionally
64+
submitted to Licensor for inclusion in the Work by the copyright owner
65+
or by an individual or Legal Entity authorized to submit on behalf of
66+
the copyright owner. For the purposes of this definition, "submitted"
67+
means any form of electronic, verbal, or written communication sent
68+
to the Licensor or its representatives, including but not limited to
69+
communication on electronic mailing lists, source code control systems,
70+
and issue tracking systems that are managed by, or on behalf of, the
71+
Licensor for the purpose of discussing and improving the Work, but
72+
excluding communication that is conspicuously marked or otherwise
73+
designated in writing by the copyright owner as "Not a Contribution."
74+
75+
"Contributor" shall mean Licensor and any individual or Legal Entity
76+
on behalf of whom a Contribution has been received by Licensor and
77+
subsequently incorporated within the Work.
78+
79+
2. Grant of Copyright License. Subject to the terms and conditions of
80+
this License, each Contributor hereby grants to You a perpetual,
81+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
82+
copyright license to reproduce, prepare Derivative Works of,
83+
publicly display, publicly perform, sublicense, and distribute the
84+
Work and such Derivative Works in Source or Object form.
85+
86+
3. Grant of Patent License. Subject to the terms and conditions of
87+
this License, each Contributor hereby grants to You a perpetual,
88+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
89+
(except as stated in this section) patent license to make, have made,
90+
use, offer to sell, sell, import, and otherwise transfer the Work,
91+
where such license applies only to those patent claims licensable
92+
by such Contributor that are necessarily infringed by their
93+
Contribution(s) alone or by combination of their Contribution(s)
94+
with the Work to which such Contribution(s) was submitted. If You
95+
institute patent litigation against any entity (including a
96+
cross-claim or counterclaim in a lawsuit) alleging that the Work
97+
or a Contribution incorporated within the Work constitutes direct
98+
or contributory patent infringement, then any patent licenses
99+
granted to You under this License for that Work shall terminate
100+
as of the date such litigation is filed.
101+
102+
4. Redistribution. You may reproduce and distribute copies of the
103+
Work or Derivative Works thereof in any medium, with or without
104+
modifications, and in Source or Object form, provided that You
105+
meet the following conditions:
106+
107+
(a) You must give any other recipients of the Work or
108+
Derivative Works a copy of this License; and
109+
110+
(b) You must cause any modified files to carry prominent notices
111+
stating that You changed the files; and
112+
113+
(c) You must retain, in the Source form of any Derivative Works
114+
that You distribute, all copyright, patent, trademark, and
115+
attribution notices from the Source form of the Work,
116+
excluding those notices that do not pertain to any part of
117+
the Derivative Works; and
118+
119+
(d) If the Work includes a "NOTICE" text file as part of its
120+
distribution, then any Derivative Works that You distribute must
121+
include a readable copy of the attribution notices contained
122+
within such NOTICE file, excluding those notices that do not
123+
pertain to any part of the Derivative Works, in at least one
124+
of the following places: within a NOTICE text file distributed
125+
as part of the Derivative Works; within the Source form or
126+
documentation, if provided along with the Derivative Works; or,
127+
within a display generated by the Derivative Works, if and
128+
wherever such third-party notices normally appear. The contents
129+
of the NOTICE file are for informational purposes only and
130+
do not modify the License. You may add Your own attribution
131+
notices within Derivative Works that You distribute, alongside
132+
or as an addendum to the NOTICE text from the Work, provided
133+
that such additional attribution notices cannot be construed
134+
as modifying the License.
135+
136+
You may add Your own copyright statement to Your modifications and
137+
may provide additional or different license terms and conditions
138+
for use, reproduction, or distribution of Your modifications, or
139+
for any such Derivative Works as a whole, provided Your use,
140+
reproduction, and distribution of the Work otherwise complies with
141+
the conditions stated in this License.
142+
143+
5. Submission of Contributions. Unless You explicitly state otherwise,
144+
any Contribution intentionally submitted for inclusion in the Work
145+
by You to the Licensor shall be under the terms and conditions of
146+
this License, without any additional terms or conditions.
147+
Notwithstanding the above, nothing herein shall supersede or modify
148+
the terms of any separate license agreement you may have executed
149+
with Licensor regarding such Contributions.
150+
151+
6. Trademarks. This License does not grant permission to use the trade
152+
names, trademarks, service marks, or product names of the Licensor,
153+
except as required for reasonable and customary use in describing the
154+
origin of the Work and reproducing the content of the NOTICE file.
155+
156+
7. Disclaimer of Warranty. Unless required by applicable law or
157+
agreed to in writing, Licensor provides the Work (and each
158+
Contributor provides its Contributions) on an "AS IS" BASIS,
159+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
160+
implied, including, without limitation, any warranties or conditions
161+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
162+
PARTICULAR PURPOSE. You are solely responsible for determining the
163+
appropriateness of using or redistributing the Work and assume any
164+
risks associated with Your exercise of permissions under this License.
165+
166+
8. Limitation of Liability. In no event and under no legal theory,
167+
whether in tort (including negligence), contract, or otherwise,
168+
unless required by applicable law (such as deliberate and grossly
169+
negligent acts) or agreed to in writing, shall any Contributor be
170+
liable to You for damages, including any direct, indirect, special,
171+
incidental, or consequential damages of any character arising as a
172+
result of this License or out of the use or inability to use the
173+
Work (including but not limited to damages for loss of goodwill,
174+
work stoppage, computer failure or malfunction, or any and all
175+
other commercial damages or losses), even if such Contributor
176+
has been advised of the possibility of such damages.
177+
178+
9. Accepting Warranty or Additional Liability. While redistributing
179+
the Work or Derivative Works thereof, You may choose to offer,
180+
and charge a fee for, acceptance of support, warranty, indemnity,
181+
or other liability obligations and/or rights consistent with this
182+
License. However, in accepting such obligations, You may act only
183+
on Your own behalf and on Your sole responsibility, not on behalf
184+
of any other Contributor, and only if You agree to indemnify,
185+
defend, and hold each Contributor harmless for any liability
186+
incurred by, or claims asserted against, such Contributor by reason
187+
of your accepting any such warranty or additional liability.
188+
189+
END OF TERMS AND CONDITIONS
190+

README

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
This is the su binary for Superuser on Android.
2+
3+
Any app that requires root access must call this binary in order to be given root access.
4+
5+
Branches for this repo support the following Android versions:
6+
7+
- legacy
8+
- cupcake
9+
- donut
10+
11+
- master
12+
- eclair
13+
- froyo
14+
- gingerbread
15+
- honeycomb*
16+
17+
Branches marked with '-dev' are in work and should probably not be used. I will push to those channels as I develop new versions so they may be broken from time to time.
18+
19+
* I have yet to personally test superuser on any honeycomb devices, therefore I cannot guarantee it's compatibility

activity.cpp

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#include <unistd.h>
2+
#include <android_runtime/ActivityManager.h>
3+
#include <binder/IBinder.h>
4+
#include <binder/IServiceManager.h>
5+
#include <binder/Parcel.h>
6+
#include <utils/String8.h>
7+
#include <assert.h>
8+
9+
extern "C" {
10+
#include "su.h"
11+
#include <private/android_filesystem_config.h>
12+
#include <cutils/properties.h>
13+
}
14+
15+
using namespace android;
16+
17+
static const int BROADCAST_INTENT_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 13;
18+
19+
static const int NULL_TYPE_ID = 0;
20+
21+
static const int VAL_STRING = 0;
22+
static const int VAL_INTEGER = 1;
23+
24+
static const int START_SUCCESS = 0;
25+
26+
int send_intent(struct su_initiator *from, struct su_request *to, const char *socket_path, int type)
27+
{
28+
char sdk_version_prop[PROPERTY_VALUE_MAX] = "0";
29+
property_get("ro.build.version.sdk", sdk_version_prop, "0");
30+
31+
int sdk_version = atoi(sdk_version_prop);
32+
33+
sp<IServiceManager> sm = defaultServiceManager();
34+
sp<IBinder> am = sm->checkService(String16("activity"));
35+
assert(am != NULL);
36+
37+
Parcel data, reply;
38+
data.writeInterfaceToken(String16("android.app.IActivityManager"));
39+
40+
data.writeStrongBinder(NULL); /* caller */
41+
42+
/* intent */
43+
if (type == 0) {
44+
data.writeString16(String16("com.noshufou.android.su.REQUEST")); /* action */
45+
} else {
46+
data.writeString16(String16("com.noshufou.android.su.NOTIFICATION")); /* action */
47+
}
48+
data.writeInt32(NULL_TYPE_ID); /* Uri - data */
49+
data.writeString16(NULL, 0); /* type */
50+
data.writeInt32(0); /* flags */
51+
if (sdk_version >= 4) {
52+
// added in donut
53+
data.writeString16(NULL, 0); /* package name - DONUT ONLY, NOT IN CUPCAKE. */
54+
}
55+
data.writeString16(NULL, 0); /* ComponentName - package */
56+
data.writeInt32(0); /* Categories - size */
57+
if (sdk_version >= 7) {
58+
// added in eclair rev 7
59+
data.writeInt32(0);
60+
}
61+
{ /* Extras */
62+
data.writeInt32(-1); /* dummy, will hold length */
63+
int oldPos = data.dataPosition();
64+
data.writeInt32(0x4C444E42); // 'B' 'N' 'D' 'L'
65+
{ /* writeMapInternal */
66+
data.writeInt32(4); /* writeMapInternal - size */
67+
68+
data.writeInt32(VAL_STRING);
69+
data.writeString16(String16("caller_uid"));
70+
data.writeInt32(VAL_INTEGER);
71+
data.writeInt32(from->uid);
72+
73+
data.writeInt32(VAL_STRING);
74+
data.writeString16(String16("desired_uid"));
75+
data.writeInt32(VAL_INTEGER);
76+
data.writeInt32(to->uid);
77+
78+
data.writeInt32(VAL_STRING);
79+
data.writeString16(String16("desired_cmd"));
80+
data.writeInt32(VAL_STRING);
81+
data.writeString16(String16(to->command));
82+
83+
data.writeInt32(VAL_STRING);
84+
data.writeString16(String16("socket"));
85+
data.writeInt32(VAL_STRING);
86+
data.writeString16(String16(socket_path));
87+
}
88+
int newPos = data.dataPosition();
89+
data.setDataPosition(oldPos - 4);
90+
data.writeInt32(newPos - oldPos); /* length */
91+
data.setDataPosition(newPos);
92+
}
93+
94+
data.writeString16(NULL, 0); /* resolvedType */
95+
96+
data.writeInt32(-1); /* Not sure what this is for, but it prevents a warning */
97+
98+
data.writeStrongBinder(NULL); /* resultTo */
99+
data.writeInt32(-1); /* resultCode */
100+
data.writeString16(NULL, 0); /* resultData */
101+
102+
data.writeInt32(-1); /* resultExtras */
103+
104+
data.writeString16(String16("com.noshufou.android.su.RESPOND")); /* perm */
105+
data.writeInt32(0); /* serialized */
106+
data.writeInt32(0); /* sticky */
107+
data.writeInt32(-1);
108+
109+
status_t ret = am->transact(BROADCAST_INTENT_TRANSACTION, data, &reply);
110+
if (ret < START_SUCCESS) return -1;
111+
112+
return 0;
113+
}

0 commit comments

Comments
 (0)