/* * libosinfo: * * Copyright (C) 2009-2012, 2014 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . * * Authors: * Daniel P. Berrange */ #include #include #include G_DEFINE_TYPE(OsinfoInstallConfig, osinfo_install_config, OSINFO_TYPE_ENTITY); #define OSINFO_INSTALL_CONFIG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), OSINFO_TYPE_INSTALL_CONFIG, OsinfoInstallConfigPrivate)) /** * SECTION:osinfo_install_config * @short_description: OS install configuration * @see_also: #OsinfoInstallScript * * #OsinfoInstallConfig is an object for representing OS * install configuration data. It is used to generate an * automated installation script */ struct _OsinfoInstallConfigPrivate { gboolean unused; }; /* Init functions */ static void osinfo_install_config_class_init(OsinfoInstallConfigClass *klass) { g_type_class_add_private(klass, sizeof(OsinfoInstallConfigPrivate)); } static const gchar valid[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'X', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_', '+', '=', '!', '@', '#', '%', '^', '&', ',', '(', ')', '[', '{', '}', '[', ']', ';', ':', '<', '>', ',', '.', '?', '/', '~', }; static void osinfo_install_config_init(OsinfoInstallConfig *config) { gchar pass[9]; gsize i; config->priv = OSINFO_INSTALL_CONFIG_GET_PRIVATE(config); osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_KEYBOARD, "en_US"); osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_TIMEZONE, "America/New_York"); osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_LANGUAGE, "en_US"); for (i = 0; i < sizeof(pass)-1; i++) { gint val = g_random_int_range(0, sizeof(valid)); pass[i] = valid[val]; } pass[sizeof(pass)-1] = '\0'; osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_ADMIN_PASSWORD, pass); } /** * osinfo_install_config_new: * @id: the unique identifier * * Construct a new install configuration with default values for * language, keyboard, timezone and admin password. The default values * are to use an 'en_US' language and keyboard, and an 'America/New_York' * timezone. The admin password is set to a random 8 character password. * * Returns: (transfer full): an install configuration with default * values * */ OsinfoInstallConfig *osinfo_install_config_new(const gchar *id) { return g_object_new(OSINFO_TYPE_INSTALL_CONFIG, "id", id, NULL); } void osinfo_install_config_set_hardware_arch(OsinfoInstallConfig *config, const gchar *arch) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_HARDWARE_ARCH, arch); } const gchar *osinfo_install_config_get_hardware_arch(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_HARDWARE_ARCH); } /** * osinfo_install_config_set_l10n_keyboard: * @config: the install config * @keyboard: the keyboard * * Sets the #OSINFO_INSTALL_CONFIG_PROP_L10N_KEYBOARD parameter. * * The expected format of this string is the same as * #osinfo_install_config_set_l10n_language function's 'language' parameter. */ void osinfo_install_config_set_l10n_keyboard(OsinfoInstallConfig *config, const gchar *keyboard) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_KEYBOARD, keyboard); } const gchar *osinfo_install_config_get_l10n_keyboard(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_KEYBOARD); } /** * osinfo_install_config_set_l10n_language: * @config: the install config * @language: the language * * Sets the #OSINFO_INSTALL_CONFIG_PROP_L10N_LANGUAGE parameter. * * The expected format of this string is the gettext locale names standard: * * https://www.gnu.org/savannah-checkouts/gnu/gettext/manual/html_node/Locale-Names.html * * Encoding and variant are (at least for now) not supported. For example, * 'pt_BR' is accepted is accepted as the language codes for Brazilian Portuguese * but 'pt_BR.utf8' is not. */ void osinfo_install_config_set_l10n_language(OsinfoInstallConfig *config, const gchar *language) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_LANGUAGE, language); } const gchar *osinfo_install_config_get_l10n_language(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_LANGUAGE); } void osinfo_install_config_set_l10n_timezone(OsinfoInstallConfig *config, const gchar *tz) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_TIMEZONE, tz); } const gchar *osinfo_install_config_get_l10n_timezone(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_L10N_TIMEZONE); } void osinfo_install_config_set_admin_password(OsinfoInstallConfig *config, const gchar *password) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_ADMIN_PASSWORD, password); } const gchar *osinfo_install_config_get_admin_password(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_ADMIN_PASSWORD); } void osinfo_install_config_set_user_login(OsinfoInstallConfig *config, const gchar *username) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_LOGIN, username); } const gchar *osinfo_install_config_get_user_login(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_LOGIN); } void osinfo_install_config_set_user_password(OsinfoInstallConfig *config, const gchar *password) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_PASSWORD, password); } const gchar *osinfo_install_config_get_user_password(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_PASSWORD); } void osinfo_install_config_set_user_realname(OsinfoInstallConfig *config, const gchar *name) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_REALNAME, name); } const gchar *osinfo_install_config_get_user_realname(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_REALNAME); } void osinfo_install_config_set_user_autologin(OsinfoInstallConfig *config, gboolean autologin) { osinfo_entity_set_param_boolean(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_AUTOLOGIN, autologin); } gboolean osinfo_install_config_get_user_autologin(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_AUTOLOGIN); } void osinfo_install_config_set_user_administrator(OsinfoInstallConfig *config, gboolean admin) { osinfo_entity_set_param_boolean(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_ADMIN, admin); } gboolean osinfo_install_config_get_user_administrator(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value_boolean(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_USER_ADMIN); } void osinfo_install_config_set_reg_login(OsinfoInstallConfig *config, const gchar *name) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_LOGIN, name); } const gchar *osinfo_install_config_get_reg_login(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_LOGIN); } void osinfo_install_config_set_reg_password(OsinfoInstallConfig *config, const gchar *password) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_PASSWORD, password); } const gchar *osinfo_install_config_get_reg_password(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_PASSWORD); } void osinfo_install_config_set_reg_product_key(OsinfoInstallConfig *config, const gchar *key) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_PRODUCTKEY, key); } const gchar *osinfo_install_config_get_reg_product_key(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_REG_PRODUCTKEY); } /** * osinfo_install_config_set_hostname: * @config: the install config * @hostname: the desired hostname * * Sets the #OSINFO_INSTALL_CONFIG_PROP_HOSTNAME parameter. * * Note that some operating systems have restrictions on maximum number of, and * allowed characters in hostname (or its equivalent) so it is highly * recommended that you keep the actual hostname less than or equal to 15 * characters long and make sure that it does not contain any characters other * than ASCII alphanumeric and '-'. Otherwise unattended installation might * fail. */ void osinfo_install_config_set_hostname(OsinfoInstallConfig *config, const gchar *hostname) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_HOSTNAME, hostname); } const gchar *osinfo_install_config_get_hostname(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_HOSTNAME); } /** * osinfo_install_config_set_target_disk: * @config: the install config * @disk: the target disk * * Sets the #OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK parameter. * * Note that the format of this string is dependent on the installer script * @config is going to be used with. You can use * #osinfo_install_script_get_path_format() to find out which format * does the script expects this string to be in. In case of * #OSINFO_PATH_FORMAT_UNIX unix device node names are expected, e.g "/dev/fd0". * In case of #OSINFO_PATH_FORMAT_DOS drive letters are expected, e.g "A". */ void osinfo_install_config_set_target_disk(OsinfoInstallConfig *config, const gchar *disk) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK, disk); } /** * osinfo_install_config_get_target_disk: * @config: the install config * * Returns: The value of #OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK parameter, * or NULL. */ const gchar *osinfo_install_config_get_target_disk(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK); } /** * osinfo_install_config_set_script_disk: * @config: the install config * @disk: the disk * * Sets the #OSINFO_INSTALL_CONFIG_PROP_SCRIPT_DISK parameter. * * Please read documentation on #osinfo_install_config_set_target_disk() for * explanation on the format of @disk string. */ void osinfo_install_config_set_script_disk(OsinfoInstallConfig *config, const gchar *disk) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_SCRIPT_DISK, disk); } /** * osinfo_install_config_get_script_disk: * @config: the install config * * Returns: The value of #OSINFO_INSTALL_CONFIG_PROP_SCRIPT_DISK parameter, * or NULL. */ const gchar *osinfo_install_config_get_script_disk(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_SCRIPT_DISK); } /** * osinfo_install_config_set_avatar_location: * @config: the install config * @location: new location * * Sets the #OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION parameter. * * Note that the format of this string is dependent on the installer script * @config is going to be used with. You can use * #osinfo_install_script_get_path_format() to find out which format * does the script expects this string to be in. * * Also note that in case of #OSINFO_PATH_FORMAT_DOS, the drive/disk letter * and the leading ':' must not be included in the path. */ void osinfo_install_config_set_avatar_location(OsinfoInstallConfig *config, const gchar *location) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION, location); } /** * osinfo_install_config_get_avatar_location: * @config: the install config * * Returns: The value of #OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION parameter, * or NULL. */ const gchar *osinfo_install_config_get_avatar_location(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION); } /** * osinfo_install_config_set_avatar_disk: * @config: the install config * @disk: the avatar disk * * Sets the #OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK parameter. * * Please read documentation on #osinfo_install_config_set_target_disk() for * explanation on the format of @disk string. */ void osinfo_install_config_set_avatar_disk(OsinfoInstallConfig *config, const gchar *disk) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK, disk); } /** * osinfo_install_config_get_avatar_disk: * @config: the install config * * Returns: The value of #OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK parameter, * or NULL. */ const gchar *osinfo_install_config_get_avatar_disk(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK); } /** * osinfo_install_config_set_pre_install_drivers_disk: * @config: the install config * @disk: the disk * * Specify the disk on which drivers to be installed at the very beginning of * installation, are available. This is usually needed for devices for which the * OS in question does not have out of the box support for and devices are * required/prefered to be available during actual installation. * * Please read documentation on #osinfo_install_config_set_target_disk() for * explanation on the format of @disk string. * * NOTE: Not every install script supports pre-installation of drivers. Use * #osinfo_install_script_get_can_pre_install_drivers() to find out if an * installer script supports it. * * NOTE: Microsoft Windows XP requires pre-installation driver files to be * present in the script disk under the toplevel directory. */ void osinfo_install_config_set_pre_install_drivers_disk(OsinfoInstallConfig *config, const gchar *disk) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_PRE_INSTALL_DRIVERS_DISK, disk); } /** * osinfo_install_config_get_pre_install_drivers_disk: * @config: the install config * * Returns: The disk on which pre-installation drivers are located, or NULL if * its not set using #osinfo_install_config_set_pre_install_drivers_disk(). */ const gchar *osinfo_install_config_get_pre_install_drivers_disk(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value (OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_PRE_INSTALL_DRIVERS_DISK); } /** * osinfo_install_config_set_pre_install_drivers_location: * @config: the install config * @location: the location * * Specify the location on which drivers to be installed at the very beginning of * installation, are available. Please read documentation on * #osinfo_install_config_set_pre_install_drivers_disk() for more information * about pre-installation of drivers. * * Please read documentation on #osinfo_install_config_set_avatar_location() for * explanation on the format of @location string. */ void osinfo_install_config_set_pre_install_drivers_location(OsinfoInstallConfig *config, const gchar *location) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_PRE_INSTALL_DRIVERS_LOCATION, location); } /** * osinfo_install_config_get_pre_install_drivers_location: * @config: the install config * * Returns: The location on which pre-installation drivers are located, or NULL if * its not set using #osinfo_install_config_set_pre_install_drivers_location(). */ const gchar *osinfo_install_config_get_pre_install_drivers_location(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value (OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_PRE_INSTALL_DRIVERS_LOCATION); } /** * osinfo_install_config_set_post_install_drivers_disk: * @config: the install config * @disk: the target disk * * Specify the disk on which drivers to be installed at the end of installation, * are available. * * Please read documentation on #osinfo_install_config_set_target_disk() for * explanation on the format of @disk string. * * NOTE: Not every install script supports post-installation of drivers. Use * #osinfo_install_script_get_can_post_install_drivers() to find out if an * install script supports it. */ void osinfo_install_config_set_post_install_drivers_disk(OsinfoInstallConfig *config, const gchar *disk) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_POST_INSTALL_DRIVERS_DISK, disk); } /** * osinfo_install_config_get_post_install_drivers_disk: * @config: the install config * * Returns: The disk on which post-installation drivers are located, or NULL if * its not set using #osinfo_install_config_set_post_install_drivers_disk(). */ const gchar *osinfo_install_config_get_post_install_drivers_disk(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value (OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_POST_INSTALL_DRIVERS_DISK); } /** * osinfo_install_config_set_post_install_drivers_location: * @config: the install config * @location: the location of avatar * * Specify the disk on which drivers to be installed at the end of installation, * are available. * * Please read documentation on #osinfo_install_config_set_avatar_location() for * explanation on the format of @location string. * * NOTE: Not every install script supports post-installation of drivers. Use * #osinfo_install_script_get_can_post_install_drivers() to find out if an * install script supports it. */ void osinfo_install_config_set_post_install_drivers_location(OsinfoInstallConfig *config, const gchar *location) { osinfo_entity_set_param(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_POST_INSTALL_DRIVERS_LOCATION, location); } /** * osinfo_install_config_get_post_install_drivers_location: * @config: the install config * * Returns: The disk on which post-installation drivers are located, or NULL if * its not set using #osinfo_install_config_set_post_install_drivers_location(). */ const gchar *osinfo_install_config_get_post_install_drivers_location(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value (OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_POST_INSTALL_DRIVERS_LOCATION); } /** * osinfo_install_config_set_driver_signing: * @config: the install config * @signing: boolean value * * If a script requires drivers to be signed, this function can be used to * disable that security feature. WARNING: Disabling driver signing may very * well mean disabling it permanently. */ void osinfo_install_config_set_driver_signing(OsinfoInstallConfig *config, gboolean signing) { osinfo_entity_set_param_boolean(OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_DRIVER_SIGNING, signing); } /** * osinfo_install_config_get_driver_signing: * @config: the install config * * Returns: %TRUE if driver signing is currently enabled, %FALSE otherwise, see * #osinfo_install_config_set_driver_signing() for more details about driver * signing. */ gboolean osinfo_install_config_get_driver_signing(OsinfoInstallConfig *config) { return osinfo_entity_get_param_value_boolean_with_default (OSINFO_ENTITY(config), OSINFO_INSTALL_CONFIG_PROP_DRIVER_SIGNING, TRUE); } /* * Local variables: * indent-tabs-mode: nil * c-indent-level: 4 * c-basic-offset: 4 * End: */