List of changes in 'lib/ipmi_lanp.c':

* return value != 0 when no or not enough params given
* replaces strtol() calls with str2uchar() ones
* invalid input checking and error messages for such events
* ipmi_lanp_main() got slight work-over
This commit is contained in:
Zdenek Styblik 2012-02-08 15:31:00 +00:00
parent e230427138
commit ad4065a370

View File

@ -557,7 +557,7 @@ ipmi_lan_print(struct ipmi_intf * intf, uint8_t chan)
} }
/* find type of channel and only accept 802.3 LAN */ /* find type of channel and only accept 802.3 LAN */
if (is_lan_channel(intf, chan) == 0) { if (!is_lan_channel(intf, chan)) {
lprintf(LOG_ERR, "Channel %d is not a LAN channel", chan); lprintf(LOG_ERR, "Channel %d is not a LAN channel", chan);
return -1; return -1;
} }
@ -1352,7 +1352,7 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv)
if (argc < 2) { if (argc < 2) {
ipmi_lan_set_usage(); ipmi_lan_set_usage();
return 0; return (-1);
} }
if (strncmp(argv[0], "help", 4) == 0 || if (strncmp(argv[0], "help", 4) == 0 ||
@ -1360,11 +1360,14 @@ ipmi_lan_set(struct ipmi_intf * intf, int argc, char ** argv)
ipmi_lan_set_usage(); ipmi_lan_set_usage();
return 0; return 0;
} }
chan = (uint8_t)strtol(argv[0], NULL, 0); if (str2uchar(argv[0], &chan) != 0) {
lprintf(LOG_ERR, "Invalid channel: %s", argv[0]);
return (-1);
}
/* find type of channel and only accept 802.3 LAN */ /* find type of channel and only accept 802.3 LAN */
if (is_lan_channel(intf, chan) == 0) { if (!is_lan_channel(intf, chan)) {
lprintf(LOG_ERR, "Channel %d is not a LAN channel!", chan); lprintf(LOG_ERR, "Channel %d is not a LAN channel!", chan);
ipmi_lan_set_usage(); ipmi_lan_set_usage();
return -1; return -1;
@ -1893,7 +1896,10 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
p = get_lan_param_select(intf, chan, IPMI_LANP_DEST_TYPE, alert); p = get_lan_param_select(intf, chan, IPMI_LANP_DEST_TYPE, alert);
memcpy(data, p->data, p->data_len); memcpy(data, p->data, p->data_len);
data[2] = (uint8_t)strtol(argv[1], NULL, 0); if (str2uchar(argv[1], &data[2]) != 0) {
lprintf(LOG_ERR, "Invalid time: %s", argv[1]);
return (-1);
}
printf("Setting LAN Alert %d timeout/retry to %d seconds\n", alert, data[2]); printf("Setting LAN Alert %d timeout/retry to %d seconds\n", alert, data[2]);
rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len); rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len);
} }
@ -1903,7 +1909,11 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
p = get_lan_param_select(intf, chan, IPMI_LANP_DEST_TYPE, alert); p = get_lan_param_select(intf, chan, IPMI_LANP_DEST_TYPE, alert);
memcpy(data, p->data, p->data_len); memcpy(data, p->data, p->data_len);
data[3] = ((uint8_t)strtol(argv[1], NULL, 0)) & 0x7; if (str2uchar(argv[1], &data[3]) != 0) {
lprintf(LOG_ERR, "Invalid retry: %s", argv[1]);
return (-1);
}
data[3] = data[3] & 0x7;
printf("Setting LAN Alert %d number of retries to %d\n", alert, data[3]); printf("Setting LAN Alert %d number of retries to %d\n", alert, data[3]);
rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len); rc = set_lan_param_nowait(intf, chan, IPMI_LANP_DEST_TYPE, data, p->data_len);
} }
@ -1932,7 +1942,7 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv)
if (strncasecmp(argv[0], "print", 5) == 0) { if (strncasecmp(argv[0], "print", 5) == 0) {
if (argc < 2) { if (argc < 2) {
channel = find_lan_channel(intf, 1); channel = find_lan_channel(intf, 1);
if (is_lan_channel(intf, channel) == 0) { if (!is_lan_channel(intf, channel)) {
lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel); lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel);
return -1; return -1;
} }
@ -1944,8 +1954,11 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv)
return 0; return 0;
} }
channel = (uint8_t)strtol(argv[1], NULL, 0); if (str2uchar(argv[1], &channel) != 0) {
if (is_lan_channel(intf, channel) == 0) { lprintf(LOG_ERR, "Invalid channel: %s", argv[1]);
return (-1);
}
if (!is_lan_channel(intf, channel)) {
lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel); lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel);
return -1; return -1;
} }
@ -1953,7 +1966,10 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv)
if (argc < 3) if (argc < 3)
return ipmi_lan_alert_print_all(intf, channel); return ipmi_lan_alert_print_all(intf, channel);
alert = (uint8_t)strtol(argv[2], NULL, 0); if (str2uchar(argv[2], &alert) != 0) {
lprintf(LOG_ERR, "Invalid alert: %s", argv[2]);
return (-1);
}
if (is_alert_destination(intf, channel, alert) == 0) { if (is_alert_destination(intf, channel, alert) == 0) {
lprintf(LOG_ERR, "Alert %d is not a valid destination", alert); lprintf(LOG_ERR, "Alert %d is not a valid destination", alert);
return -1; return -1;
@ -1968,13 +1984,19 @@ ipmi_lan_alert(struct ipmi_intf * intf, int argc, char ** argv)
return 0; return 0;
} }
channel = (uint8_t)strtol(argv[1], NULL, 0); if (str2uchar(argv[1], &channel) != 0) {
if (is_lan_channel(intf, channel) == 0) { lprintf(LOG_ERR, "Invalid channel: %s", argv[1]);
return (-1);
}
if (!is_lan_channel(intf, channel)) {
lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel); lprintf(LOG_ERR, "Channel %d is not a LAN channel", channel);
return -1; return -1;
} }
alert = (uint8_t)strtol(argv[2], NULL, 0); if (str2uchar(argv[2], &alert) != 0) {
lprintf(LOG_ERR, "Invalid alert: %s", argv[2]);
return (-1);
}
if (is_alert_destination(intf, channel, alert) == 0) { if (is_alert_destination(intf, channel, alert) == 0) {
lprintf(LOG_ERR, "Alert %d is not a valid destination", alert); lprintf(LOG_ERR, "Alert %d is not a valid destination", alert);
return -1; return -1;
@ -2146,58 +2168,60 @@ ipmi_lanp_main(struct ipmi_intf * intf, int argc, char ** argv)
int rc = 0; int rc = 0;
uint8_t chan = find_lan_channel(intf, 1); uint8_t chan = find_lan_channel(intf, 1);
if (argc == 0 || (strncmp(argv[0], "help", 4) == 0)) { if (argc == 0) {
print_lan_usage(); print_lan_usage();
return -1; return (-1);
}
if (strncmp(argv[0], "help", 4)) {
print_lan_usage();
return 0;
} }
if (strncmp(argv[0], "printconf", 9) == 0 || if (strncmp(argv[0], "printconf", 9) || strncmp(argv[0], "print", 5)) {
strncmp(argv[0], "print", 5) == 0) if (argc > 2) {
{ print_lan_usage();
if (argc > 1) return (-1);
chan = (uint8_t)strtol(argv[1], NULL, 0); } else if (argc == 2) {
if (chan < 1 || chan > IPMI_CHANNEL_NUMBER_MAX) if (str2uchar(argv[1], &chan) != 0) {
{ lprintf(LOG_ERR, "Invalid channel: %s", argv[1]);
lprintf(LOG_ERR, "Invalid channel: %d", chan); return (-1);
return -1; }
} }
else if (!is_lan_channel(intf, chan)) {
rc = ipmi_lan_print(intf, chan); lprintf(LOG_ERR, "Invalid channel: %d", chan);
} return (-1);
else if (strncmp(argv[0], "set", 3) == 0) }
{ rc = ipmi_lan_print(intf, chan);
} else if (strncmp(argv[0], "set", 3) == 0) {
rc = ipmi_lan_set(intf, argc-1, &(argv[1])); rc = ipmi_lan_set(intf, argc-1, &(argv[1]));
} } else if (strncmp(argv[0], "alert", 5) == 0) {
else if (strncmp(argv[0], "alert", 5) == 0)
{
rc = ipmi_lan_alert(intf, argc-1, &(argv[1])); rc = ipmi_lan_alert(intf, argc-1, &(argv[1]));
} } else if (strncmp(argv[0], "stats", 5) == 0) {
else if (strncmp(argv[0], "stats", 5) == 0) if (argc < 2) {
{
if(argc == 1)
{
print_lan_usage(); print_lan_usage();
return -1; return (-1);
} else if (argc == 3) {
if (str2uchar(argv[2], &chan) != 0) {
lprintf(LOG_ERR, "Invalid channel: %s", argv[2]);
return (-1);
}
} }
else if (argc > 2) if (!is_lan_channel(intf, chan)) {
chan = (uint8_t)strtol(argv[2], NULL, 0);
if (chan < 1 || chan > IPMI_CHANNEL_NUMBER_MAX)
{
lprintf(LOG_ERR, "Invalid channel: %d", chan); lprintf(LOG_ERR, "Invalid channel: %d", chan);
return -1; return (-1);
} }
else if (strncmp(argv[1], "get", 3) == 0) if (strncmp(argv[1], "get", 3) == 0) {
rc = ipmi_lan_stats_get(intf, chan); rc = ipmi_lan_stats_get(intf, chan);
else if (strncmp(argv[1], "clear", 5) == 0) } else if (strncmp(argv[1], "clear", 5) == 0) {
rc = ipmi_lan_stats_clear(intf, chan); rc = ipmi_lan_stats_clear(intf, chan);
else } else {
print_lan_usage(); print_lan_usage();
} return (-1);
else }
{ } else {
lprintf(LOG_NOTICE, "Invalid LAN command: %s", argv[0]); lprintf(LOG_NOTICE, "Invalid LAN command: %s", argv[0]);
rc = -1; return (-1);
} }
return rc; return rc;
} }