Print this page

        

*** 20,31 **** */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2014 Nexenta Systems, Inc. All rights reserved. - * Copyright 2015, Joyent Inc. All rights reserved. * Copyright (c) 2015 by Delphix. All rights reserved. */ /* * zoneadm is a command interpreter for zone administration. It is all in * C (i.e., no lex/yacc), and all the argument passing is argc/argv based. --- 20,31 ---- */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2014 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2015 by Delphix. All rights reserved. + * Copyright 2015, Joyent Inc. All rights reserved. */ /* * zoneadm is a command interpreter for zone administration. It is all in * C (i.e., no lex/yacc), and all the argument passing is argc/argv based.
*** 105,114 **** --- 105,117 ---- zoneid_t zdid; } zone_entry_t; #define CLUSTER_BRAND_NAME "cluster" + static zone_entry_t *zents; + static size_t nzents; + #define LOOPBACK_IF "lo0" #define SOCKET_AF(af) (((af) == AF_UNSPEC) ? AF_INET : (af)) struct net_if { char *name;
*** 403,412 **** --- 406,428 ---- (void) vfprintf(stderr, fmt, alist); (void) fprintf(stderr, "\n"); va_end(alist); } + static void * + safe_calloc(size_t nelem, size_t elsize) + { + void *r = calloc(nelem, elsize); + + if (r == NULL) { + zerror(gettext("failed to allocate %lu bytes: %s"), + (ulong_t)nelem * elsize, strerror(errno)); + exit(Z_ERR); + } + return (r); + } + static void zone_print(zone_entry_t *zent, boolean_t verbose, boolean_t parsable) { static boolean_t firsttime = B_TRUE; char *ip_type_str;
*** 474,486 **** (void) strlcpy(zent->zname, zone_name, sizeof (zent->zname)); (void) strlcpy(zent->zroot, "???", sizeof (zent->zroot)); (void) strlcpy(zent->zbrand, "???", sizeof (zent->zbrand)); zent->zstate_str = "???"; - if (strcmp(zone_name, GLOBAL_ZONENAME) == 0) - zid = zent->zdid = GLOBAL_ZONEID; - zent->zid = zid; if (zonecfg_get_uuid(zone_name, uuid) == Z_OK && !uuid_is_null(uuid)) uuid_unparse(uuid, zent->zuuid); --- 490,499 ----
*** 521,532 **** return (Z_ERR); } zent->zstate_str = zone_state_str(zent->zstate_num); /* ! * A zone's brand might only be available in the .xml file describing ! * it, which is only visible to the global zone. This causes * zone_get_brand() to fail when called from within a non-global * zone. Fortunately we only do this on labeled systems, where we * know all zones are native. */ if (getzoneid() != GLOBAL_ZONEID) { --- 534,545 ---- return (Z_ERR); } zent->zstate_str = zone_state_str(zent->zstate_num); /* ! * A zone's brand is only available in the .xml file describing it, ! * which is only visible to the global zone. This causes * zone_get_brand() to fail when called from within a non-global * zone. Fortunately we only do this on labeled systems, where we * know all zones are native. */ if (getzoneid() != GLOBAL_ZONEID) {
*** 592,658 **** zonecfg_fini_handle(handle); return (Z_OK); } static int ! zone_print_list(zone_state_t min_state, boolean_t verbose, boolean_t parsable) { ! zone_entry_t zent; ! FILE *cookie; ! struct zoneent *ze; ! /* ! * Get the full list of zones from the configuration. ! */ ! cookie = setzoneent(); ! while ((ze = getzoneent_private(cookie)) != NULL) { ! char *name = ze->zone_name; ! zoneid_t zid; ! zid = getzoneidbyname(name); ! if (ze->zone_brand[0] == '\0') { ! /* old, incomplete index entry */ ! if (lookup_zone_info(name, zid, &zent) != Z_OK) { ! free(ze); ! continue; } ! } else { ! /* new, full index entry */ ! (void) strlcpy(zent.zname, name, sizeof (zent.zname)); ! (void) strlcpy(zent.zroot, ze->zone_path, ! sizeof (zent.zroot)); ! uuid_unparse(ze->zone_uuid, zent.zuuid); ! (void) strlcpy(zent.zbrand, ze->zone_brand, ! sizeof (zent.zbrand)); ! zent.ziptype = ze->zone_iptype; ! zent.zdid = ze->zone_did; ! zent.zid = zid; ! if (zid != -1) { ! int err; ! err = zone_get_state(name, ! (zone_state_t *)&ze->zone_state); ! if (err != Z_OK) { ! errno = err; ! zperror2(name, gettext("could not get " ! "state")); ! free(ze); continue; } } ! ! zent.zstate_num = ze->zone_state; ! zent.zstate_str = zone_state_str(zent.zstate_num); } if (zent.zstate_num >= min_state) zone_print(&zent, verbose, parsable); - - free(ze); } endzoneent(cookie); return (Z_OK); } --- 605,773 ---- zonecfg_fini_handle(handle); return (Z_OK); } + /* + * fetch_zents() calls zone_list(2) to find out how many zones are running + * (which is stored in the global nzents), then calls zone_list(2) again + * to fetch the list of running zones (stored in the global zents). This + * function may be called multiple times, so if zents is already set, we + * return immediately to save work. + * + * Note that the data about running zones can change while this function + * is running, so its possible that the list of zones will have empty slots + * at the end. + */ + static int ! fetch_zents(void) { ! zoneid_t *zids = NULL; ! uint_t nzents_saved; ! int i, retv; ! FILE *fp; ! boolean_t inaltroot; ! zone_entry_t *zentp; ! const char *altroot; ! if (nzents > 0) ! return (Z_OK); ! if (zone_list(NULL, &nzents) != 0) { ! zperror(gettext("failed to get zoneid list"), B_FALSE); ! return (Z_ERR); ! } ! again: ! if (nzents == 0) ! return (Z_OK); ! ! zids = safe_calloc(nzents, sizeof (zoneid_t)); ! nzents_saved = nzents; ! ! if (zone_list(zids, &nzents) != 0) { ! zperror(gettext("failed to get zone list"), B_FALSE); ! free(zids); ! return (Z_ERR); } ! if (nzents != nzents_saved) { ! /* list changed, try again */ ! free(zids); ! goto again; ! } ! zents = safe_calloc(nzents, sizeof (zone_entry_t)); ! inaltroot = zonecfg_in_alt_root(); ! if (inaltroot) { ! fp = zonecfg_open_scratch("", B_FALSE); ! altroot = zonecfg_get_root(); ! } else { ! fp = NULL; ! } ! zentp = zents; ! retv = Z_OK; ! for (i = 0; i < nzents; i++) { ! char name[ZONENAME_MAX]; ! char altname[ZONENAME_MAX]; ! char rev_altroot[MAXPATHLEN]; ! ! if (getzonenamebyid(zids[i], name, sizeof (name)) < 0) { ! /* ! * There is a race condition where the zone may have ! * shutdown since we retrieved the number of running ! * zones above. This is not an error, there will be ! * an empty slot at the end of the list. ! */ continue; } + if (zonecfg_is_scratch(name)) { + /* Ignore scratch zones by default */ + if (!inaltroot) + continue; + if (fp == NULL || + zonecfg_reverse_scratch(fp, name, altname, + sizeof (altname), rev_altroot, + sizeof (rev_altroot)) == -1) { + zerror(gettext("could not resolve scratch " + "zone %s"), name); + retv = Z_ERR; + continue; } ! /* Ignore zones in other alternate roots */ ! if (strcmp(rev_altroot, altroot) != 0) ! continue; ! (void) strcpy(name, altname); ! } else { ! /* Ignore non-scratch when in an alternate root */ ! if (inaltroot && strcmp(name, GLOBAL_ZONENAME) != 0) ! continue; } + if (lookup_zone_info(name, zids[i], zentp) != Z_OK) { + /* + * There is a race condition where the zone may have + * shutdown since we retrieved the number of running + * zones above. This is not an error, there will be + * an empty slot at the end of the list. + */ + continue; + } + zentp++; + } + nzents = zentp - zents; + if (fp != NULL) + zonecfg_close_scratch(fp); + free(zids); + return (retv); + } + + static int + zone_print_list(zone_state_t min_state, boolean_t verbose, boolean_t parsable) + { + int i; + zone_entry_t zent; + FILE *cookie; + char *name; + + /* + * First get the list of running zones from the kernel and print them. + * If that is all we need, then return. + */ + if ((i = fetch_zents()) != Z_OK) { + /* + * No need for error messages; fetch_zents() has already taken + * care of this. + */ + return (i); + } + for (i = 0; i < nzents; i++) + zone_print(&zents[i], verbose, parsable); + if (min_state >= ZONE_STATE_RUNNING) + return (Z_OK); + /* + * Next, get the full list of zones from the configuration, skipping + * any we have already printed. + */ + cookie = setzoneent(); + while ((name = getzoneent(cookie)) != NULL) { + for (i = 0; i < nzents; i++) { + if (strcmp(zents[i].zname, name) == 0) + break; + } + if (i < nzents) { + free(name); + continue; + } + if (lookup_zone_info(name, ZONE_ID_UNDEFINED, &zent) != Z_OK) { + free(name); + continue; + } + free(name); if (zent.zstate_num >= min_state) zone_print(&zent, verbose, parsable); } endzoneent(cookie); return (Z_OK); }
*** 909,924 **** } if (strcmp(stbuf.st_fstype, MNTTYPE_TMPFS) == 0) { (void) printf(gettext("WARNING: %s is on a temporary " "file system.\n"), rpath); } - if (cmd_num != CMD_BOOT && cmd_num != CMD_REBOOT && - cmd_num != CMD_READY) { - /* we checked when we installed, no need to check each boot */ if (crosscheck_zonepaths(rpath) != Z_OK) return (Z_ERR); - } /* * Try to collect and report as many minor errors as possible * before returning, so the user can learn everything that needs * to be fixed up front. */ --- 1024,1035 ----
*** 1101,1127 **** static int ready_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; - boolean_t debug = B_FALSE; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot ready zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?X")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_READY, CMD_READY); return (optopt == '?' ? Z_OK : Z_USAGE); - case 'X': - debug = B_TRUE; - break; default: sub_usage(SHELP_READY, CMD_READY); return (Z_USAGE); } } --- 1212,1234 ---- static int ready_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot ready zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_READY, CMD_READY); return (optopt == '?' ? Z_OK : Z_USAGE); default: sub_usage(SHELP_READY, CMD_READY); return (Z_USAGE); } }
*** 1134,1144 **** return (Z_ERR); if (verify_details(CMD_READY, argv) != Z_OK) return (Z_ERR); zarg.cmd = Z_READY; - zarg.debug = debug; if (zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) != 0) { zerror(gettext("call to %s failed"), "zoneadmd"); return (Z_ERR); } return (Z_OK); --- 1241,1250 ----
*** 1147,1157 **** static int boot_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; boolean_t force = B_FALSE; - boolean_t debug = B_FALSE; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot boot zone in alternate root")); return (Z_ERR); --- 1253,1262 ----
*** 1174,1184 **** * is: * * zoneadm -z myzone boot -- -s -v -m verbose. */ optind = 0; ! while ((arg = getopt(argc, argv, "?fsX")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_BOOT, CMD_BOOT); return (optopt == '?' ? Z_OK : Z_USAGE); case 's': --- 1279,1289 ---- * is: * * zoneadm -z myzone boot -- -s -v -m verbose. */ optind = 0; ! while ((arg = getopt(argc, argv, "?fs")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_BOOT, CMD_BOOT); return (optopt == '?' ? Z_OK : Z_USAGE); case 's':
*** 1186,1198 **** sizeof (zarg.bootbuf)); break; case 'f': force = B_TRUE; break; - case 'X': - debug = B_TRUE; - break; default: sub_usage(SHELP_BOOT, CMD_BOOT); return (Z_USAGE); } } --- 1291,1300 ----
*** 1214,1224 **** != Z_OK) return (Z_ERR); if (verify_details(CMD_BOOT, argv) != Z_OK) return (Z_ERR); zarg.cmd = force ? Z_FORCEBOOT : Z_BOOT; - zarg.debug = debug; if (zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) != 0) { zerror(gettext("call to %s failed"), "zoneadmd"); return (Z_ERR); } --- 1316,1325 ----
*** 1524,1537 **** * zone, the name service knows about it. * 4b. For some operations which expect a zone not to be running, that it is * not already running (or ready). */ static int ! sanity_check(char *zone, int cmd_num, boolean_t need_running, boolean_t unsafe_when_running, boolean_t force) { ! boolean_t is_running = B_FALSE; priv_set_t *privset; zone_state_t state, min_state; char kernzone[ZONENAME_MAX]; FILE *fp; --- 1625,1638 ---- * zone, the name service knows about it. * 4b. For some operations which expect a zone not to be running, that it is * not already running (or ready). */ static int ! sanity_check(char *zone, int cmd_num, boolean_t running, boolean_t unsafe_when_running, boolean_t force) { ! zone_entry_t *zent; priv_set_t *privset; zone_state_t state, min_state; char kernzone[ZONENAME_MAX]; FILE *fp;
*** 1598,1655 **** "with SUNW."), cmd_to_str(cmd_num)); return (Z_ERR); } if (!zonecfg_in_alt_root()) { ! /* Avoid the xml read overhead of lookup_running_zone */ ! if (getzoneidbyname(zone) != -1) ! is_running = B_TRUE; ! ! } else if ((fp = zonecfg_open_scratch("", B_FALSE)) != NULL) { ! if (zonecfg_find_scratch(fp, zone, zonecfg_get_root(), kernzone, ! sizeof (kernzone)) == 0 && getzoneidbyname(kernzone) != -1) ! is_running = B_TRUE; ! zonecfg_close_scratch(fp); } /* * Look up from the kernel for 'running' zones. */ ! if (need_running && !force) { ! if (!is_running) { zerror(gettext("not running")); return (Z_ERR); } } else { int err; ! err = zone_get_state(zone, &state); ! ! if (unsafe_when_running && is_running) { /* check whether the zone is ready or running */ ! char *zstate_str; ! ! if (err != Z_OK) { errno = err; ! zperror2(zone, gettext("could not get state")); /* can't tell, so hedge */ ! zstate_str = "ready/running"; } else { ! zstate_str = zone_state_str(state); } zerror(gettext("%s operation is invalid for %s zones."), ! cmd_to_str(cmd_num), zstate_str); return (Z_ERR); } ! ! if (err != Z_OK) { errno = err; zperror2(zone, gettext("could not get state")); return (Z_ERR); } - switch (cmd_num) { case CMD_UNINSTALL: if (state == ZONE_STATE_CONFIGURED) { zerror(gettext("is already in state '%s'."), zone_state_str(ZONE_STATE_CONFIGURED)); --- 1699,1753 ---- "with SUNW."), cmd_to_str(cmd_num)); return (Z_ERR); } if (!zonecfg_in_alt_root()) { ! zent = lookup_running_zone(zone); ! } else if ((fp = zonecfg_open_scratch("", B_FALSE)) == NULL) { ! zent = NULL; ! } else { ! if (zonecfg_find_scratch(fp, zone, zonecfg_get_root(), ! kernzone, sizeof (kernzone)) == 0) ! zent = lookup_running_zone(kernzone); ! else ! zent = NULL; zonecfg_close_scratch(fp); } /* * Look up from the kernel for 'running' zones. */ ! if (running && !force) { ! if (zent == NULL) { zerror(gettext("not running")); return (Z_ERR); } } else { int err; ! if (unsafe_when_running && zent != NULL) { /* check whether the zone is ready or running */ ! if ((err = zone_get_state(zent->zname, ! &zent->zstate_num)) != Z_OK) { errno = err; ! zperror2(zent->zname, ! gettext("could not get state")); /* can't tell, so hedge */ ! zent->zstate_str = "ready/running"; } else { ! zent->zstate_str = ! zone_state_str(zent->zstate_num); } zerror(gettext("%s operation is invalid for %s zones."), ! cmd_to_str(cmd_num), zent->zstate_str); return (Z_ERR); } ! if ((err = zone_get_state(zone, &state)) != Z_OK) { errno = err; zperror2(zone, gettext("could not get state")); return (Z_ERR); } switch (cmd_num) { case CMD_UNINSTALL: if (state == ZONE_STATE_CONFIGURED) { zerror(gettext("is already in state '%s'."), zone_state_str(ZONE_STATE_CONFIGURED));
*** 1733,1759 **** static int halt_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; - boolean_t debug = B_FALSE; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot halt zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?X")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_HALT, CMD_HALT); return (optopt == '?' ? Z_OK : Z_USAGE); - case 'X': - debug = B_TRUE; - break; default: sub_usage(SHELP_HALT, CMD_HALT); return (Z_USAGE); } } --- 1831,1853 ---- static int halt_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot halt zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_HALT, CMD_HALT); return (optopt == '?' ? Z_OK : Z_USAGE); default: sub_usage(SHELP_HALT, CMD_HALT); return (Z_USAGE); } }
*** 1775,1785 **** */ if (invoke_brand_handler(CMD_HALT, argv) != Z_OK) return (Z_ERR); zarg.cmd = Z_HALT; - zarg.debug = debug; return ((zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) == 0) ? Z_OK : Z_ERR); } static int --- 1869,1878 ----
*** 1853,1879 **** static int reboot_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; - boolean_t debug = B_FALSE; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot reboot zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?X")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_REBOOT, CMD_REBOOT); return (optopt == '?' ? Z_OK : Z_USAGE); - case 'X': - debug = B_TRUE; - break; default: sub_usage(SHELP_REBOOT, CMD_REBOOT); return (Z_USAGE); } } --- 1946,1968 ---- static int reboot_func(int argc, char *argv[]) { zone_cmd_arg_t zarg; int arg; if (zonecfg_in_alt_root()) { zerror(gettext("cannot reboot zone in alternate root")); return (Z_ERR); } optind = 0; ! if ((arg = getopt(argc, argv, "?")) != EOF) { switch (arg) { case '?': sub_usage(SHELP_REBOOT, CMD_REBOOT); return (optopt == '?' ? Z_OK : Z_USAGE); default: sub_usage(SHELP_REBOOT, CMD_REBOOT); return (Z_USAGE); } }
*** 1904,1914 **** return (Z_ERR); if (verify_details(CMD_REBOOT, argv) != Z_OK) return (Z_ERR); zarg.cmd = Z_REBOOT; - zarg.debug = debug; return ((zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) == 0) ? Z_OK : Z_ERR); } static int --- 1993,2002 ----
*** 2132,2145 **** return (Z_OK); if (strcmp(fstab->zone_fs_type, MNTTYPE_ZFS) == 0) return (verify_fs_zfs(fstab)); - if (strcmp(fstab->zone_fs_type, MNTTYPE_HYPRLOFS) == 0 && - strcmp(fstab->zone_fs_special, "swap") == 0) - return (Z_OK); - if (stat64(fstab->zone_fs_special, &st) != 0) { (void) fprintf(stderr, gettext("could not verify fs " "%s: could not access %s: %s\n"), fstab->zone_fs_dir, fstab->zone_fs_special, strerror(errno)); return (Z_ERR); --- 2220,2229 ----
*** 2539,2548 **** --- 2623,2633 ---- boolean_t in_alt_root; zone_iptype_t iptype; dladm_handle_t dh; dladm_status_t status; datalink_id_t linkid; + char errmsg[DLADM_STRSIZE]; in_alt_root = zonecfg_in_alt_root(); if (in_alt_root) goto no_net;
*** 2621,2630 **** --- 2706,2720 ---- nwiftab.zone_nwif_physical, &linkid, NULL, NULL, NULL); dladm_close(dh); } if (status != DLADM_STATUS_OK) { + (void) fprintf(stderr, + gettext("WARNING: skipping network " + "interface '%s': %s\n"), + nwiftab.zone_nwif_physical, + dladm_status2str(status, errmsg)); break; } dl_owner_zid = ALL_ZONES; if (zone_check_datalink(&dl_owner_zid, linkid) != 0) break;
*** 2718,2729 **** */ static boolean_t verify_fix_did(zone_dochandle_t handle) { zoneid_t mydid; ! struct zoneent *ze; FILE *cookie; boolean_t fix = B_FALSE; mydid = zonecfg_get_did(handle); if (mydid == -1) { zonecfg_set_did(handle); --- 2808,2820 ---- */ static boolean_t verify_fix_did(zone_dochandle_t handle) { zoneid_t mydid; ! zone_entry_t zent; FILE *cookie; + char *name; boolean_t fix = B_FALSE; mydid = zonecfg_get_did(handle); if (mydid == -1) { zonecfg_set_did(handle);
*** 2730,2767 **** return (B_TRUE); } /* Get the full list of zones from the configuration. */ cookie = setzoneent(); ! while ((ze = getzoneent_private(cookie)) != NULL) { ! char *name; ! zoneid_t did; ! ! name = ze->zone_name; ! if (strcmp(name, GLOBAL_ZONENAME) == 0 || ! strcmp(name, target_zone) == 0) { ! free(ze); ! continue; } ! if (ze->zone_brand[0] == '\0') { ! /* old, incomplete index entry */ ! zone_entry_t zent; ! ! if (lookup_zone_info(name, ZONE_ID_UNDEFINED, ! &zent) != Z_OK) { ! free(ze); continue; } - did = zent.zdid; - } else { - /* new, full index entry */ - did = ze->zone_did; - } - free(ze); ! if (did == mydid) { fix = B_TRUE; break; } } endzoneent(cookie); --- 2821,2844 ---- return (B_TRUE); } /* Get the full list of zones from the configuration. */ cookie = setzoneent(); ! while ((name = getzoneent(cookie)) != NULL) { ! if (strcmp(target_zone, name) == 0) { ! free(name); ! break; /* Once we find our entry, stop. */ } ! if (strcmp(name, "global") == 0 || ! lookup_zone_info(name, ZONE_ID_UNDEFINED, &zent) != Z_OK) { ! free(name); continue; } ! free(name); ! if (zent.zdid == mydid) { fix = B_TRUE; break; } } endzoneent(cookie);
*** 2928,2938 **** char zonepath[MAXPATHLEN]; brand_handle_t bh = NULL; int status; boolean_t do_postinstall = B_FALSE; boolean_t brand_help = B_FALSE; - boolean_t do_dataset = B_TRUE; char opts[128]; if (target_zone == NULL) { sub_usage(SHELP_INSTALL, CMD_INSTALL); return (Z_USAGE); --- 3005,3014 ----
*** 3004,3019 **** sub_usage(SHELP_INSTALL, CMD_INSTALL); brand_help = B_TRUE; } /* Ignore unknown options - may be brand specific. */ break; - case 'x': - if (strcmp(optarg, "nodataset") == 0) { - do_dataset = B_FALSE; - continue; /* internal arg, don't pass thru */ - } - break; default: /* Ignore unknown options - may be brand specific. */ break; } --- 3080,3089 ----
*** 3062,3072 **** errno = err; zperror2(target_zone, gettext("could not set state")); goto done; } - if (do_dataset) create_zfs_zonepath(zonepath); } status = do_subproc(cmdbuf); if ((subproc_err = --- 3132,3141 ----
*** 5027,5037 **** * well it will then shut itself down. */ if (zonecfg_ping_zoneadmd(target_zone) == Z_OK) { zone_cmd_arg_t zarg; zarg.cmd = Z_NOTE_UNINSTALLING; - zarg.debug = B_FALSE; /* we don't care too much if this fails, just plow on */ (void) zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE); } --- 5096,5105 ----
*** 5143,5153 **** return (Z_ERR); if (verify_details(CMD_MOUNT, argv) != Z_OK) return (Z_ERR); zarg.cmd = force ? Z_FORCEMOUNT : Z_MOUNT; - zarg.debug = B_FALSE; zarg.bootbuf[0] = '\0'; if (zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) != 0) { zerror(gettext("call to %s failed"), "zoneadmd"); return (Z_ERR); } --- 5211,5220 ----
*** 5165,5175 **** if (sanity_check(target_zone, CMD_UNMOUNT, B_FALSE, B_FALSE, B_FALSE) != Z_OK) return (Z_ERR); zarg.cmd = Z_UNMOUNT; - zarg.debug = B_FALSE; if (zonecfg_call_zoneadmd(target_zone, &zarg, locale, B_TRUE) != 0) { zerror(gettext("call to %s failed"), "zoneadmd"); return (Z_ERR); } return (Z_OK); --- 5232,5241 ----