blob: 1bad4253cdf7d70614b4f16bbd020b659e8c0c19 [file] [log] [blame]
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)