13
13
#include "utils.h"
14
14
15
15
#define BUFFSIZE 4096
16
- #define DDEXE "/system/bin/ddexe"
17
- #define DDEXEREAL "/system/bin/ddexereal"
18
- #define DDEXE_REAL "/system/bin/ddexe_real"
16
+ #define MULTIUSER_APP_PER_USER_RANGE 100000
19
17
20
- int exists (const char * path ) {
21
- return !access (path , R_OK );
18
+ typedef uid_t userid_t ;
19
+ userid_t multiuser_get_user_id (uid_t uid ) {
20
+ return uid / MULTIUSER_APP_PER_USER_RANGE ;
21
+ }
22
+
23
+ int file_exists (const char * path ) {
24
+ return access (path , R_OK ) == 0 ;
22
25
}
23
26
24
27
int setxattr (const char * path , const char * value ) {
25
- if (!exists ("/sys/fs/selinux" )) {
28
+ if (!file_exists ("/sys/fs/selinux" )) {
26
29
return 0 ;
27
30
}
28
31
return syscall (__NR_setxattr , path , "security.selinux" , value , strlen (value ), 0 );
@@ -114,11 +117,11 @@ int mount_system() {
114
117
115
118
ret = get_mounts_dev_dir ("/system" , & dev , & dir );
116
119
if (ret < 0 ) {
117
- system ("mount -o remount rw /system" );
120
+ system ("mount -o remount, rw /system" );
118
121
return mount ("ro" , "/system" , NULL , 32800 , NULL );
119
122
}
120
123
121
- system ("mount -o remount rw /system" );
124
+ system ("mount -o remount, rw /system" );
122
125
ret = mount (dev , dir , "none" , MS_REMOUNT , NULL );
123
126
free (dev );
124
127
free (dir );
@@ -139,91 +142,8 @@ static int write_file(const char *path, const char *data, uid_t owner, gid_t gro
139
142
return n == len ? 0 : -1 ;;
140
143
}
141
144
142
- int OPPO () {
143
- char brand [PROPERTY_VALUE_MAX ];
144
- char * data = read_file ("/system/build.prop" );
145
- get_property (data , brand , "ro.product.brand" , "0" );
146
- free (data );
147
-
148
- if (strstr (brand , "OPPO" )) {
149
- return write_file ("/system/etc/install_recovery.sh" , \
150
- "#!/system/bin/sh\n/system/xbin/su --daemon &\n" , \
151
- 0 , 0 , 0755 );
152
- }
153
-
154
- return 0 ;
155
- }
156
-
157
- int install_recovery_sh () {
158
- if (getuid () != 0 || getgid () != 0 ) {
159
- PLOGE ("install_recovery_sh requires root. uid/gid not root" );
160
- return -1 ;
161
- }
162
- mount_system ();
163
-
164
- write_file ("/system/etc/install-recovery.sh" , \
165
- "#!/system/bin/sh\n/system/xbin/su --daemon &\n" , \
166
- 0 , 0 , 0755 );
167
-
168
- return OPPO ();
169
- }
170
-
171
- int install () {
172
- if (getuid () != 0 || getgid () != 0 ) {
173
- PLOGE ("install requires root. uid/gid not root" );
174
- return -1 ;
175
- }
176
- mount_system ();
177
- install_recovery_sh ();
178
-
179
- if (exists (DDEXE )) {
180
- if (!exists (DDEXE_REAL ) && !exists (DDEXEREAL )) {
181
- copy_file (DDEXE , DDEXE_REAL );
182
- }
183
- else if (exists (DDEXEREAL )){
184
- copy_file (DDEXEREAL , DDEXE_REAL );
185
- unlink (DDEXEREAL );
186
- }
187
- else {
188
- }
189
- }
190
- chown (DDEXE_REAL , 0 , 2000 );
191
- chmod (DDEXE_REAL , 0755 );
192
-
193
- if (exists (DDEXE_REAL )) {
194
- unlink (DDEXE );
195
- write_file (DDEXE , \
196
- "#!/system/bin/sh\n/system/xbin/su --daemon &\n/system/bin/ddexe_real\n" , \
197
- 0 , 2000 , 0755 );
198
- }
199
-
200
- setxattr (DDEXE , "u:object_r:system_file:s0" );
201
- setxattr (DDEXE_REAL , "u:object_r:system_file:s0" );
202
- return 0 ;
203
- }
204
-
205
- int uninstall () {
206
- if (getuid () != 0 || getgid () != 0 ) {
207
- PLOGE ("uninstall requires root. uid/gid not root" );
208
- return -1 ;
209
- }
210
- mount_system ();
211
-
212
- if (exists (DDEXEREAL )) {
213
- copy_file (DDEXEREAL , DDEXE );
214
- unlink (DDEXEREAL );
215
- }
216
- else if (exists (DDEXE_REAL )) {
217
- copy_file (DDEXE_REAL , DDEXE );
218
- unlink (DDEXE_REAL );
219
- }
220
- else {
221
- }
222
-
223
- chown (DDEXE , 0 , 2000 );
224
- chmod (DDEXE , 0755 );
225
-
226
- setxattr (DDEXE , "u:object_r:system_file:s0" );
145
+ int fix_unused (const char * fmt , ...)
146
+ {
227
147
return 0 ;
228
148
}
229
149
@@ -233,8 +153,10 @@ char* format(const char* fmt, ...) {
233
153
char * buffer ;
234
154
va_start ( args , fmt );
235
155
len = vsnprintf (NULL , 0 , fmt , args ) + 1 ;
236
- buffer = (char * )malloc (len * sizeof (char ));
237
- vsprintf ( buffer , fmt , args );
156
+ buffer = (char * )malloc (len );
157
+ vsnprintf ( buffer , len , fmt , args );
158
+ va_end ( args );
159
+
238
160
return buffer ;
239
161
}
240
162
@@ -243,9 +165,10 @@ int tolog(const char* fmt, ...) {
243
165
int len ;
244
166
char * buffer ;
245
167
va_start ( args , fmt );
246
- len = vsnprintf (NULL , 0 , fmt , args ) + 1 ;
247
- buffer = (char * )malloc (len * sizeof (char ));
248
- vsprintf ( buffer , fmt , args );
168
+ len = vsnprintf ( NULL , 0 , fmt , args ) + 1 ;
169
+ buffer = (char * )malloc ( len );
170
+ vsnprintf ( buffer , len , fmt , args );
171
+ va_end ( args );
249
172
250
173
printf ("%s\n" , buffer );
251
174
free (buffer );
0 commit comments