From ae291c7d9e75ef922e7effe7dc48abc82cc18772 Mon Sep 17 00:00:00 2001 From: luciferWei Date: Fri, 12 Sep 2025 15:22:35 +0800 Subject: [PATCH] =?UTF-8?q?Feat=EF=BC=9A=20=E5=A2=9E=E5=8A=A0=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E6=89=A7=E8=A1=8C=E7=9A=84=E7=BB=9D=E5=AF=B9=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E3=80=82=20\nSigned-off-by:=20LuciferWei=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: luciferWei --- sudo/src/main.cpp | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/sudo/src/main.cpp b/sudo/src/main.cpp index 7340f791..d4cd12e4 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; -- Gitee