Restore working directory

This commit is contained in:
topjohnwu 2017-02-01 05:59:48 +08:00
parent fe3c66a7c8
commit 165eee102a
4 changed files with 15 additions and 2 deletions

View File

@ -1,4 +1,5 @@
/* /*
** Copyright 2017, John Wu (@topjohnwu)
** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2010, Adam Shanks (@ChainsDD)
** Copyright 2008, Zinx Verituse (@zinxv) ** Copyright 2008, Zinx Verituse (@zinxv)
** **

View File

@ -1,4 +1,5 @@
/* /*
** Copyright 2017, John Wu (@topjohnwu)
** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2010, Adam Shanks (@ChainsDD)
** Copyright 2008, Zinx Verituse (@zinxv) ** Copyright 2008, Zinx Verituse (@zinxv)
** **
@ -287,6 +288,9 @@ static int daemon_accept(int fd) {
LOGD("remote uid: %d", daemon_from_uid); LOGD("remote uid: %d", daemon_from_uid);
daemon_from_pid = read_int(fd); daemon_from_pid = read_int(fd);
LOGD("remote req pid: %d", daemon_from_pid); LOGD("remote req pid: %d", daemon_from_pid);
int mount_storage = read_int(fd);
char *cwd = read_string(fd);
LOGD("remote cwd: %s", cwd);
struct ucred credentials; struct ucred credentials;
socklen_t ucred_length = sizeof(struct ucred); socklen_t ucred_length = sizeof(struct ucred);
@ -303,7 +307,6 @@ static int daemon_accept(int fd) {
daemon_from_pid = credentials.pid; daemon_from_pid = credentials.pid;
} }
int mount_storage = read_int(fd);
// The the FDs for each of the streams // The the FDs for each of the streams
int infd = recv_fd(fd); int infd = recv_fd(fd);
int outfd = recv_fd(fd); int outfd = recv_fd(fd);
@ -441,6 +444,10 @@ static int daemon_accept(int fd) {
} }
#endif #endif
// Change directory to cwd
chdir(cwd);
free(cwd);
return run_daemon_child(infd, outfd, errfd, argc, argv); return run_daemon_child(infd, outfd, errfd, argc, argv);
} }
@ -575,6 +582,8 @@ int connect_daemon(int argc, char *argv[], int ppid) {
int uid = getuid(); int uid = getuid();
int ptmx = -1; int ptmx = -1;
char pts_slave[PATH_MAX]; char pts_slave[PATH_MAX];
char cwd[PATH_MAX];
getcwd(cwd, sizeof(cwd));
struct sockaddr_un sun; struct sockaddr_un sun;
@ -634,6 +643,8 @@ int connect_daemon(int argc, char *argv[], int ppid) {
// Parent PID // Parent PID
write_int(socketfd, ppid); write_int(socketfd, ppid);
write_int(socketfd, mount_storage); write_int(socketfd, mount_storage);
// CWD
write_string(socketfd, cwd);
// Send stdin // Send stdin
if (atty & ATTY_IN) { if (atty & ATTY_IN) {

1
su.c
View File

@ -1,5 +1,6 @@
// vim: set ts=4 expandtab sw=4 : // vim: set ts=4 expandtab sw=4 :
/* /*
** Copyright 2017, John Wu (@topjohnwu)
** Copyright 2015, Pierre-Hugues Husson <phh@phh.me> ** Copyright 2015, Pierre-Hugues Husson <phh@phh.me>
** Copyright 2010, Adam Shanks (@ChainsDD) ** Copyright 2010, Adam Shanks (@ChainsDD)
** Copyright 2008, Zinx Verituse (@zinxv) ** Copyright 2008, Zinx Verituse (@zinxv)

2
su.h
View File

@ -78,7 +78,7 @@
#ifndef VERSION_CODE #ifndef VERSION_CODE
#define VERSION_CODE 6 #define VERSION_CODE 6
#endif #endif
#define VERSION "MAGISKSU:" xstr(VERSION_CODE) " (topjohnwu)" #define VERSION xstr(VERSION_CODE) ":MAGISKSU (topjohnwu)"
#define PROTO_VERSION 1 #define PROTO_VERSION 1