mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
Split ipmi_user_main() into smaller functions
Commit splits ipmi_user_main() into smaller functions. Hopefully, this will be better than giant main() function.
This commit is contained in:
parent
f8ce85ee6c
commit
4d3decc4c0
194
lib/ipmi_user.c
194
lib/ipmi_user.c
@ -509,26 +509,9 @@ ipmi_user_build_password_prompt(uint8_t user_id)
|
|||||||
return prompt;
|
return prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ipmi_user_main
|
|
||||||
*
|
|
||||||
* Upon entry to this function argv should contain our arguments
|
|
||||||
* specific to this subcommand
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
ipmi_user_summary(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
{
|
{
|
||||||
int retval = 0;
|
|
||||||
if (argc == 0) {
|
|
||||||
lprintf(LOG_ERR, "Not enough parameters given.");
|
|
||||||
print_user_usage();
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (strncmp(argv[0], "help", 4) == 0) {
|
|
||||||
/* Help */
|
|
||||||
print_user_usage();
|
|
||||||
} else if (strncmp(argv[0], "summary", 7) == 0) {
|
|
||||||
/* Summary*/
|
/* Summary*/
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
@ -542,8 +525,12 @@ ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
|||||||
print_user_usage();
|
print_user_usage();
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
retval = ipmi_print_user_summary(intf, channel);
|
return ipmi_print_user_summary(intf, channel);
|
||||||
} else if (strncmp(argv[0], "list", 4) == 0) {
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipmi_user_list(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
/* List */
|
/* List */
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
@ -557,9 +544,14 @@ ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
|||||||
print_user_usage();
|
print_user_usage();
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
retval = ipmi_print_user_list(intf, channel);
|
return ipmi_print_user_list(intf, channel);
|
||||||
} else if (strncmp(argv[0], "test", 4) == 0) {
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipmi_user_test(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
/* Test */
|
/* Test */
|
||||||
|
int retval = 0;
|
||||||
char *password = NULL;
|
char *password = NULL;
|
||||||
int password_length = 0;
|
int password_length = 0;
|
||||||
uint8_t user_id = 0;
|
uint8_t user_id = 0;
|
||||||
@ -608,11 +600,66 @@ ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
|||||||
free(password);
|
free(password);
|
||||||
password = NULL;
|
password = NULL;
|
||||||
}
|
}
|
||||||
} else if (strncmp(argv[0], "set", 3) == 0) {
|
return retval;
|
||||||
/* Set */
|
}
|
||||||
if ((argc >= 3)
|
|
||||||
&& (strncmp("password", argv[1], 8) == 0)) {
|
int
|
||||||
|
ipmi_user_priv(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
|
uint8_t user_id;
|
||||||
|
uint8_t priv_level;
|
||||||
|
uint8_t channel = 0x0e; /* Use channel running on */
|
||||||
|
|
||||||
|
if (argc != 3 && argc != 4) {
|
||||||
|
print_user_usage();
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (argc == 4) {
|
||||||
|
if (str2uchar(argv[3], &channel) != 0) {
|
||||||
|
lprintf(LOG_ERR, "Invalid channel: %s", argv[3]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
channel = (channel & 0x0f);
|
||||||
|
}
|
||||||
|
if (str2uchar(argv[2], &priv_level) != 0) {
|
||||||
|
lprintf(LOG_ERR, "Invalid privilege level: %s", argv[2]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (is_ipmi_user_id(argv[1], &user_id)) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
priv_level = (priv_level & 0x0f);
|
||||||
|
return ipmi_user_set_userpriv(intf,channel,user_id,priv_level);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipmi_user_mod(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
|
/* Disable / Enable */
|
||||||
|
uint8_t user_id;
|
||||||
|
uint8_t operation;
|
||||||
|
char null_password[16]; /* Not used, but required */
|
||||||
|
|
||||||
|
if (argc != 2) {
|
||||||
|
print_user_usage();
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (is_ipmi_user_id(argv[1], &user_id)) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
memset(null_password, 0, sizeof(null_password));
|
||||||
|
operation = (strncmp(argv[0], "disable", 7) == 0) ?
|
||||||
|
IPMI_PASSWORD_DISABLE_USER : IPMI_PASSWORD_ENABLE_USER;
|
||||||
|
|
||||||
|
/* Last parameter is ignored */
|
||||||
|
return ipmi_user_set_password(intf, user_id, operation, null_password, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipmi_user_password(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
char *password = NULL;
|
char *password = NULL;
|
||||||
|
int retval = 0;
|
||||||
uint8_t user_id = 0;
|
uint8_t user_id = 0;
|
||||||
if (is_ipmi_user_id(argv[2], &user_id)) {
|
if (is_ipmi_user_id(argv[2], &user_id)) {
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -674,8 +721,12 @@ ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
|||||||
free(password);
|
free(password);
|
||||||
password = NULL;
|
password = NULL;
|
||||||
}
|
}
|
||||||
} else if ((argc >= 2)
|
return retval;
|
||||||
&& (strncmp("name", argv[1], 4) == 0)) {
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipmi_user_name(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
/* Set Name */
|
/* Set Name */
|
||||||
uint8_t user_id = 0;
|
uint8_t user_id = 0;
|
||||||
if (argc != 4) {
|
if (argc != 4) {
|
||||||
@ -685,69 +736,58 @@ ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
|||||||
if (is_ipmi_user_id(argv[2], &user_id)) {
|
if (is_ipmi_user_id(argv[2], &user_id)) {
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(argv[3]) > 16) {
|
if (strlen(argv[3]) > 16) {
|
||||||
lprintf(LOG_ERR, "Username is too long (> 16 bytes)");
|
lprintf(LOG_ERR, "Username is too long (> 16 bytes)");
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = ipmi_user_set_username(intf, user_id, argv[3]);
|
return ipmi_user_set_username(intf, user_id, argv[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ipmi_user_main
|
||||||
|
*
|
||||||
|
* Upon entry to this function argv should contain our arguments
|
||||||
|
* specific to this subcommand
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
ipmi_user_main(struct ipmi_intf *intf, int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (argc == 0) {
|
||||||
|
lprintf(LOG_ERR, "Not enough parameters given.");
|
||||||
|
print_user_usage();
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (strncmp(argv[0], "help", 4) == 0) {
|
||||||
|
/* Help */
|
||||||
|
print_user_usage();
|
||||||
|
return 0;
|
||||||
|
} else if (strncmp(argv[0], "summary", 7) == 0) {
|
||||||
|
return ipmi_user_summary(intf, argc, argv);
|
||||||
|
} else if (strncmp(argv[0], "list", 4) == 0) {
|
||||||
|
return ipmi_user_list(intf, argc, argv);
|
||||||
|
} else if (strncmp(argv[0], "test", 4) == 0) {
|
||||||
|
return ipmi_user_test(intf, argc, argv);
|
||||||
|
} else if (strncmp(argv[0], "set", 3) == 0) {
|
||||||
|
/* Set */
|
||||||
|
if ((argc >= 3)
|
||||||
|
&& (strncmp("password", argv[1], 8) == 0)) {
|
||||||
|
return ipmi_user_password(intf, argc, argv);
|
||||||
|
} else if ((argc >= 2)
|
||||||
|
&& (strncmp("name", argv[1], 4) == 0)) {
|
||||||
|
return ipmi_user_name(intf, argc, argv);
|
||||||
} else {
|
} else {
|
||||||
print_user_usage();
|
print_user_usage();
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
} else if (strncmp(argv[0], "priv", 4) == 0) {
|
} else if (strncmp(argv[0], "priv", 4) == 0) {
|
||||||
uint8_t user_id;
|
return ipmi_user_priv(intf, argc, argv);
|
||||||
uint8_t priv_level;
|
|
||||||
uint8_t channel = 0x0e; /* Use channel running on */
|
|
||||||
|
|
||||||
if (argc != 3 && argc != 4) {
|
|
||||||
print_user_usage();
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (argc == 4) {
|
|
||||||
if (str2uchar(argv[3], &channel) != 0) {
|
|
||||||
lprintf(LOG_ERR, "Invalid channel: %s", argv[3]);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
channel = (channel & 0x0f);
|
|
||||||
}
|
|
||||||
if (str2uchar(argv[2], &priv_level) != 0) {
|
|
||||||
lprintf(LOG_ERR, "Invalid privilege level: %s", argv[2]);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (is_ipmi_user_id(argv[1], &user_id)) {
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
priv_level = (priv_level & 0x0f);
|
|
||||||
retval = ipmi_user_set_userpriv(intf,channel,user_id,priv_level);
|
|
||||||
} else if ((strncmp(argv[0], "disable", 7) == 0)
|
} else if ((strncmp(argv[0], "disable", 7) == 0)
|
||||||
|| (strncmp(argv[0], "enable", 6) == 0)) {
|
|| (strncmp(argv[0], "enable", 6) == 0)) {
|
||||||
/* Disable / Enable */
|
return ipmi_user_mod(intf, argc, argv);
|
||||||
uint8_t user_id;
|
|
||||||
uint8_t operation;
|
|
||||||
char null_password[16]; /* Not used, but required */
|
|
||||||
|
|
||||||
if (argc != 2) {
|
|
||||||
print_user_usage();
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (is_ipmi_user_id(argv[1], &user_id)) {
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
memset(null_password, 0, sizeof(null_password));
|
|
||||||
operation = (strncmp(argv[0], "disable", 7) == 0) ?
|
|
||||||
IPMI_PASSWORD_DISABLE_USER : IPMI_PASSWORD_ENABLE_USER;
|
|
||||||
|
|
||||||
retval = ipmi_user_set_password(intf,
|
|
||||||
user_id,
|
|
||||||
operation,
|
|
||||||
null_password,
|
|
||||||
0); /* This field is ignored */
|
|
||||||
} else {
|
} else {
|
||||||
retval = (-1);
|
|
||||||
lprintf(LOG_ERR, "Invalid user command: '%s'\n", argv[0]);
|
lprintf(LOG_ERR, "Invalid user command: '%s'\n", argv[0]);
|
||||||
print_user_usage();
|
print_user_usage();
|
||||||
|
return (-1);
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user