[client,common] unified credential hiding

* Unify command line credential string replace in a single function
* Extend the string replace, add all options containing a token or
  a password
This commit is contained in:
Armin Novak 2023-02-01 11:20:21 +01:00 committed by akallabeth
parent 9d8954f56a
commit 923b068382

View File

@ -2565,6 +2565,51 @@ fail:
return rc;
}
static void fill_credential_string(COMMAND_LINE_ARGUMENT_A* args, const char* value)
{
WINPR_ASSERT(args);
WINPR_ASSERT(value);
COMMAND_LINE_ARGUMENT_A* arg = CommandLineFindArgumentA(args, value);
if (!arg)
return;
if (arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT)
FillMemory(arg->Value, strlen(arg->Value), '*');
}
static void fill_credential_strings(COMMAND_LINE_ARGUMENT_A* args)
{
const char* credentials[] = { "p", "smartcard-logon", "gp", "gat",
"pth", "reconnect-cookie", "assistance" };
for (size_t x = 0; x < ARRAYSIZE(credentials); x++)
{
const char* cred = credentials[x];
fill_credential_string(args, cred);
}
COMMAND_LINE_ARGUMENT_A* arg = CommandLineFindArgumentA(args, "gateway");
if (arg && ((arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT) != 0))
{
const char* gwcreds[] = { "p:", "access-token:" };
char* tok = strtok(arg->Value, ",");
while (tok)
{
for (size_t x = 0; x < ARRAYSIZE(gwcreds); x++)
{
const char* opt = gwcreds[x];
if (option_starts_with(opt, tok))
{
char* val = &tok[strlen(opt)];
FillMemory(val, strlen(val), '*');
}
}
tok = strtok(NULL, ",");
}
}
}
int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, int argc,
char** argv, BOOL allowUnknown)
{
@ -4310,24 +4355,7 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings,
settings->ServerPort = (UINT32)val;
}
arg = CommandLineFindArgumentA(largs, "p");
if (arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT)
{
FillMemory(arg->Value, strlen(arg->Value), '*');
}
arg = CommandLineFindArgumentA(largs, "smartcard-logon");
if (arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT)
{
if (arg->Flags & COMMAND_LINE_VALUE_PRESENT)
FillMemory(arg->Value, strlen(arg->Value), '*');
}
arg = CommandLineFindArgumentA(largs, "gp");
if (arg->Flags & COMMAND_LINE_ARGUMENT_PRESENT)
{
FillMemory(arg->Value, strlen(arg->Value), '*');
}
fill_credential_strings(largs);
return status;
}