char *SEC_GetPassword(FILE *input, FILE *output, char *prompt, PRBool (*ok)(char *)) { #if defined(_WINDOWS) int isTTY = (input == stdin); #define echoOn(x) #define echoOff(x) #else int infd = fileno(input); int isTTY = isatty(infd); #endif char phrase[200] = {'\0'}; /* ensure EOF doesn't return junk */ for (;;) { /* Prompt for password */ if (isTTY) { fprintf(output, "%s", prompt); fflush (output); echoOff(infd); } QUIET_FGETS ( phrase, sizeof(phrase), input); if (isTTY) { fprintf(output, "\n"); echoOn(infd); } /* stomp on newline */ phrase[PORT_Strlen(phrase)-1] = 0; /* Validate password */ if (!(*ok)(phrase)) { /* Not weird enough */ if (!isTTY) return 0; fprintf(output, "Password must be at least 8 characters long with one or more\n"); fprintf(output, "non-alphabetic characters\n"); continue; } return (char*) PORT_Strdup(phrase); } }
char * GetPasswordString(void *arg, char *prompt) { FILE *input = stdin; char phrase[200] = {'\0'}; int isInputTerminal = isatty(fileno(stdin)); #ifndef _WINDOWS if (isInputTerminal) { input = fopen(consoleName, "r"); if (input == NULL) { fprintf(stderr, "Error opening input terminal for read\n"); return NULL; } } #endif if (isInputTerminal) { fprintf(stdout, "Please enter your password:\n"); fflush(stdout); } QUIET_FGETS (phrase, sizeof(phrase), input); if (isInputTerminal) { fprintf(stdout, "\n"); } #ifndef _WINDOWS if (isInputTerminal) { fclose(input); } #endif /* Strip off the newlines if present */ if (phrase[PORT_Strlen(phrase)-1] == '\n' || phrase[PORT_Strlen(phrase)-1] == '\r') { phrase[PORT_Strlen(phrase)-1] = 0; } return (char*) PORT_Strdup(phrase); }