ipmitool/ipmitool-1.8.12f-passarg.patch

87 lines
2.1 KiB
Diff

diff -up ./lib/ipmi_main.c.passarg ./lib/ipmi_main.c
--- ./lib/ipmi_main.c.passarg 2012-12-13 16:47:34.585182645 +0100
+++ ./lib/ipmi_main.c 2012-12-13 16:57:12.023739444 +0100
@@ -403,6 +403,7 @@ ipmi_main(int argc, char ** argv,
int argflag, i, found;
int rc = -1;
char sol_escape_char = SOL_ESCAPE_CHARACTER_DEFAULT;
+ int querrypass = 0;
/* save program name */
progname = strrchr(argv[0], '/');
@@ -501,6 +502,7 @@ ipmi_main(int argc, char ** argv,
}
break;
case 'f':
+ querrypass = 0;
if (password)
free(password);
password = ipmi_password_file_read(optarg);
@@ -509,22 +511,7 @@ ipmi_main(int argc, char ** argv,
"from file %s", optarg);
break;
case 'a':
- if (tmp)
- free(tmp);
-#ifdef HAVE_GETPASSPHRASE
- tmp = getpassphrase("Password: ");
-#else
- tmp = getpass("Password: ");
-#endif
- if (tmp != NULL) {
- if (password)
- free(password);
- password = strdup(tmp);
- if (password == NULL) {
- lprintf(LOG_ERR, "%s: malloc failure", progname);
- goto out_free;
- }
- }
+ querrypass = 1;
break;
case 'k':
if (kgkey)
@@ -623,6 +610,7 @@ ipmi_main(int argc, char ** argv,
oemtype = strdup("supermicro");
break;
case 'P':
+ querrypass = 0;
if (password)
free(password);
password = strdup(optarg);
@@ -636,6 +624,7 @@ ipmi_main(int argc, char ** argv,
memset(optarg, 'X', i);
break;
case 'E':
+ querrypass = 0;
if ((tmpe = getenv("IPMITOOL_PASSWORD"))) {
if (password)
free(password);
@@ -755,6 +744,26 @@ ipmi_main(int argc, char ** argv,
}
}
+ /* ask for password once and only if going to use it */
+ if (querrypass) {
+ if (tmp)
+ free(tmp);
+#ifdef HAVE_GETPASSPHRASE
+ tmp = getpassphrase("Password: ");
+#else
+ tmp = getpass("Password: ");
+#endif
+ if (tmp != NULL) {
+ if (password)
+ free(password);
+ password = strdup(tmp);
+ if (password == NULL) {
+ lprintf(LOG_ERR, "%s: malloc failure", progname);
+ goto out_free;
+ }
+ }
+ }
+
/* check for command before doing anything */
if (argc-optind > 0 &&
strncmp(argv[optind], "help", 4) == 0) {