diff --git a/services/begetctl/BUILD.gn b/services/begetctl/BUILD.gn index c2737d3cb9ca9329a1d2ce0e5d7c3bd650d4b8ec..005e05fb07e7aa7bf41b4c436ce2019d8380ad8f 100755 --- a/services/begetctl/BUILD.gn +++ b/services/begetctl/BUILD.gn @@ -61,6 +61,7 @@ if (defined(ohos_lite)) { ohos_executable("begetctl") { sources = [ + "begetctl_cmd.c", "bootchart_cmd.c", "dump_service.c", "init_cmd_reboot.c", diff --git a/services/begetctl/begetctl_cmd.c b/services/begetctl/begetctl_cmd.c index da77387b6ae8f5a10b8eb7fd77ac3d48ff44feac..4e0f354a3a0d45b8df59b90d534e188b2836c4f5 100644 --- a/services/begetctl/begetctl_cmd.c +++ b/services/begetctl/begetctl_cmd.c @@ -15,6 +15,9 @@ #include #include #include +#include +#include +#include #include "begetctl.h" #include "init_utils.h" @@ -86,12 +89,64 @@ static int32_t GetInitLogLevelFromParam(BShellHandle shell, int argc, char **arg return 0; } +static int32_t GetUidByName(BShellHandle shell, int argc, char **argv) +{ + if (argc != 2) { // 2 is dac get uid parameter number + char *helpArgs[] = {"dac", NULL}; + BShellCmdHelp(shell, 1, helpArgs); + return 0; + } + struct passwd *data = getpwnam(argv[1]); + if (data == NULL) { + printf("getpwnam uid failed\n"); + } else { + printf("getpwnam uid %s : %d\n", argv[1], data->pw_uid); + } + + data = NULL; + while ((data = getpwent()) != NULL) { + if ((data->pw_name != NULL) && (strcmp(data->pw_name, argv[1]) == 0)) { + printf("getpwent uid %s : %d\n", argv[1], data->pw_uid); + break; + } + } + endpwent(); + return 0; +} + +static int32_t GetGidByName(BShellHandle shell, int argc, char **argv) +{ + if (argc != 2) { // 2 is dac get gid parameter number + char *helpArgs[] = {"dac", NULL}; + BShellCmdHelp(shell, 1, helpArgs); + return 0; + } + struct group *data = getgrnam(argv[1]); + if (data == NULL) { + printf("getgrnam gid failed\n"); + } else { + printf("getgrnam gid %s : %d\n", argv[1], data->gr_gid); + } + + data = NULL; + while ((data = getgrent()) != NULL) { + if ((data->gr_name != NULL) && (strcmp(data->gr_name, argv[1]) == 0)) { + printf("getgrent gid %s : %d\n", argv[1], data->gr_gid); + break; + } + } + endgrent(); + return 0; +} + MODULE_CONSTRUCTOR(void) { const CmdInfo infos[] = { {"set", SetInitLogLevelFromParam, "set init log level 0:debug, 1:info, 2:warning, 3:err, 4:fatal", "set log level", "set log level"}, {"get", GetInitLogLevelFromParam, "get init log level", "get log level", "get log level"}, + {"dac", GetGidByName, "get dac gid by group name", "dac gid groupname", "dac gid"}, + {"dac", GetUidByName, "get dac uid by user name", "dac uid username", "dac uid"}, }; for (size_t i = 0; i < sizeof(infos) / sizeof(infos[0]); i++) { BShellEnvRegisterCmd(GetShellHandle(), &infos[i]);