static ipmi_config_err_t _set_key (ipmi_config_state_data_t *state_data, const char *section_name, uint8_t key_type, const void *key, unsigned int key_len) { fiid_obj_t obj_cmd_rs = NULL; ipmi_config_err_t rv = IPMI_CONFIG_ERR_FATAL_ERROR; ipmi_config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); assert (key_type == IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_R || key_type == IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_G); assert (key); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_set_channel_security_keys_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != IPMI_CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_set_channel_security_keys (state_data->ipmi_ctx, channel_number, IPMI_CHANNEL_SECURITY_KEYS_OPERATION_SET_KEY, key_type, key, key_len, obj_cmd_rs) < 0) { if (!IPMI_CTX_ERRNUM_IS_FATAL_ERROR (state_data->ipmi_ctx)) rv = IPMI_CONFIG_ERR_NON_FATAL_ERROR; if (rv == IPMI_CONFIG_ERR_FATAL_ERROR || state_data->prog_data->args->common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_channel_security_keys: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); goto cleanup; } rv = IPMI_CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static ipmi_config_err_t _set_bad_password_threshold (ipmi_config_state_data_t *state_data, const char *section_name, struct bad_password_threshold *bpt) { fiid_obj_t obj_cmd_rs = NULL; ipmi_config_err_t rv = IPMI_CONFIG_ERR_FATAL_ERROR; ipmi_config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); assert (bpt); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_set_lan_configuration_parameters_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != IPMI_CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_set_lan_configuration_parameters_bad_password_threshold (state_data->ipmi_ctx, channel_number, bpt->user_disabled_event_message, bpt->bad_password_threshold_number, bpt->attempt_count_reset_interval, bpt->user_lockout_interval, obj_cmd_rs) < 0) { if (ipmi_config_param_errnum_is_non_fatal (state_data, obj_cmd_rs, &ret)) rv = ret; if (rv == IPMI_CONFIG_ERR_FATAL_ERROR || state_data->prog_data->args->common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_lan_configuration_parameters_bad_password_threshold: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); goto cleanup; } rv = IPMI_CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t community_string_commit (const char *section_name, const struct config_keyvalue *kv, void *arg) { ipmi_pef_config_state_data_t *state_data; fiid_obj_t obj_cmd_rs = NULL; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert (section_name); assert (kv); assert (arg); state_data = (ipmi_pef_config_state_data_t *)arg; if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_set_lan_configuration_parameters_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_set_lan_configuration_parameters_community_string (state_data->ipmi_ctx, channel_number, kv->value_input, strlen (kv->value_input), obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_lan_configuration_parameters_community_string: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t _set_key(bmc_config_state_data_t *state_data, uint8_t key_type, uint8_t *key, uint32_t key_len) { fiid_obj_t obj_cmd_rs = NULL; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert(key_type == IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_R || key_type == IPMI_CHANNEL_SECURITY_KEYS_KEY_ID_K_G); _FIID_OBJ_CREATE(obj_cmd_rs, tmpl_cmd_set_channel_security_keys_rs); if ((ret = get_lan_channel_number (state_data, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_set_channel_security_keys (state_data->ipmi_ctx, channel_number, IPMI_CHANNEL_SECURITY_KEYS_OPERATION_SET_KEY, key_type, key, key_len, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common.debug) pstdout_fprintf(state_data->pstate, stderr, "ipmi_cmd_set_channel_security_keys: %s\n", ipmi_ctx_strerror(ipmi_ctx_errnum(state_data->ipmi_ctx))); if (!IPMI_CTX_ERRNUM_IS_FATAL_ERROR(state_data->ipmi_ctx)) rv = CONFIG_ERR_NON_FATAL_ERROR; goto cleanup; } rv = CONFIG_ERR_SUCCESS; cleanup: _FIID_OBJ_DESTROY(obj_cmd_rs); return (rv); }
static config_err_t community_string_checkout (const char *section_name, struct config_keyvalue *kv, void *arg) { ipmi_pef_config_state_data_t *state_data; char community_string[IPMI_MAX_COMMUNITY_STRING_LENGTH+1] = { 0, }; fiid_obj_t obj_cmd_rs = NULL; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert (section_name); assert (kv); assert (arg); state_data = (ipmi_pef_config_state_data_t *)arg; if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_community_string_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_community_string (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_PEF_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_PEF_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_community_string: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } memset (community_string,'\0', IPMI_MAX_COMMUNITY_STRING_LENGTH+1); if (fiid_obj_get_data (obj_cmd_rs, "community_string", community_string, IPMI_MAX_COMMUNITY_STRING_LENGTH+1) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get_data: 'obj_cmd_rs': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } if (config_section_update_keyvalue_output (state_data->pstate, kv, community_string) < 0) return (CONFIG_ERR_FATAL_ERROR); rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
struct config_section * pef_config_alert_policy_table_section_get (pef_config_state_data_t *state_data, int num) { struct config_section *section = NULL; uint8_t lan_channel_number; char *strp = NULL; config_err_t ret; char buf[CONFIG_MAX_SECTION_NAME_LEN]; if (num <= 0) { pstdout_fprintf(state_data->pstate, stderr, "Invalid Num = %d\n", num); return NULL; } snprintf(buf, CONFIG_MAX_SECTION_NAME_LEN, "Alert_Policy_%d", num); if (!(section = config_section_create (state_data->pstate, buf, NULL, NULL, 0, NULL, NULL))) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Policy_Type", "Possible values: Always_Send_To_This_Destination/Proceed_To_Next_Entry/Do_Not_Proceed_Any_More_Entries/Proceed_To_Next_Entry_Different_Channel/Proceed_To_Next_Entry_Different_Destination_Type", 0, policy_type_checkout, policy_type_commit, policy_type_validate) < 0) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Policy_Enabled", "Possible values: Yes/No", 0, policy_enabled_checkout, policy_enabled_commit, config_yes_no_validate) < 0) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Policy_Number", "Give a valid number", 0, policy_number_checkout, policy_number_commit, config_number_range_four_bits) < 0) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Destination_Selector", "Give a valid number", 0, destination_selector_checkout, destination_selector_commit, config_number_range_four_bits) < 0) goto cleanup; ret = get_lan_channel_number (state_data, &lan_channel_number); if (ret == CONFIG_ERR_SUCCESS) { if (asprintf(&strp, "Give a valid number (LAN = %u)", lan_channel_number) < 0) { if (!strp) { pstdout_perror(state_data->pstate, "asprintf"); goto cleanup; } } } else { if (!(strp = strdup("Give a valid number"))) { pstdout_perror(state_data->pstate, "strdup"); goto cleanup; } } if (config_section_add_key (state_data->pstate, section, "Channel_Number", strp, 0, channel_number_checkout, channel_number_commit, config_number_range_four_bits) < 0) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Alert_String_Set_Selector", "Give a valid number", 0, alert_string_set_selector_checkout, alert_string_set_selector_commit, config_number_range_seven_bits) < 0) goto cleanup; if (config_section_add_key (state_data->pstate, section, "Event_Specific_Alert_String", "Possible values: Yes/No", 0, event_specific_alert_string_checkout, event_specific_alert_string_commit, config_yes_no_validate) < 0) goto cleanup; if (strp) free(strp); return section; cleanup: if (strp) free(strp); if (section) config_section_destroy(state_data->pstate, section); return NULL; }
static ipmi_config_err_t _get_number_of_users (ipmi_config_state_data_t *state_data, uint8_t *number_of_users) { fiid_obj_t obj_cmd_rs = NULL; ipmi_config_err_t rv = IPMI_CONFIG_ERR_FATAL_ERROR; ipmi_config_err_t ret; uint64_t val; uint8_t lan_channel_number; assert (state_data); assert (number_of_users); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_user_access_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } /* for the time being, we assume equal users per channel, so NULL for section_name */ if ((ret = get_lan_channel_number (state_data, NULL, &lan_channel_number)) != IPMI_CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_get_user_access (state_data->ipmi_ctx, lan_channel_number, 1, /* user_id number */ obj_cmd_rs) < 0) { if (!IPMI_CTX_ERRNUM_IS_FATAL_ERROR (state_data->ipmi_ctx)) rv = IPMI_CONFIG_ERR_NON_FATAL_ERROR; if (rv == IPMI_CONFIG_ERR_FATAL_ERROR || state_data->prog_data->args->common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_user_access: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); goto cleanup; } if (FIID_OBJ_GET (obj_cmd_rs, "max_channel_user_ids", &val) < 0) { rv = IPMI_CONFIG_ERR_NON_FATAL_ERROR; goto cleanup; } (*number_of_users) = val; rv = IPMI_CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t _rmcpplus_cipher_suite_id_privilege_setup (bmc_config_state_data_t *state_data, const char *section_name) { fiid_obj_t obj_cmd_count_rs = NULL; fiid_obj_t obj_cmd_id_rs = NULL; fiid_obj_t obj_cmd_priv_rs = NULL; uint64_t val; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; unsigned int i; assert (state_data); assert (section_name); if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (state_data->cipher_suite_entry_count_set && state_data->cipher_suite_id_supported_set && state_data->cipher_suite_priv_set && state_data->cipher_suite_channel_number == channel_number) return (CONFIG_ERR_SUCCESS); state_data->cipher_suite_entry_count = 0; state_data->cipher_suite_entry_count_set = 0; state_data->cipher_suite_id_supported_set = 0; state_data->cipher_suite_priv_set = 0; state_data->cipher_suite_channel_number = channel_number; memset (state_data->cipher_suite_id_supported, '\0', sizeof (state_data->cipher_suite_id_supported)); memset (state_data->cipher_suite_priv, '\0', sizeof (state_data->cipher_suite_priv)); if (!state_data->cipher_suite_entry_count_set) { if (!(obj_cmd_count_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entry_support_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entry_support (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_count_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entry_support: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_count_rs, &ret)) rv = ret; goto cleanup; } if (FIID_OBJ_GET (obj_cmd_count_rs, "cipher_suite_entry_count", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'cipher_suite_entry_count': %s\n", fiid_obj_errormsg (obj_cmd_count_rs)); goto cleanup; } state_data->cipher_suite_entry_count = val; if (state_data->cipher_suite_entry_count > CIPHER_SUITE_LEN) state_data->cipher_suite_entry_count = CIPHER_SUITE_LEN; state_data->cipher_suite_entry_count_set++; } if (state_data->cipher_suite_entry_count && !state_data->cipher_suite_id_supported_set) { if (!(obj_cmd_id_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entries_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entries (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_id_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_entries: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_id_rs, &ret)) rv = ret; goto cleanup; } for (i = 0; i < state_data->cipher_suite_entry_count; i++) { char field[BMC_CONFIG_FIELD_LENGTH_MAX + 1]; memset (field, '\0', BMC_CONFIG_FIELD_LENGTH_MAX + 1); snprintf (field, BMC_CONFIG_FIELD_LENGTH_MAX, "cipher_suite_id_entry_%c", 'A' + i); if (FIID_OBJ_GET (obj_cmd_id_rs, field, &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: '%s': %s\n", field, fiid_obj_errormsg (obj_cmd_id_rs)); goto cleanup; } state_data->cipher_suite_id_supported[i] = val; } /* IPMI Workaround (achu) * * Intel S2600JF/Appro 512X * * Motherboard incorrectly states that it supports Cipher Suites * 1-16 instead of 0-15. If this is specifically returned, adjust * appropriately. */ if (state_data->cipher_suite_entry_count == BMC_CONFIG_CIPHER_SUITE_INCORRECT_RANGE_LEN) { int workaround_condition_not_found = 0; for (i = 0; i < state_data->cipher_suite_entry_count; i++) { if (state_data->cipher_suite_id_supported[i] != (i + 1)) { workaround_condition_not_found++; break; } } if (!workaround_condition_not_found) { for (i = 0; i < state_data->cipher_suite_entry_count; i++) state_data->cipher_suite_id_supported[i] -= 1; } } state_data->cipher_suite_id_supported_set++; } if (state_data->cipher_suite_entry_count && !state_data->cipher_suite_priv_set) { if (!(obj_cmd_priv_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_privilege_levels_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_privilege_levels (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_priv_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_privilege_level: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_priv_rs, &ret)) rv = ret; goto cleanup; } for (i = 0; i < CIPHER_SUITE_LEN; i++) { char field[BMC_CONFIG_FIELD_LENGTH_MAX + 1]; memset (field, '\0', BMC_CONFIG_FIELD_LENGTH_MAX + 1); snprintf (field, BMC_CONFIG_FIELD_LENGTH_MAX, "maximum_privilege_for_cipher_suite_%u", i + 1); if (FIID_OBJ_GET (obj_cmd_priv_rs, field, &val) < 0) { int id_found = 0; /* IPMI Workaround (achu) * * HP DL145 * * The number of entries returned from a RMCP+ Messaging * Cipher Suite Privilege Levels request is not valid. Not * only is it not valid, the number of entries does not even * match the number of entries specified by a RMCP+ * Messaging Cipher Suite Entry Support Count request. * * Instead, indicate the privilege is illegal and have * the output indicated appropriately for this * situation. */ if (fiid_obj_errnum (obj_cmd_priv_rs) == FIID_ERR_DATA_NOT_AVAILABLE) { unsigned int j; for (j = 0; j < state_data->cipher_suite_entry_count; j++) { if (state_data->cipher_suite_id_supported[j] == i) { id_found++; break; } } } if (fiid_obj_errnum (obj_cmd_priv_rs) != FIID_ERR_DATA_NOT_AVAILABLE) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: '%s': %s\n", field, fiid_obj_errormsg (obj_cmd_priv_rs)); goto cleanup; } else { if (id_found) val = BMC_CONFIG_PRIVILEGE_LEVEL_SUPPORTED_BUT_NOT_READABLE; else val = IPMI_PRIVILEGE_LEVEL_UNSPECIFIED; } } state_data->cipher_suite_priv[i] = val; } state_data->cipher_suite_priv_set++; } rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_count_rs); fiid_obj_destroy (obj_cmd_id_rs); fiid_obj_destroy (obj_cmd_priv_rs); return (rv); }
static config_err_t id_commit (const char *section_name, const struct config_keyvalue *kv, void *arg, int id) { bmc_config_state_data_t *state_data; fiid_obj_t obj_cmd_rs = NULL; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; uint8_t privs[CIPHER_SUITE_LEN]; uint8_t privilege; unsigned int i; assert (section_name); assert (kv); assert (arg); state_data = (bmc_config_state_data_t *)arg; if ((ret = _rmcpplus_cipher_suite_id_privilege_setup (state_data, section_name)) != CONFIG_ERR_SUCCESS) return (ret); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_set_lan_configuration_parameters_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } privilege = rmcpplus_priv_number (kv->value_input); memset (privs, '\0', CIPHER_SUITE_LEN); memcpy (privs, state_data->cipher_suite_priv, CIPHER_SUITE_LEN); /* achu: NOT A BUG. * * IPMI spec is_supported does not map to privileges array, you want to index at [id] not a searched [i] */ privs[id] = privilege; /* IPMI Workaround (achu) * * HP DL145 * * See comments above in _rmcpplus_cipher_suite_id_privilege_setup * surrounding HP DL145 workaround. * * B/c of the issue above, there may be illegal privilege levels * sitting in the cipher_suite_priv[] array, we need to fill them in * with the values configured by users. * * If the users didn't configure all the entries, they're out of * luck, we need to return an error. */ for (i = 0; i < CIPHER_SUITE_LEN; i++) { if (privs[i] == BMC_CONFIG_PRIVILEGE_LEVEL_SUPPORTED_BUT_NOT_READABLE) { struct config_section *section; if ((section = config_find_section (state_data->sections, section_name))) { char keynametmp[CONFIG_MAX_KEY_NAME_LEN + 1]; struct config_keyvalue *kvtmp; memset (keynametmp, '\0', CONFIG_MAX_KEY_NAME_LEN + 1); snprintf (keynametmp, CONFIG_MAX_KEY_NAME_LEN, "Maximum_Privilege_Cipher_Suite_Id_%u", i); if ((kvtmp = config_find_keyvalue (section, keynametmp))) { uint8_t privilege_tmp; privilege_tmp = rmcpplus_priv_number (kvtmp->value_input); privs[i] = privilege_tmp; } else { pstdout_fprintf (state_data->pstate, stderr, "ERROR: '%s:%s' Field Required\n", section_name, keynametmp); rv = CONFIG_ERR_NON_FATAL_ERROR; goto cleanup; } } else { /* This is a fatal error, we're already in this section, * it should be findable */ if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "Cannot find section '%s'\n", section_name); goto cleanup; } } } if (ipmi_cmd_set_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_privilege_levels (state_data->ipmi_ctx, channel_number, privs[0], privs[1], privs[2], privs[3], privs[4], privs[5], privs[6], privs[7], privs[8], privs[9], privs[10], privs[11], privs[12], privs[13], privs[14], privs[15], obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_lan_configuration_parameters_rmcpplus_messaging_cipher_suite_privilege_levels: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } /* achu: NOT A BUG. * * IPMI spec is_supported does not map to privileges array, you want to index at [id] not [i] */ state_data->cipher_suite_priv[id] = privilege; rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t _get_authentication_type_support (bmc_config_state_data_t *state_data, const char *section_name) { fiid_obj_t obj_cmd_rs = NULL; uint64_t val; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (state_data->authentication_type_initialized && state_data->authentication_type_channel_number == channel_number) goto out; state_data->authentication_type_initialized = 0; state_data->authentication_type_channel_number = 0; if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_authentication_type_support_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_authentication_type_support (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_authentication_type_support: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } if (FIID_OBJ_GET (obj_cmd_rs, "none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } state_data->authentication_type_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } state_data->authentication_type_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } state_data->authentication_type_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } state_data->authentication_type_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } state_data->authentication_type_oem_proprietary = val; state_data->authentication_type_initialized++; out: rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t _set_authentication_type_enables (bmc_config_state_data_t *state_data, const char *section_name, struct bmc_authentication_level *al) { fiid_obj_t obj_cmd_rs = NULL; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); assert (al); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_set_lan_configuration_parameters_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_set_lan_configuration_parameters_authentication_type_enables (state_data->ipmi_ctx, channel_number, al->callback_level_none, al->callback_level_md2, al->callback_level_md5, al->callback_level_straight_password, al->callback_level_oem_proprietary, al->user_level_none, al->user_level_md2, al->user_level_md5, al->user_level_straight_password, al->user_level_oem_proprietary, al->operator_level_none, al->operator_level_md2, al->operator_level_md5, al->operator_level_straight_password, al->operator_level_oem_proprietary, al->admin_level_none, al->admin_level_md2, al->admin_level_md5, al->admin_level_straight_password, al->admin_level_oem_proprietary, al->oem_level_none, al->oem_level_md2, al->oem_level_md5, al->oem_level_straight_password, al->oem_level_oem_proprietary, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_lan_configuration_parameters_authentication_type_enables: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); /* * IPMI Workaround * * Dell Poweredge R610 * * Nodes come default w/ OEM authentication enables turned * on, but you cannot configure them on. So this always * leads to invalid data errors (0xCC) b/c we are * configuring one field at a time. So we will "absorb" the * OEM configuration of later fields and try again, hoping * that the user has tried to "right" the badness already * sitting on the motherboard. */ if (ipmi_ctx_errnum (state_data->ipmi_ctx) == IPMI_ERR_COMMAND_INVALID_OR_UNSUPPORTED && (ipmi_check_completion_code (obj_cmd_rs, IPMI_COMP_CODE_INVALID_DATA_FIELD_IN_REQUEST) == 1)) { struct config_section *section; struct config_keyvalue *kv; section = state_data->sections; while (section) { if (!strcasecmp (section->section_name, "Lan_Conf_Auth")) break; section = section->next; } /* shouldn't be possible */ if (!section) goto cleanup; if ((kv = config_find_keyvalue (section, "Callback_Enable_Auth_Type_OEM_Proprietary"))) al->callback_level_oem_proprietary = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "User_Enable_Auth_Type_OEM_Proprietary"))) al->user_level_oem_proprietary = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "Operator_Enable_Auth_Type_OEM_Proprietary"))) al->operator_level_oem_proprietary = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "Admin_Enable_Auth_Type_OEM_Proprietary"))) al->admin_level_oem_proprietary = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "OEM_Enable_Auth_Type_None"))) al->oem_level_none = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "OEM_Enable_Auth_Type_MD2"))) al->oem_level_md2 = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "OEM_Enable_Auth_Type_MD5"))) al->oem_level_md5 = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "OEM_Enable_Auth_Type_Straight_Password"))) al->oem_level_straight_password = same (kv->value_input, "yes"); if ((kv = config_find_keyvalue (section, "OEM_Enable_Auth_Type_OEM_Proprietary"))) al->oem_level_oem_proprietary = same (kv->value_input, "yes"); if (ipmi_cmd_set_lan_configuration_parameters_authentication_type_enables (state_data->ipmi_ctx, channel_number, al->callback_level_none, al->callback_level_md2, al->callback_level_md5, al->callback_level_straight_password, al->callback_level_oem_proprietary, al->user_level_none, al->user_level_md2, al->user_level_md5, al->user_level_straight_password, al->user_level_oem_proprietary, al->operator_level_none, al->operator_level_md2, al->operator_level_md5, al->operator_level_straight_password, al->operator_level_oem_proprietary, al->admin_level_none, al->admin_level_md2, al->admin_level_md5, al->admin_level_straight_password, al->admin_level_oem_proprietary, al->oem_level_none, al->oem_level_md2, al->oem_level_md5, al->oem_level_straight_password, al->oem_level_oem_proprietary, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_set_lan_configuration_parameters_authentication_type_enables: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } /* success!! */ goto out; } else if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } out: rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static config_err_t _get_authentication_type_enables (bmc_config_state_data_t *state_data, const char *section_name, struct bmc_authentication_level *al) { fiid_obj_t obj_cmd_rs = NULL; uint64_t val; config_err_t rv = CONFIG_ERR_FATAL_ERROR; config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); assert (al); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_authentication_type_enables_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_authentication_type_enables (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_rs) < 0) { if (state_data->prog_data->args->config_args.common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_authentication_type_enables: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); if (config_is_config_param_non_fatal_error (state_data->ipmi_ctx, obj_cmd_rs, &ret)) rv = ret; goto cleanup; } if (FIID_OBJ_GET (obj_cmd_rs, "callback_level.none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'callback_level.none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->callback_level_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "callback_level.md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'callback_level.md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->callback_level_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "callback_level.md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'callback_level.md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->callback_level_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "callback_level.straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'callback_level.straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->callback_level_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "callback_level.oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'callback_level.oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->callback_level_oem_proprietary = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_level.none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_level.none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->user_level_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_level.md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_level.md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->user_level_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_level.md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_level.md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->user_level_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_level.straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_level.straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->user_level_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_level.oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_level.oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->user_level_oem_proprietary = val; if (FIID_OBJ_GET (obj_cmd_rs, "operator_level.none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'operator_level.none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->operator_level_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "operator_level.md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'operator_level.md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->operator_level_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "operator_level.md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'operator_level.md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->operator_level_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "operator_level.straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'operator_level.straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->operator_level_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "operator_level.oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'operator_level.oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->operator_level_oem_proprietary = val; if (FIID_OBJ_GET (obj_cmd_rs, "admin_level.none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'admin_level.none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->admin_level_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "admin_level.md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'admin_level.md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->admin_level_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "admin_level.md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'admin_level.md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->admin_level_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "admin_level.straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'admin_level.straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->admin_level_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "admin_level.oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'admin_level.oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->admin_level_oem_proprietary = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_level.none", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_level.none': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->oem_level_none = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_level.md2", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_level.md2': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->oem_level_md2 = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_level.md5", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_level.md5': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->oem_level_md5 = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_level.straight_password", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_level.straight_password': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->oem_level_straight_password = val; if (FIID_OBJ_GET (obj_cmd_rs, "oem_level.oem_proprietary", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'oem_level.oem_proprietary': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } al->oem_level_oem_proprietary = val; rv = CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static ipmi_config_err_t _get_bad_password_threshold (ipmi_config_state_data_t *state_data, const char *section_name, struct bad_password_threshold *bpt) { fiid_obj_t obj_cmd_rs = NULL; uint64_t val; ipmi_config_err_t rv = IPMI_CONFIG_ERR_FATAL_ERROR; ipmi_config_err_t ret; uint8_t channel_number; assert (state_data); assert (section_name); assert (bpt); if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_bad_password_threshold_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if ((ret = get_lan_channel_number (state_data, section_name, &channel_number)) != IPMI_CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_bad_password_threshold (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_LAN_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_rs) < 0) { if (ipmi_config_param_errnum_is_non_fatal (state_data, obj_cmd_rs, &ret)) rv = ret; if (rv == IPMI_CONFIG_ERR_FATAL_ERROR || state_data->prog_data->args->common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_bad_password_threshold: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); goto cleanup; } if (FIID_OBJ_GET (obj_cmd_rs, "user_disabled_event_message", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_disabled_event_message': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } bpt->user_disabled_event_message = val; if (FIID_OBJ_GET (obj_cmd_rs, "bad_password_threshold_number", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'bad_password_threshold_number': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } bpt->bad_password_threshold_number = val; if (FIID_OBJ_GET (obj_cmd_rs, "attempt_count_reset_interval", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'attempt_count_reset_interval': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } bpt->attempt_count_reset_interval = val; if (FIID_OBJ_GET (obj_cmd_rs, "user_lockout_interval", &val) < 0) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_get: 'user_lockout_interval': %s\n", fiid_obj_errormsg (obj_cmd_rs)); goto cleanup; } bpt->user_lockout_interval = val; rv = IPMI_CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }
static ipmi_config_err_t _get_number_of_lan_alert_destinations (struct ipmi_config_state_data *state_data, uint8_t *number_of_lan_alert_destinations) { fiid_obj_t obj_cmd_rs = NULL; ipmi_config_err_t rv = IPMI_CONFIG_ERR_FATAL_ERROR; ipmi_config_err_t ret; uint64_t val; uint8_t channel_number; assert (state_data); assert (number_of_lan_alert_destinations); /* for the time being, we assume equal destinations per channel, so NULL for section_name */ if ((ret = get_lan_channel_number (state_data, NULL, &channel_number)) != IPMI_CONFIG_ERR_SUCCESS) { rv = ret; goto cleanup; } if (!(obj_cmd_rs = fiid_obj_create (tmpl_cmd_get_lan_configuration_parameters_number_of_destinations_rs))) { pstdout_fprintf (state_data->pstate, stderr, "fiid_obj_create: %s\n", strerror (errno)); goto cleanup; } if (ipmi_cmd_get_lan_configuration_parameters_number_of_destinations (state_data->ipmi_ctx, channel_number, IPMI_GET_LAN_PARAMETER, IPMI_PEF_CONFIGURATION_PARAMETERS_NO_SET_SELECTOR, IPMI_PEF_CONFIGURATION_PARAMETERS_NO_BLOCK_SELECTOR, obj_cmd_rs) < 0) { if (ipmi_errnum_is_non_fatal (state_data, obj_cmd_rs, &ret)) rv = ret; if (rv == IPMI_CONFIG_ERR_FATAL_ERROR || state_data->prog_data->args->common_args.debug) pstdout_fprintf (state_data->pstate, stderr, "ipmi_cmd_get_lan_configuration_parameters_number_of_destinations: %s\n", ipmi_ctx_errormsg (state_data->ipmi_ctx)); goto cleanup; } if (FIID_OBJ_GET (obj_cmd_rs, "number_of_lan_destinations", &val) < 0) { rv = IPMI_CONFIG_ERR_NON_FATAL_ERROR; goto cleanup; } (*number_of_lan_alert_destinations) = val; rv = IPMI_CONFIG_ERR_SUCCESS; cleanup: fiid_obj_destroy (obj_cmd_rs); return (rv); }