From 122e11a2e8ce8869856232e7e86b0ba96413ffdd Mon Sep 17 00:00:00 2001 From: Zdenek Styblik Date: Mon, 22 Oct 2012 16:50:34 +0000 Subject: [PATCH] ID: 3522731 - 'lib/ipmi_sol.c' - ipmi_get_sol_info() returns always 0 PROPER - Commit fixes ipmi_get_sol_info()'s return value, so (-1) is returned on error, eg. response is NULL. It doesn't matter whether it is first or last response, we bail out immediately. Commit also fixes missing argument to one lprintf() and indentation(spaces->tabs). This bug is connected with ``ID: 1835038 - 'lib/ipmi_sol.c' - ipmi_get_sol_info() returns always 0''. Reported by: Duncan Idaho --- ipmitool/lib/ipmi_sol.c | 472 ++++++++++++++++++++-------------------- 1 file changed, 241 insertions(+), 231 deletions(-) diff --git a/ipmitool/lib/ipmi_sol.c b/ipmitool/lib/ipmi_sol.c index cccef78..47288d8 100644 --- a/ipmitool/lib/ipmi_sol.c +++ b/ipmitool/lib/ipmi_sol.c @@ -208,7 +208,6 @@ ipmi_get_sol_info( req.msg.data_len = 4; req.msg.data = data; - /* * set in progress */ @@ -219,70 +218,70 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->set_in_progress = rsp->data[1]; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->set_in_progress = rsp->data[1]; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* * SOL enable */ - memset(data, 0, sizeof(data)); + memset(data, 0, sizeof(data)); data[0] = channel; /* channel number */ data[1] = SOL_PARAMETER_SOL_ENABLE; /* parameter selector */ data[2] = 0x00; /* set selector */ data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->enabled = rsp->data[1]; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->enabled = rsp->data[1]; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -295,33 +294,34 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->force_encryption = ((rsp->data[1] & 0x80)? 1 : 0); - params->force_authentication = ((rsp->data[1] & 0x40)? 1 : 0); - params->privilege_level = rsp->data[1] & 0x0F; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->force_encryption = ((rsp->data[1] & 0x80)? 1 : 0); + params->force_authentication = ((rsp->data[1] & 0x40)? 1 : 0); + params->privilege_level = rsp->data[1] & 0x0F; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -334,32 +334,33 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 3) { - params->character_accumulate_level = rsp->data[1]; - params->character_send_threshold = rsp->data[2]; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 3) { + params->character_accumulate_level = rsp->data[1]; + params->character_send_threshold = rsp->data[2]; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -372,32 +373,33 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 3) { - params->retry_count = rsp->data[1]; - params->retry_interval = rsp->data[2]; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 3) { + params->retry_count = rsp->data[1]; + params->retry_interval = rsp->data[2]; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -405,36 +407,37 @@ ipmi_get_sol_info( */ memset(data, 0, sizeof(data)); data[0] = channel; /* channel number */ - data[1] = SOL_PARAMETER_SOL_NON_VOLATILE_BIT_RATE; /* parameter selector */ - data[2] = 0x00; /* set selector */ + data[1] = SOL_PARAMETER_SOL_NON_VOLATILE_BIT_RATE; /* parameter selector */ + data[2] = 0x00; /* set selector */ data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->non_volatile_bit_rate = rsp->data[1] & 0x0F; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->non_volatile_bit_rate = rsp->data[1] & 0x0F; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -447,31 +450,32 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->volatile_bit_rate = rsp->data[1] & 0x0F; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", - val2str(data[1], sol_parameter_vals)); - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->volatile_bit_rate = rsp->data[1] & 0x0F; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported", + val2str(data[1], sol_parameter_vals)); + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } /* @@ -484,32 +488,33 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 2) { - params->payload_channel = rsp->data[1]; - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported - defaulting to 0x%02x", - val2str(data[1], sol_parameter_vals), channel); - params->payload_channel = channel; - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + if (rsp == NULL) { + lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 2) { + params->payload_channel = rsp->data[1]; + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported - defaulting to 0x%02x", + val2str(data[1], sol_parameter_vals), channel); + params->payload_channel = channel; + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", val2str(data[1], sol_parameter_vals), val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { - lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + return (-1); } /* @@ -522,36 +527,41 @@ ipmi_get_sol_info( data[3] = 0x00; /* block selector */ rsp = intf->sendrecv(intf, &req); - if (NULL != rsp) { - switch (rsp->ccode) { - case 0x00: - if (rsp->data_len == 3) { - params->payload_port = (rsp->data[1]) | (rsp->data[2] << 8); - } else { - lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " - "for SOL parameter '%s'", - rsp->data_len, - val2str(data[1], sol_parameter_vals)); - } - break; - case 0x80: - if( intf->session != NULL ){ - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported - defaulting to %d", val2str(data[1], sol_parameter_vals), intf->session->port); - params->payload_port = intf->session->port; - } else { - lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported - can't determine which payload port to use on NULL session" ); - return -1; - } - break; - default: - lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", - val2str(data[1], sol_parameter_vals), - val2str(rsp->ccode, completion_code_vals)); - return -1; - } - } else { + if (rsp == NULL) { lprintf(LOG_ERR, "Error: No response requesting SOL parameter '%s'", - val2str(data[1], sol_parameter_vals)); + val2str(data[1], sol_parameter_vals)); + return (-1); + } + + switch (rsp->ccode) { + case 0x00: + if (rsp->data_len == 3) { + params->payload_port = (rsp->data[1]) | (rsp->data[2] << 8); + } else { + lprintf(LOG_ERR, "Error: Unexpected data length (%d) received " + "for SOL parameter '%s'", + rsp->data_len, + val2str(data[1], sol_parameter_vals)); + } + break; + case 0x80: + if( intf->session != NULL ) { + lprintf(LOG_ERR, "Info: SOL parameter '%s' not supported - defaulting to %d", + val2str(data[1], sol_parameter_vals), intf->session->port); + params->payload_port = intf->session->port; + } else { + lprintf(LOG_ERR, + "Info: SOL parameter '%s' not supported - can't determine which " + "payload port to use on NULL session", + val2str(data[1], sol_parameter_vals)); + return (-1); + } + break; + default: + lprintf(LOG_ERR, "Error requesting SOL parameter '%s': %s", + val2str(data[1], sol_parameter_vals), + val2str(rsp->ccode, completion_code_vals)); + return (-1); } return 0;