/* Prompt for password without echoing the reply. Reply text is ** either NULL on error or a dynamic string which the caller must HT_FREE. */ PUBLIC BOOL HTPromptPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { if (reply && msgnum>=0) { #ifdef HAVE_GETPASS char * pw = (char *) getpass(HTDialogs[msgnum]); if (pw) HTAlert_setReplySecret(reply, pw); return YES; #else /* ** This is just to be able to get it wo work when getpass() ** isn't available. */ char buffer[100]; memset(buffer, '\0', 100); HTPrint("%s ", HTDialogs[msgnum]); if (!fgets(buffer, 99, stdin)) return NO; buffer[strlen(buffer)-1] = '\0'; /* Overwrite newline */ if (*buffer) { HTAlert_setReplySecret(reply, buffer); return YES; } return NO; #endif /* HAVE_GETPASS */ } return NO; }
PUBLIC BOOL UserNameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { CUserParameters UserParams(request, op, msgnum, dfault, input, reply); CPassword AskUserNameAndPassword( &UserParams ); if (AskUserNameAndPassword.DoModal() == IDOK) { HTAlert_setReplyMessage(reply, AskUserNameAndPassword.m_username); HTAlert_setReplySecret(reply, AskUserNameAndPassword.m_password); return YES; } return NO; }
PRIVATE BOOL PromptUsernameAndPassword (HTRequest * request, HTAlertOpcode op, int msgnum, const char * dfault, void * input, HTAlertPar * reply) { ComLine * cl = (ComLine *) HTRequest_context(request); char * realm = (char *) input; if (request && cl) { /* ** If we have a realm then check that it matches the realm ** that we got from the server. */ if (realm && cl->realm && !strcmp(cl->realm, realm)) { HTAlert_setReplyMessage(reply, cl->user ? cl->user : ""); HTAlert_setReplySecret(reply, cl->password ? cl->password : ""); return YES; } else { BOOL status = HTPrompt(request, op, msgnum, dfault, input, reply); return status ? HTPromptPassword(request, op, HT_MSG_PW, dfault, input, reply) : NO; } } return NO; }