Dump system settings for all users
Change-Id: Ic832b19fe698da1984876b2949c3f26990ae5076
This commit is contained in:
parent
ef11a6c887
commit
5ecd4beef8
@ -174,9 +174,7 @@ static void dumpstate() {
|
||||
dump_file("LAST PANIC CONSOLE", "/data/dontpanic/apanic_console");
|
||||
dump_file("LAST PANIC THREADS", "/data/dontpanic/apanic_threads");
|
||||
|
||||
run_command("SYSTEM SETTINGS", 20, SU_PATH, "root", "sqlite3",
|
||||
"/data/data/com.android.providers.settings/databases/settings.db",
|
||||
"pragma user_version; select * from system; select * from secure; select * from global;", NULL);
|
||||
for_each_userid(do_dump_settings, NULL);
|
||||
|
||||
/* The following have a tendency to get wedged when wifi drivers/fw goes belly-up. */
|
||||
run_command("NETWORK INTERFACES", 10, SU_PATH, "root", "netcfg", NULL);
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
typedef void (for_each_pid_func)(int, const char *);
|
||||
typedef void (for_each_tid_func)(int, int, const char *);
|
||||
typedef void (for_each_userid_func)(int);
|
||||
|
||||
/* prints the contents of a file */
|
||||
int dump_file(const char *title, const char* path);
|
||||
@ -51,6 +52,9 @@ void for_each_pid(for_each_pid_func func, const char *header);
|
||||
/* for each thread in the system, run the specified function */
|
||||
void for_each_tid(for_each_tid_func func, const char *header);
|
||||
|
||||
/* for each user id in the system, run the specified function */
|
||||
void for_each_userid(for_each_userid_func func, const char *header);
|
||||
|
||||
/* Displays a blocked processes in-kernel wait channel */
|
||||
void show_wchan(int pid, int tid, const char *name);
|
||||
|
||||
@ -60,6 +64,9 @@ void do_showmap(int pid, const char *name);
|
||||
/* Gets the dmesg output for the kernel */
|
||||
void do_dmesg();
|
||||
|
||||
/* Dumps settings for a given user id */
|
||||
void do_dump_settings(int userid);
|
||||
|
||||
/* Play a sound via Stagefright */
|
||||
void play_sound(const char* path);
|
||||
|
||||
|
@ -51,6 +51,29 @@ static const char* native_processes_to_dump[] = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
void for_each_userid(void (*func)(int), const char *header) {
|
||||
DIR *d;
|
||||
struct dirent *de;
|
||||
|
||||
if (header) printf("\n------ %s ------\n", header);
|
||||
func(0);
|
||||
|
||||
if (!(d = opendir("/data/system/users"))) {
|
||||
printf("Failed to open /data/system/users (%s)\n", strerror(errno));
|
||||
return;
|
||||
}
|
||||
|
||||
while ((de = readdir(d))) {
|
||||
int userid;
|
||||
if (de->d_type != DT_DIR || !(userid = atoi(de->d_name))) {
|
||||
continue;
|
||||
}
|
||||
func(userid);
|
||||
}
|
||||
|
||||
closedir(d);
|
||||
}
|
||||
|
||||
static void __for_each_pid(void (*helper)(int, const char *, void *), const char *header, void *arg) {
|
||||
DIR *d;
|
||||
struct dirent *de;
|
||||
@ -175,6 +198,22 @@ out_close:
|
||||
return;
|
||||
}
|
||||
|
||||
void do_dump_settings(int userid) {
|
||||
char title[255];
|
||||
char dbpath[255];
|
||||
char sql[255];
|
||||
sprintf(title, "SYSTEM SETTINGS (user %d)", userid);
|
||||
if (userid == 0) {
|
||||
strcpy(dbpath, "/data/data/com.android.providers.settings/databases/settings.db");
|
||||
strcpy(sql, "pragma user_version; select * from system; select * from secure; select * from global;");
|
||||
} else {
|
||||
sprintf(dbpath, "/data/system/users/%d/settings.db", userid);
|
||||
strcpy(sql, "pragma user_version; select * from system; select * from secure;");
|
||||
}
|
||||
run_command(title, 20, SU_PATH, "root", "sqlite3", dbpath, sql, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
void do_dmesg() {
|
||||
printf("------ KERNEL LOG (dmesg) ------\n");
|
||||
/* Get size of kernel buffer */
|
||||
|
Loading…
Reference in New Issue
Block a user