Your code changes for both zoneadm and zonecfg would preserve the current zonexxx -z zonename for backwards compatibility purposes, is that correct?
Thank you, On Mon, Jun 9, 2008 at 11:51 AM, Darren Reed <[EMAIL PROTECTED]> wrote: > Someone mentioned zonecfg was the cause of some similar awkwardness... > > So here's a patch attached for that. > > Darren > > > > ------- usr/src/cmd/zonecfg/zonecfg.c ------- > > Index: usr/src/cmd/zonecfg/zonecfg.c > *** /biscuit/onnv/usr/src/cmd/zonecfg/zonecfg.c Mon Mar 24 17:30:38 2008 > --- /biscuit/onnv_20080608/usr/src/cmd/zonecfg/zonecfg.c Mon Jun 9 > 11:47:41 2008 > *************** > *** 1071,1076 **** > --- 1071,1077 ---- > execname, cmd_to_str(CMD_HELP)); > (void) fprintf(fp, "\t%s -z <zone>\t\t\t(%s)\n", > execname, gettext("interactive")); > + (void) fprintf(fp, "\t%s <command> <zone>\n", execname); > (void) fprintf(fp, "\t%s -z <zone> <command>\n", execname); > (void) fprintf(fp, "\t%s -z <zone> -f <command-file>\n", > execname); > *************** > *** 6653,6689 **** > return (execbasename); > } > > ! int > ! main(int argc, char *argv[]) > { > ! int err, arg; > ! struct stat st; > ! > ! /* This must be before anything goes to stdout. */ > ! setbuf(stdout, NULL); > ! > ! saw_error = B_FALSE; > ! cmd_file_mode = B_FALSE; > ! execname = get_execbasename(argv[0]); > ! > ! (void) setlocale(LC_ALL, ""); > ! (void) textdomain(TEXT_DOMAIN); > ! > ! if (getzoneid() != GLOBAL_ZONEID) { > ! zerr(gettext("%s can only be run from the global zone."), > ! execname); > ! exit(Z_ERR); > ! } > ! > ! if (argc < 2) { > ! usage(B_FALSE, HELP_USAGE | HELP_SUBCMDS); > exit(Z_USAGE); > } > ! if (strcmp(argv[1], cmd_to_str(CMD_HELP)) == 0) { > ! (void) one_command_at_a_time(argc - 1, &(argv[1])); > ! exit(Z_OK); > ! } > > while ((arg = getopt(argc, argv, "?f:R:z:")) != EOF) { > switch (arg) { > case '?': > --- 6654,6679 ---- > return (execbasename); > } > > ! static void > ! set_zonename(char *zonename) > { > ! if (strcmp(zonename, GLOBAL_ZONENAME) == 0) { > ! global_zone = B_TRUE; > ! } else if (zonecfg_validate_zonename(zonename) != Z_OK) { > ! zone_perror(zonename, Z_BOGUS_ZONE_NAME, B_TRUE); > ! usage(B_FALSE, HELP_SYNTAX); > exit(Z_USAGE); > } > ! (void) strlcpy(zone, zonename, sizeof (zone)); > ! (void) strlcpy(revert_zone, zonename, sizeof (zone)); > ! } > > + static void > + get_clioptions(int argc, char *argv[]) > + { > + struct stat st; > + int arg; > + > while ((arg = getopt(argc, argv, "?f:R:z:")) != EOF) { > switch (arg) { > case '?': > *************** > *** 6712,6726 **** > zonecfg_set_root(optarg); > break; > case 'z': > ! if (strcmp(optarg, GLOBAL_ZONENAME) == 0) { > ! global_zone = B_TRUE; > ! } else if (zonecfg_validate_zonename(optarg) != > Z_OK) { > ! zone_perror(optarg, Z_BOGUS_ZONE_NAME, > B_TRUE); > ! usage(B_FALSE, HELP_SYNTAX); > ! exit(Z_USAGE); > ! } > ! (void) strlcpy(zone, optarg, sizeof (zone)); > ! (void) strlcpy(revert_zone, optarg, sizeof (zone)); > break; > default: > usage(B_FALSE, HELP_USAGE); > --- 6702,6708 ---- > zonecfg_set_root(optarg); > break; > case 'z': > ! set_zonename(optarg); > break; > default: > usage(B_FALSE, HELP_USAGE); > *************** > *** 6727,6733 **** > --- 6709,6761 ---- > exit(Z_USAGE); > } > } > + } > > + int > + main(int argc, char *argv[]) > + { > + int err; > + > + /* This must be before anything goes to stdout. */ > + setbuf(stdout, NULL); > + > + saw_error = B_FALSE; > + cmd_file_mode = B_FALSE; > + execname = get_execbasename(argv[0]); > + > + (void) setlocale(LC_ALL, ""); > + (void) textdomain(TEXT_DOMAIN); > + > + if (getzoneid() != GLOBAL_ZONEID) { > + zerr(gettext("%s can only be run from the global zone."), > + execname); > + exit(Z_ERR); > + } > + > + if (argc < 2) { > + usage(B_FALSE, HELP_USAGE | HELP_SUBCMDS); > + exit(Z_USAGE); > + } > + if (strcmp(argv[1], cmd_to_str(CMD_HELP)) == 0) { > + (void) one_command_at_a_time(argc - 1, &(argv[1])); > + exit(Z_OK); > + } > + > + if (argc >= 3 && *argv[1] != '-' && *argv[2] != '-') { > + /* > + * We're assuming that the command line has been written > + * as "zonecfg subcmd zonename" but the parser for the CLI > + * assumes "zonecfg -z zone subcmd". If we move the > + * subcommand and adjust optind, we can fake having parsed > + * the "-z zonename"... > + */ > + set_zonename(argv[2]); > + argv[2] = argv[1]; > + optind++; > + } else { > + get_clioptions(argc, argv); > + } > + > if (optind > argc || strcmp(zone, "") == 0) { > usage(B_FALSE, HELP_USAGE); > exit(Z_USAGE); > > _______________________________________________ > zones-discuss mailing list > zones-discuss@opensolaris.org >
_______________________________________________ zones-discuss mailing list zones-discuss@opensolaris.org