diff options
author | Drew Richardson <drew.richardson@arm.com> | 2015-07-22 12:00:00 -0700 |
---|---|---|
committer | Drew Richardson <drew.richardson@arm.com> | 2015-07-24 07:41:39 -0700 |
commit | 7ca6004c0b05138c49b9b21e0045487f55a60ab6 (patch) | |
tree | 74cdc2c608e28891189b58e68992b3a8acf140e0 /daemon/Setup.cpp | |
parent | c2fdcde9f26fff5eebbcc2ab34adb9d4202e0d55 (diff) |
Signed-off-by: Drew Richardson <drew.richardson@arm.com>
Diffstat (limited to 'daemon/Setup.cpp')
-rw-r--r-- | daemon/Setup.cpp | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/daemon/Setup.cpp b/daemon/Setup.cpp index 7dd83ce..524a702 100644 --- a/daemon/Setup.cpp +++ b/daemon/Setup.cpp @@ -153,30 +153,34 @@ void update(const char *const gatorPath) { handleException(); } - if (KERNEL_VERSION(version[0], version[1], version[2]) < KERNEL_VERSION(2, 6, 32)) { - logg->logError(GATOR_ERROR "Streamline can't automatically setup gator as this kernel version is not supported. Please upgrade the kernel on your device."); - handleException(); - } - if (KERNEL_VERSION(version[0], version[1], version[2]) < KERNEL_VERSION(3, 4, 0)) { - logg->logError(GATOR_ERROR "Streamline can't automatically setup gator as gator.ko is required for this version of Linux. Please build gator.ko and gatord and install them on your device."); + logg->logError(GATOR_ERROR "Streamline can't automatically setup gator as this kernel version is not supported. Please upgrade the kernel on your device."); handleException(); } if (geteuid() != 0) { - printf(GATOR_MSG "trying sudo\n"); - execlp("sudo", "sudo", gatorPath, "-u", NULL); - // Streamline will provide the password if needed - - printf(GATOR_MSG "trying su\n"); char buf[1<<10]; + snprintf(buf, sizeof(buf), + "which sudo &&" + "(" + "sudo -n %1$s -u ||" + "(" + "echo " GATOR_MSG "trying sudo;" + // Streamline will provide the password + "sudo %1$s -u" + ")" + ") || (" + "echo " GATOR_MSG "trying su;" /* * Different versions of su handle additional -c command line options differently and expect the * arguments in different ways. Try both ways wrapped in a shell. * * Then invoke another shell after su as it avoids odd failures on some Android systems */ - snprintf(buf, sizeof(buf), "su -c \"sh -c '%s -u'\" || su -c sh -c '%s -u'", gatorPath, gatorPath); + "su -c \"sh -c '%1$s -u'\" ||" + "su -c sh -c '%1$s -u'" + ")", + gatorPath); execlp("sh", "sh", "-c", buf, NULL); // Streamline will provide the password if needed @@ -228,6 +232,11 @@ void update(const char *const gatorPath) { umount("/dev/gator"); syscall(__NR_delete_module, "gator", O_NONBLOCK); + if (access("/sys/module/gator", F_OK) == 0) { + logg->logError(GATOR_ERROR "Unable to unload gator.ko, the gator module may be built into the kernel or gator.ko cannot be unloaded. Rebooting the device may resolve the issue."); + handleException(); + } + rename("gatord", "gatord.old"); rename("gator.ko", "gator.ko.old"); @@ -314,8 +323,7 @@ void update(const char *const gatorPath) { close(pipefd[1]); const ssize_t bytes = read(pipefd[0], buf, sizeof(buf)); if (bytes > 0) { - logg->logError("%s", buf); - handleException(); + printf("%s\n", buf); } close(pipefd[0]); |