/* * 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); }
apr_status_t lfd_cmdio_write(struct lfd_sess * sess, int cmd, const char *msg, ...) { va_list ap; char * buff = NULL; apr_size_t len; apr_status_t rc = APR_SUCCESS; buff = apr_pstrcat(sess->loop_pool, "AAAA", msg, "\r\n", NULL); cmd_to_str(cmd, buff); va_start(ap, msg); buff = apr_pvsprintf(sess->loop_pool, buff, ap); len = strlen(buff); rc = apr_socket_send(sess->comm_sock, buff, &len); va_end(ap); if (lfd_config_debug) fprintf(stderr, "-> %s", buff); return rc; }