| diff --git a/src/tpm_mgmt/tpm_clear.c b/src/tpm_mgmt/tpm_clear.c |
| index c7b286f..6549a67 100644 |
| --- a/src/tpm_mgmt/tpm_clear.c |
| +++ b/src/tpm_mgmt/tpm_clear.c |
| @@ -25,6 +25,7 @@ |
| //Controled by input options |
| static BOOL bValue = FALSE; //If true FORCE CLEAR |
| static BOOL isWellKnown = FALSE; |
| +static char *szTpmPasswd = NULL; |
| TSS_HCONTEXT hContext = 0; |
| |
| static inline TSS_RESULT tpmClearOwner(TSS_HTPM a_hTpm, BOOL a_bValue) |
| @@ -42,6 +43,7 @@ static void help(const char *aCmd) |
| logCmdHelp(aCmd); |
| logUnicodeCmdOption(); |
| logCmdOption("-f, --force", _("Use physical presence authorization.")); |
| + logCmdOption("-p, --password", _("TPM authorization data.")); |
| logCmdOption("-z, --well-known", |
| _("Use 20 bytes of zeros (TSS_WELL_KNOWN_SECRET) as the TPM secret authorization data")); |
| } |
| @@ -54,6 +56,10 @@ static int parse(const int aOpt, const char *aArg) |
| logDebug(_("Changing mode to use force authorization\n")); |
| bValue = TRUE; |
| break; |
| + case 'p': |
| + logDebug(_("Setting password\n")); |
| + szTpmPasswd = strdup(aArg); |
| + break; |
| case 'z': |
| logDebug(_("Using TSS_WELL_KNOWN_SECRET to authorize the TPM command\n")); |
| isWellKnown = TRUE; |
| @@ -68,13 +74,13 @@ static int parse(const int aOpt, const char *aArg) |
| int main(int argc, char **argv) |
| { |
| |
| - char *szTpmPasswd = NULL; |
| int pswd_len; |
| TSS_HTPM hTpm; |
| TSS_HPOLICY hTpmPolicy; |
| int iRc = -1; |
| struct option opts[] = { |
| {"force", no_argument, NULL, 'f'}, |
| + {"pass", required_argument, NULL, 'p'}, |
| {"well-known", no_argument, NULL, 'z'}, |
| }; |
| BYTE well_known[] = TSS_WELL_KNOWN_SECRET; |
| @@ -82,7 +88,7 @@ int main(int argc, char **argv) |
| initIntlSys(); |
| |
| if (genericOptHandler |
| - (argc, argv, "fz", opts, sizeof(opts) / sizeof(struct option), |
| + (argc, argv, "fpz", opts, sizeof(opts) / sizeof(struct option), |
| parse, help) != 0) |
| goto out; |
| |
| @@ -99,12 +105,14 @@ int main(int argc, char **argv) |
| if (isWellKnown){ |
| szTpmPasswd = (char *)well_known; |
| pswd_len = sizeof(well_known); |
| - }else{ |
| + }else if (!szTpmPasswd){ |
| szTpmPasswd = GETPASSWD(_("Enter owner password: "), &pswd_len, FALSE); |
| if (!szTpmPasswd) { |
| logMsg(_("Failed to get password\n")); |
| goto out_close; |
| } |
| + }else{ |
| + pswd_len = strlen(szTpmPasswd); |
| } |
| |
| if (policyGet(hTpm, &hTpmPolicy) != TSS_SUCCESS) |