}
}
-int connect_daemon(int argc, char *argv[]) {
+int connect_daemon(int argc, char *argv[], int ppid) {
int uid = getuid();
int ptmx;
char pts_slave[PATH_MAX];
// User ID
write_int(socketfd, uid);
// Parent PID
- write_int(socketfd, getppid());
+ write_int(socketfd, ppid);
write_int(socketfd, mount_storage);
// Send stdin
from->uid = getuid();
from->pid = getppid();
+ if (is_daemon) {
+ from->uid = daemon_from_uid;
+ from->pid = daemon_from_pid;
+ }
+
/* Get the command line */
snprintf(path, sizeof(path), "/proc/%u/cmdline", from->pid);
fd = open(path, O_RDONLY);
strncpy(from->name, pw->pw_name, sizeof(from->name));
}
- if (is_daemon) {
- from->uid = daemon_from_uid;
- from->pid = daemon_from_pid;
- }
-
return 0;
}
return run_daemon();
}
+ int ppid = getppid();
fork_for_samsung();
// Sanitize all secure environment variables (from linker_environ.c in AOSP linker).
get_api_version() >= 19) {
// attempt to connect to daemon...
LOGD("starting daemon client %d %d", getuid(), geteuid());
- return connect_daemon(argc, argv);
+ return connect_daemon(argc, argv, ppid);
}
}
}
int run_daemon();
-int connect_daemon(int argc, char *argv[]);
+int connect_daemon(int argc, char *argv[], int ppid);
int su_main(int argc, char *argv[], int need_client);
// for when you give zero fucks about the state of the child process.
// this version of fork understands you don't care about the child.