diff --git a/sudo/src/main.cpp b/sudo/src/main.cpp index 7340f791803ddb432ce5a8c80787368745738755..d4cd12e411d5be8c4abc65c172c9fd8ee3cafea4 100644 --- a/sudo/src/main.cpp +++ b/sudo/src/main.cpp @@ -34,7 +34,7 @@ #define PWD_BUF_LEN 128 #define CHALLENGE_LEN 32 -#define DEFAULT_PATH "/system/bin" +#define DEFAULT_PATH "/usr/local/bin:/bin:/usr/bin:/system/bin:/vendor/bin" #define DEFAULT_BASH "/system/bin/sh" #define PATH "PATH=" using namespace OHOS::UserIam; @@ -112,14 +112,11 @@ static void FreeArgvNew(char **argvNew) } /* - * Find cmd from PATH + * Find cmd from DEFAULT_PATH */ -static bool GetCmdInPath(char *cmd, int cmdBufLen, char *envp[]) +static bool GetCmdInPath(char *cmd, int cmdBufLen) { struct stat st; - char *path = nullptr; - char *pathBak = nullptr; - char **ep = nullptr; char *cp = nullptr; char pathBuf[PATH_MAX + 1] = {0}; bool findSuccess = false; @@ -128,15 +125,7 @@ static bool GetCmdInPath(char *cmd, int cmdBufLen, char *envp[]) return true; } - for (ep = envp; *ep != nullptr; ep++) { - if (strncmp(*ep, PATH, strlen(PATH)) == 0) { - path = *ep + strlen(PATH); - break; - } - } - - path = StrDup((path != nullptr && *path != '\0') ? path : DEFAULT_PATH); - pathBak = path; + char *path = StrDup(DEFAULT_PATH); do { if ((cp = strchr(path, ':')) != nullptr) { *cp = '\0'; @@ -149,7 +138,6 @@ static bool GetCmdInPath(char *cmd, int cmdBufLen, char *envp[]) path = cp + 1; } while (cp != nullptr); - delete [] pathBak; if (!findSuccess) { WriteTty(COMMAND_NOT_FOUND); return false; @@ -157,7 +145,7 @@ static bool GetCmdInPath(char *cmd, int cmdBufLen, char *envp[]) return (sprintf_s(cmd, cmdBufLen, "%s", pathBuf) < 0) ? false : true; } -static char **ParseCmd(int argc, char* argv[], char* env[], char *cmd, int cmdLen) +static char **ParseCmd(int argc, char* argv[], char *cmd, int cmdLen) { int startCopyArgvIndex = 1; int argvNewIndex = 0; @@ -203,7 +191,7 @@ static char **ParseCmd(int argc, char* argv[], char* env[], char *cmd, int cmdLe */ if (!isShc) { ret = sprintf_s(cmd, cmdLen, "%s", argv[1]); - if (ret < 0 || !GetCmdInPath(cmd, cmdLen, env)) { + if (ret < 0 || !GetCmdInPath(cmd, cmdLen)) { FreeArgvNew(argvTmp); return nullptr; } @@ -375,7 +363,7 @@ static bool CheckUserLimitation() } #endif -int main(int argc, char* argv[], char* env[]) +int main(int argc, char* argv[]) { if (!GetUserId()) { WriteStdErr("get user id failed.\n"); @@ -406,7 +394,7 @@ int main(int argc, char* argv[], char* env[]) } char execCmd[PATH_MAX + 1] = {0}; - char **argvNew = ParseCmd(argc, argv, env, execCmd, PATH_MAX + 1); + char **argvNew = ParseCmd(argc, argv, execCmd, PATH_MAX + 1); CloseTty(); if (argvNew == nullptr) { return 1;