diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index 0bbbf5f0b..e6b486801 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -848,6 +848,14 @@ BOOL xf_verify_certificate(freerdp* instance, char* subject, char* issuer, char* { printf("Do you trust the above certificate? (Y/N) "); answer = fgetc(stdin); + if (feof(stdin)) + { + printf("\nError: Could not read answer from stdin."); + if (instance->settings->from_stdin) + printf(" - Run without parameter \"--from-stdin\" to set trust."); + printf("\n"); + return FALSE; + } if (answer == 'y' || answer == 'Y') { diff --git a/libfreerdp/utils/args.c b/libfreerdp/utils/args.c index 1908d7184..86dea02c9 100644 --- a/libfreerdp/utils/args.c +++ b/libfreerdp/utils/args.c @@ -869,58 +869,79 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, You can prompt for username, password, domain and hostname to avoid disclosing these settings to ps. */ - if (settings->from_stdin) { + if (settings->from_stdin) + { /* username */ - if (NULL == settings->username) { + if (NULL == settings->username) + { char input[512]; input[0] = '\0'; printf("username: "); - if (scanf("%511s", input) > 0) { + if (scanf("%511s%*c", input) > 0) + { settings->username = _strdup(input); } } /* password */ - if (NULL == settings->password) { + if (NULL == settings->password) + { settings->password = malloc(512 * sizeof(char)); if (isatty(STDIN_FILENO)) + { freerdp_passphrase_read("password: ", settings->password, 512, settings->from_stdin); - else { + } + else + { printf("password: "); - if (scanf("%511s", settings->password) <= 0) { + if (scanf("%511s%*c", settings->password) <= 0) + { free(settings->password); settings->password = NULL; } } } /* domain */ - if (NULL == settings->domain) { + if (NULL == settings->domain) + { char input[512]; input[0] = '\0'; printf("domain (control-D to skip): "); - if (scanf("%511s", input) > 0) { + if (scanf("%511s%*c", input) > 0) + { /* Try to catch the cases where the string is NULL-ish right at the get go */ - if (input[0] != '\0' && !(input[0] == '.' && input[1] == '\0')) { + if (input[0] != '\0' && !(input[0] == '.' && input[1] == '\0')) + { settings->domain = _strdup(input); } } + if (feof(stdin)) + { + printf("\n"); + clearerr(stdin); + } } /* hostname */ - if (NULL == settings->hostname) { + if (NULL == settings->hostname) + { char input[512]; input[0] = '\0'; printf("hostname: "); - if (scanf("%511s", input) > 0) { + if (scanf("%511s%*c", input) > 0) + { freerdp_parse_hostname(settings, input); } } } /* Must have a hostname. Do you? */ - if (NULL == settings->hostname) { + if (NULL == settings->hostname) + { printf("missing server name\n"); return FREERDP_ARGS_PARSE_FAILURE; - } else { + } + else + { return index; }