static int HelpCommand(char **argv, // IN: Command line arguments int argc, // IN: Length of argv gboolean quiet) // IN { int retval = EXIT_SUCCESS; if (++optind < argc) { int i; for (i = 0; i < ARRAYSIZE(commands); i++) { if (toolbox_strcmp(commands[i].command, argv[optind]) == 0) { commands[i].helpFunc(argv[0], commands[i].command); return EXIT_SUCCESS; } } ToolsCmd_UnknownEntityError(argv[0], SU_(arg.subcommand, "subcommand"), argv[optind]); retval = EX_USAGE; } ToolboxCmdHelp(argv[0], argv[optind - 1]); return retval; }
int Stat_Command(char **argv, // IN: Command line arguments int argc, // IN: Length of command line arguments gboolean quiet) // IN { if (toolbox_strcmp(argv[optind], "hosttime") == 0) { return StatHostTime(); } else if (toolbox_strcmp(argv[optind], "sessionid") == 0) { return StatGetSessionID(); } else if (toolbox_strcmp(argv[optind], "balloon") == 0) { return StatGetMemoryBallooned(); } else if (toolbox_strcmp(argv[optind], "swap") == 0) { return StatGetMemorySwapped(); } else if (toolbox_strcmp(argv[optind], "memlimit") == 0) { return StatGetMemoryLimit(); } else if (toolbox_strcmp(argv[optind], "memres") == 0) { return StatGetMemoryReservation(); } else if (toolbox_strcmp(argv[optind], "cpures") == 0) { return StatGetCpuReservation(); } else if (toolbox_strcmp(argv[optind], "cpulimit") == 0) { return StatGetCpuLimit(); } else if (toolbox_strcmp(argv[optind], "speed") == 0) { return StatProcessorSpeed(); } else if (toolbox_strcmp(argv[optind], "raw") == 0) { return StatGetRaw((optind + 1 < argc) ? argv[optind + 1] : "", // encoding (optind + 2 < argc) ? argv[optind + 2] : "", // stat (optind + 3 < argc) ? argv[optind + 3] : "");// param } else { ToolsCmd_UnknownEntityError(argv[0], SU_(arg.subcommand, "subcommand"), argv[optind]); return EX_USAGE; } }
int Script_Command(char **argv, // IN: command line arguments. int argc, // IN: the length of the command line arguments. gboolean quiet) // IN { const char *apm; if (++optind >= argc) { ToolsCmd_MissingEntityError(argv[0], SU_(arg.scripttype, "script type")); return EX_USAGE; } apm = argv[optind++]; if (!ScriptCheckName(apm)) { ToolsCmd_UnknownEntityError(argv[0], SU_(arg.scripttype, "script type"), apm); return EX_USAGE; } if (optind >= argc) { ToolsCmd_MissingEntityError(argv[0], SU_(arg.subcommand, "subcommand")); return EX_USAGE; } if (toolbox_strcmp(argv[optind], "default") == 0) { return ScriptGetDefault(argv[0], apm); } else if (toolbox_strcmp(argv[optind], "current") == 0) { return ScriptGetCurrent(argv[0], apm); } else if (toolbox_strcmp(argv[optind], "set") == 0) { if (++optind >= argc) { ToolsCmd_MissingEntityError(argv[0], SU_(arg.scriptpath, "script path")); return EX_USAGE; } return ScriptSet(argv[0], apm, argv[optind]); } else if (toolbox_strcmp(argv[optind], "enable") == 0) { return ScriptToggle(argv[0], apm, TRUE); } else if (toolbox_strcmp(argv[optind], "disable") == 0) { return ScriptToggle(argv[0], apm, FALSE); } else { ToolsCmd_UnknownEntityError(argv[0], SU_(arg.subcommand, "subcommand"), argv[optind]); return EX_USAGE; } }
int TimeSync_Command(char **argv, // IN: command line arguments int argc, // IN: The length of the command line arguments gboolean quiet) // IN { if (toolbox_strcmp(argv[optind], "enable") == 0) { return TimeSyncEnable(); } else if (toolbox_strcmp(argv[optind], "disable") == 0) { return TimeSyncDisable(); } else if (toolbox_strcmp(argv[optind], "status") == 0) { return TimeSyncStatus(); } else { ToolsCmd_UnknownEntityError(argv[0], SU_(arg.subcommand, "subcommand"), argv[optind]); return EX_USAGE; } }
static int ScriptToggle(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: APM name Bool enable) // IN: status { const char *path; const char *confName; int ret = EXIT_SUCCESS; GKeyFile *confDict; GError *err = NULL; confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); if (!enable) { path = ""; } else { path = GuestApp_GetDefaultScript(confName); } g_key_file_set_string(confDict, "powerops", confName, path); if (!VMTools_WriteConfig(NULL, confDict, &err)) { ToolsCmd_PrintErr(SU_(script.write.error, "Error writing config: %s\n"), err->message); g_clear_error(&err); ret = EX_TEMPFAIL; } g_key_file_free(confDict); return ret; }
static int ScriptSet(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: APM name const char *path) // IN: Verbosity flag { const char *confName; int ret = EXIT_SUCCESS; GKeyFile *confDict = NULL; GError *err = NULL; if (!File_Exists(path)) { ToolsCmd_PrintErr(SU_(script.notfound, "%s doesn't exist.\n"), path); return EX_OSFILE; } confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); g_key_file_set_string(confDict, "powerops", confName, path); if (!VMTools_WriteConfig(NULL, confDict, &err)) { ToolsCmd_PrintErr(SU_(script.write.error, "Error writing config: %s\n"), err->message); g_clear_error(&err); ret = EX_TEMPFAIL; } g_key_file_free(confDict); return ret; }
main(int argc, // IN: length of command line arguments char **argv) // IN: Command line arguments #endif { Bool show_help = FALSE; Bool show_version = FALSE; CmdTable *cmd = NULL; GKeyFile *conf = NULL; int c; int retval = EXIT_FAILURE; #if defined(_WIN32) char **argv; Unicode_InitW(argc, wargv, NULL, &argv, NULL); #else Unicode_Init(argc, &argv, NULL); #endif setlocale(LC_ALL, ""); VMTools_LoadConfig(NULL, G_KEY_FILE_NONE, &conf, NULL); VMTools_ConfigLogging("toolboxcmd", conf, FALSE, FALSE); VMTools_BindTextDomain(VMW_TEXT_DOMAIN, NULL, NULL); /* * Check if we are in a VM */ if (!VmCheck_IsVirtualWorld()) { g_printerr(SU_(error.novirtual, "%s must be run inside a virtual machine.\n"), argv[0]); goto exit; } /* * Parse the command line optional arguments */ while (1) { int option_index = 0; c = getopt_long(argc, argv, options, long_options, &option_index); /* Detect the end of the options. */ if (c == -1) { break; } switch (c) { case 'h': show_help = TRUE; break; case 'v': show_version = TRUE; break; case 'q': gQuiet = TRUE; break; case '?': /* getopt_long already printed an error message. */ g_printerr(SU_(help.hint, "Try '%s %s%s%s' for more information.\n"), argv[0], "-h", "", ""); goto exit; default: goto exit; } } if (show_version) { g_print("%s (%s)\n", TOOLBOXCMD_VERSION_STRING, BUILD_NUMBER); retval = EXIT_SUCCESS; } else if (show_help) { ToolboxCmdHelp(argv[0], "help"); retval = EXIT_SUCCESS; } else { /* Process any remaining command line arguments (not options), and * execute corresponding command */ if (optind >= argc) { ToolsCmd_MissingEntityError(argv[0], SU_(arg.command, "command")); retval = EX_USAGE; } else if ((cmd = ParseCommand(argv, argc)) == NULL) { ToolsCmd_UnknownEntityError(argv[0], SU_(arg.command, "command"), argv[optind]); retval = EX_USAGE; } else if (cmd->requireRoot && !System_IsUserAdmin()) { #if defined(_WIN32) g_printerr(SU_(error.noadmin.win, "%s: Administrator permissions are needed to perform %s operations.\n" "Use an administrator command prompt to complete these tasks.\n"), argv[0], cmd->command); #else g_printerr(SU_(error.noadmin.posix, "%s: You must be root to perform %s operations.\n"), argv[0], cmd->command); #endif retval = EX_NOPERM; } else if (cmd->requireArguments && ++optind >= argc) { ToolsCmd_MissingEntityError(argv[0], SU_(arg.subcommand, "subcommand")); retval = EX_USAGE; } else { retval = cmd->func(argv, argc, gQuiet); } if (retval == EX_USAGE && (cmd == NULL || strcmp(cmd->command, "help"))) { g_printerr(SU_(help.hint, "Try '%s %s%s%s' for more information.\n"), argv[0], "help", cmd ? " " : "", cmd ? cmd->command : ""); } } exit: if (conf != NULL) { g_key_file_free(conf); } return retval; }
static int GetConfEntry(const char *progName, // IN: program name (argv[0]) const char *apm, // IN: apm name ScriptType type) // IN: Script type (default or current) { gchar *entry; GKeyFile *confDict; const char *confName; int len; int ret; confName = GetConfName(apm); if (!confName) { ToolsCmd_UnknownEntityError(progName, SU_(script.operation, "operation"), apm); return EX_USAGE; } confDict = LoadConfFile(); switch (type) { case Current: entry = g_key_file_get_string(confDict, "powerops", confName, NULL); if (entry) { break; } /* Fall through */ default: entry = g_strdup(GuestApp_GetDefaultScript(confName)); break; } len = strlen(entry); if (len > 0) { /* If script path is not absolute, assume the Tools install path. */ if (!g_path_is_absolute(entry)) { char *defaultPath = GuestApp_GetInstallPath(); char *tmp; Bool quoted; ASSERT(defaultPath != NULL); /* Cope with old configs that added quotes around script paths. */ quoted = (entry[0] == '"' && entry[len - 1] == '"'); tmp = g_strdup_printf("%s%c%.*s", defaultPath, DIRSEPC, quoted ? len - 2 : len, quoted ? entry + 1 : entry); vm_free(defaultPath); g_free(entry); entry = tmp; } g_print("%s\n", entry); ret = EXIT_SUCCESS; } else { ToolsCmd_PrintErr(SU_(script.unknownop, "No script for operation %s.\n"), apm); ret = EX_TEMPFAIL; } g_free(entry); g_key_file_free(confDict); return ret; }