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

Reply via email to