static zlog_mode_t get_logger_mode() { zlog_mode_t mode = ZLOG_NONE; zone_dochandle_t handle; struct zone_attrtab attr; if ((handle = zonecfg_init_handle()) == NULL) return (mode); if (zonecfg_get_handle(zone_name, handle) != Z_OK) goto done; if (zonecfg_setattrent(handle) != Z_OK) goto done; while (zonecfg_getattrent(handle, &attr) == Z_OK) { if (strcmp(ZLOG_MODE, attr.zone_attr_name) == 0) { if (strncmp("log", attr.zone_attr_value, 3) == 0) { mode = ZLOG_LOG; } else if (strncmp("int", attr.zone_attr_value, 3) == 0) { mode = ZLOG_INTERACTIVE; } break; } } (void) zonecfg_endattrent(handle); done: zonecfg_fini_handle(handle); return (mode); }
/* * Perform any necessary housekeeping tasks we need to do after we take * a ZFS snapshot of the zone. What this really entails is removing the * sw inventory XML file from the zone. It is still in the snapshot where * we want it, but we don't want it in the source zone itself. */ static int post_snapshot(char *source_zone) { int err; zone_dochandle_t handle; if ((handle = zonecfg_init_handle()) == NULL) { zperror(cmd_to_str(CMD_CLONE), B_TRUE); return (Z_ERR); } if ((err = zonecfg_get_handle(source_zone, handle)) != Z_OK) { errno = err; zperror(cmd_to_str(CMD_CLONE), B_TRUE); zonecfg_fini_handle(handle); return (Z_ERR); } zonecfg_rm_detached(handle, B_FALSE); zonecfg_fini_handle(handle); return (Z_OK); }
/* * Perform any necessary housekeeping tasks we need to do before we take * a ZFS snapshot of the zone. What this really entails is that we are * taking a sw inventory of the source zone, like we do when we detach, * so that there is the XML manifest in the snapshot. We use that to * validate the snapshot if it is the source of a clone at some later time. */ static int pre_snapshot(char *source_zone) { int err; zone_dochandle_t handle; if ((handle = zonecfg_init_handle()) == NULL) { zperror(cmd_to_str(CMD_CLONE), B_TRUE); return (Z_ERR); } if ((err = zonecfg_get_handle(source_zone, handle)) != Z_OK) { errno = err; zperror(cmd_to_str(CMD_CLONE), B_TRUE); zonecfg_fini_handle(handle); return (Z_ERR); } if ((err = zonecfg_get_detach_info(handle, B_TRUE)) != Z_OK) { errno = err; zperror(gettext("getting the software version information " "failed"), B_TRUE); zonecfg_fini_handle(handle); return (Z_ERR); } if ((err = zonecfg_detach_save(handle, 0)) != Z_OK) { errno = err; zperror(gettext("saving the software version manifest failed"), B_TRUE); zonecfg_fini_handle(handle); return (Z_ERR); } zonecfg_fini_handle(handle); return (Z_OK); }