static ipmi_config_err_t k_g_checkout (ipmi_config_state_data_t *state_data, const char *section_name, struct ipmi_config_keyvalue *kv) { uint8_t k_g[IPMI_MAX_K_G_LENGTH]; char k_g_str[IPMI_MAX_K_G_LENGTH*2+3]; ipmi_config_err_t ret; assert (state_data); assert (section_name); assert (kv); memset (k_g, 0, IPMI_MAX_K_G_LENGTH); if ((ret = _get_key (state_data, section_name, IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_G, k_g, IPMI_MAX_K_G_LENGTH)) != IPMI_CONFIG_ERR_SUCCESS) return (ret); /* a printable k_g key can have two representations, so compare the * binary keys and return what the user passed in if they are the * same. */ if (state_data->prog_data->args->action == IPMI_CONFIG_ACTION_DIFF) { uint8_t kv_k_g[IPMI_MAX_K_G_LENGTH+1]; memset (kv_k_g, '\0', IPMI_MAX_K_G_LENGTH); if (parse_kg (kv_k_g, IPMI_MAX_K_G_LENGTH + 1, kv->value_input) < 0) return (IPMI_CONFIG_ERR_FATAL_ERROR); if (!memcmp (kv_k_g, k_g, IPMI_MAX_K_G_LENGTH)) { if (ipmi_config_section_update_keyvalue_output (state_data, kv, kv->value_input) < 0) return (IPMI_CONFIG_ERR_FATAL_ERROR); return (IPMI_CONFIG_ERR_SUCCESS); } /* else, fall through and return the default checked out value */ } memset (k_g_str, '\0', IPMI_MAX_K_G_LENGTH*2+3); if (!format_kg (k_g_str, IPMI_MAX_K_G_LENGTH*2+3, k_g)) return (IPMI_CONFIG_ERR_FATAL_ERROR); if (ipmi_config_section_update_keyvalue_output (state_data, kv, k_g_str) < 0) return (IPMI_CONFIG_ERR_FATAL_ERROR); return (IPMI_CONFIG_ERR_SUCCESS); }
static config_err_t k_g_checkout (const char *section_name, struct config_keyvalue *kv, void *arg) { bmc_config_state_data_t *state_data = (bmc_config_state_data_t *)arg; uint8_t k_g[IPMI_MAX_K_G_LENGTH]; char k_g_str[IPMI_MAX_K_G_LENGTH*2+3]; config_err_t ret; memset (k_g, 0, IPMI_MAX_K_G_LENGTH); if ((ret = _get_key (state_data, IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_G, k_g, IPMI_MAX_K_G_LENGTH)) != CONFIG_ERR_SUCCESS) return ret; /* a printable k_g key can have two representations, so compare the * binary keys and return what the user passed in if they are the * same. */ if (state_data->prog_data->args->config_args.action == CONFIG_ACTION_DIFF) { uint8_t kv_k_g[IPMI_MAX_K_G_LENGTH+1]; memset (kv_k_g, '\0', IPMI_MAX_K_G_LENGTH); if (parse_kg(kv_k_g, IPMI_MAX_K_G_LENGTH + 1, kv->value_input) < 0) return CONFIG_ERR_FATAL_ERROR; if (!memcmp (kv_k_g, k_g, IPMI_MAX_K_G_LENGTH)) { if (config_section_update_keyvalue_output(state_data->pstate, kv, kv->value_input) < 0) return CONFIG_ERR_FATAL_ERROR; return CONFIG_ERR_SUCCESS; } /* else, fall through and return the default checked out value */ } memset(k_g_str, '\0', IPMI_MAX_K_G_LENGTH*2+3); if (!format_kg(k_g_str, IPMI_MAX_K_G_LENGTH*2+3, (unsigned char *)k_g)) return CONFIG_ERR_FATAL_ERROR; if (config_section_update_keyvalue_output(state_data->pstate, kv, (char *)k_g_str) < 0) return CONFIG_ERR_FATAL_ERROR; return CONFIG_ERR_SUCCESS; }