* long lines(= lines longer than 80chars)

* validate user input in 'lib/ipmi_sunoem.c', resp. ipmi_sunoem_main()
* 'sunoem sshkey' would accept undefined actions and exit with RC = 0
* RC > 0 and help will be displayed for unknown commands/actions
* "code bumming" - some conditions seemed to be redundant

commited for Duncan Idaho
This commit is contained in:
Jim Mankovich 2012-05-07 14:09:28 +00:00
parent 62df3e6ea8
commit 219f67e41a

View File

@ -97,20 +97,24 @@ ipmi_sunoem_usage(void)
lprintf(LOG_NOTICE, " view users with 'user list' command."); lprintf(LOG_NOTICE, " view users with 'user list' command.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " led get <sensorid> [ledtype]"); lprintf(LOG_NOTICE, " led get <sensorid> [ledtype]");
lprintf(LOG_NOTICE, " Read status of LED found in Generic Device Locator."); lprintf(LOG_NOTICE,
" Read status of LED found in Generic Device Locator.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " led set <sensorid> <ledmode> [ledtype]"); lprintf(LOG_NOTICE, " led set <sensorid> <ledmode> [ledtype]");
lprintf(LOG_NOTICE, " Set mode of LED found in Generic Device Locator."); lprintf(LOG_NOTICE,
" Set mode of LED found in Generic Device Locator.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " sbled get <sensorid> [ledtype]"); lprintf(LOG_NOTICE, " sbled get <sensorid> [ledtype]");
lprintf(LOG_NOTICE, " Read status of LED found in Generic Device Locator"); lprintf(LOG_NOTICE,
" Read status of LED found in Generic Device Locator");
lprintf(LOG_NOTICE, " for Sun Blade Modular Systems."); lprintf(LOG_NOTICE, " for Sun Blade Modular Systems.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " sbled set <sensorid> <ledmode> [ledtype]"); lprintf(LOG_NOTICE, " sbled set <sensorid> <ledmode> [ledtype]");
lprintf(LOG_NOTICE, " Set mode of LED found in Generic Device Locator"); lprintf(LOG_NOTICE, " Set mode of LED found in Generic Device Locator");
lprintf(LOG_NOTICE, " for Sun Blade Modular Systems."); lprintf(LOG_NOTICE, " for Sun Blade Modular Systems.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " Use 'sdr list generic' command to get list of Generic"); lprintf(LOG_NOTICE,
" Use 'sdr list generic' command to get list of Generic");
lprintf(LOG_NOTICE, " Devices that are controllable LEDs."); lprintf(LOG_NOTICE, " Devices that are controllable LEDs.");
lprintf(LOG_NOTICE, ""); lprintf(LOG_NOTICE, "");
lprintf(LOG_NOTICE, " Required SIS LED Mode:"); lprintf(LOG_NOTICE, " Required SIS LED Mode:");
@ -401,7 +405,8 @@ ipmi_sunoem_led_get(struct ipmi_intf * intf, int argc, char ** argv)
if (strncasecmp(argv[0], "all", 3) == 0) { if (strncasecmp(argv[0], "all", 3) == 0) {
/* do all generic sensors */ /* do all generic sensors */
alist = ipmi_sdr_find_sdr_bytype(intf, SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR); alist = ipmi_sdr_find_sdr_bytype(intf,
SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR);
for (a = alist; a != NULL; a = a->next) { for (a = alist; a != NULL; a = a->next) {
if (a->type != SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR) if (a->type != SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR)
continue; continue;
@ -564,7 +569,8 @@ ipmi_sunoem_led_set(struct ipmi_intf * intf, int argc, char ** argv)
if (strncasecmp(argv[0], "all", 3) == 0) { if (strncasecmp(argv[0], "all", 3) == 0) {
/* do all generic sensors */ /* do all generic sensors */
alist = ipmi_sdr_find_sdr_bytype(intf, SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR); alist = ipmi_sdr_find_sdr_bytype(intf,
SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR);
for (a = alist; a != NULL; a = a->next) { for (a = alist; a != NULL; a = a->next) {
if (a->type != SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR) if (a->type != SDR_RECORD_TYPE_GENERIC_DEVICE_LOCATOR)
continue; continue;
@ -635,12 +641,14 @@ ipmi_sunoem_led_set(struct ipmi_intf * intf, int argc, char ** argv)
/* first range set - id 1 and 2 must be equal */ /* first range set - id 1 and 2 must be equal */
if (assoc->entity_id_1 == assoc->entity_id_2) if (assoc->entity_id_1 == assoc->entity_id_2)
for (i = assoc->entity_inst_1; i <= assoc->entity_inst_2; i++) for (i = assoc->entity_inst_1; i <= assoc->entity_inst_2; i++)
sunoem_led_set_byentity(intf, assoc->entity_id_1, i, ledtype, ledmode); sunoem_led_set_byentity(intf, assoc->entity_id_1, i, ledtype,
ledmode);
/* second range set - id 3 and 4 must be equal */ /* second range set - id 3 and 4 must be equal */
if (assoc->entity_id_3 == assoc->entity_id_4) if (assoc->entity_id_3 == assoc->entity_id_4)
for (i = assoc->entity_inst_3; i <= assoc->entity_inst_4; i++) for (i = assoc->entity_inst_3; i <= assoc->entity_inst_4; i++)
sunoem_led_set_byentity(intf, assoc->entity_id_3, i, ledtype, ledmode); sunoem_led_set_byentity(intf, assoc->entity_id_3, i, ledtype,
ledmode);
} }
else { else {
/* /*
@ -764,7 +772,7 @@ ipmi_sunoem_sshkey_set(struct ipmi_intf * intf, uint8_t uid, char * ifile)
int int
ipmi_sunoem_main(struct ipmi_intf * intf, int argc, char ** argv) ipmi_sunoem_main(struct ipmi_intf * intf, int argc, char ** argv)
{ {
int rc = 0; int rc = (-1);
if (argc == 0 || strncmp(argv[0], "help", 4) == 0) { if (argc == 0 || strncmp(argv[0], "help", 4) == 0) {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
@ -772,29 +780,24 @@ ipmi_sunoem_main(struct ipmi_intf * intf, int argc, char ** argv)
} }
if (strncmp(argv[0], "fan", 3) == 0) { if (strncmp(argv[0], "fan", 3) == 0) {
uint8_t pct; if (argc == 3 && strncmp(argv[1], "speed", 5) == 0) {
if (argc < 2) { uint8_t pct = 0;
ipmi_sunoem_usage(); if (str2uchar(argv[2], &pct) != 0 || pct > 100) {
return -1; lprintf(LOG_ERR, "Fan speed is limited to range <0..100>.");
} return (-1);
else if (strncmp(argv[1], "speed", 5) == 0) {
if (argc < 3) {
ipmi_sunoem_usage();
return -1;
} }
pct = (uint8_t)strtol(argv[2], NULL, 0);
rc = ipmi_sunoem_fan_speed(intf, pct); rc = ipmi_sunoem_fan_speed(intf, pct);
} }
else { else {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
return -1; return (-1);
} }
} }
else if ((strncmp(argv[0], "led", 3) == 0)
if ((strncmp(argv[0], "led", 3) == 0) || (strncmp(argv[0], "sbled", 5) == 0)) { || (strncmp(argv[0], "sbled", 5) == 0)) {
if (argc < 2) { if (argc < 2) {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
return -1; return (-1);
} }
if (strncmp(argv[0], "sbled", 5) == 0) { if (strncmp(argv[0], "sbled", 5) == 0) {
is_sbcmd = 1; is_sbcmd = 1;
@ -803,46 +806,49 @@ ipmi_sunoem_main(struct ipmi_intf * intf, int argc, char ** argv)
if (argc < 3) { if (argc < 3) {
char * arg[] = { "all" }; char * arg[] = { "all" };
rc = ipmi_sunoem_led_get(intf, 1, arg); rc = ipmi_sunoem_led_get(intf, 1, arg);
} else { }
else {
rc = ipmi_sunoem_led_get(intf, argc-2, &(argv[2])); rc = ipmi_sunoem_led_get(intf, argc-2, &(argv[2]));
} }
} }
else if (strncmp(argv[1], "set", 3) == 0) { else if (strncmp(argv[1], "set", 3) == 0) {
if (argc < 4) { if (argc < 4) {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
return -1; return (-1);
} }
rc = ipmi_sunoem_led_set(intf, argc-2, &(argv[2])); rc = ipmi_sunoem_led_set(intf, argc-2, &(argv[2]));
} }
else { else {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
return -1; return (-1);
} }
} }
else if (strncmp(argv[0], "sshkey", 6) == 0) {
if (strncmp(argv[0], "sshkey", 6) == 0) { uint8_t uid = 0;
if (argc < 2) { if (argc < 3) {
ipmi_sunoem_usage(); ipmi_sunoem_usage();
return -1; return (-1);
} }
else if (strncmp(argv[1], "del", 3) == 0) {
uint8_t uid; if (str2uchar(argv[2], &uid) != 0 || uid < 1 || uid > 63) {
if (argc < 3) { lprintf(LOG_ERR, "User ID is limited to range <1..63>.");
ipmi_sunoem_usage(); return (-1);
return -1; }
}
uid = (uint8_t)strtoul(argv[2], NULL, 0); if (strncmp(argv[1], "del", 3) == 0) {
rc = ipmi_sunoem_sshkey_del(intf, uid); rc = ipmi_sunoem_sshkey_del(intf, uid);
} }
else if (strncmp(argv[1], "set", 3) == 0) { else if (argc == 4 && strncmp(argv[1], "set", 3) == 0) {
uint8_t uid;
if (argc < 4) {
ipmi_sunoem_usage();
return -1;
}
uid = (uint8_t)strtoul(argv[2], NULL, 0);
rc = ipmi_sunoem_sshkey_set(intf, uid, argv[3]); rc = ipmi_sunoem_sshkey_set(intf, uid, argv[3]);
} }
else {
ipmi_sunoem_usage();
return (-1);
}
}
else {
ipmi_sunoem_usage();
return (-1);
} }
return rc; return rc;