From f1778e69af32858e403b363068f86e5871197fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Sun, 4 Sep 2005 15:25:59 +0000 Subject: [PATCH] Implement prompter. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16031 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/hx509/lock.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/hx509/lock.c b/lib/hx509/lock.c index d23044455..50b7d9681 100644 --- a/lib/hx509/lock.c +++ b/lib/hx509/lock.c @@ -33,11 +33,12 @@ #include "hx_locl.h" RCSID("$Id$"); +#include struct hx509_lock_data { struct _hx509_password password; hx509_certs certs; - hx509_prompter_fct *prompt; + hx509_prompter_fct prompt; void *prompt_data; }; @@ -147,7 +148,7 @@ _hx509_lock_find_cert(hx509_lock lock, const hx509_query *q, hx509_cert *c) } int -hx509_lock_set_prompter(hx509_lock lock, hx509_prompter_fct *prompt, void *data) +hx509_lock_set_prompter(hx509_lock lock, hx509_prompter_fct prompt, void *data) { lock->prompt = prompt; lock->prompt_data = data; @@ -164,7 +165,24 @@ hx509_lock_reset_promper(hx509_lock lock) static int default_prompter(void *data, const hx509_prompt *prompter) { - return 1; + if (prompter->hidden) { + if(UI_UTIL_read_pw_string(prompter->reply->data, + prompter->reply->length, + prompter->prompt, + 0)) + return 1; + } else { + char *s = prompter->reply->data; + + fputs (prompter->prompt, stdout); + fflush (stdout); + if(fgets(prompter->reply->data, + prompter->reply->length, + stdin) == NULL) + return 1; + s[strcspn(s, "\n")] = '\0'; + } + return 0; } int @@ -189,7 +207,7 @@ hx509_lock_command_string(hx509_lock lock, const char *string) { if (strncasecmp(string, "PASS:", 5) == 0) { hx509_lock_add_password(lock, string + 5); - } else if (strncasecmp(string, "PROMPT:", 8) == 0) { + } else if (strncasecmp(string, "PROMPT", 6) == 0) { hx509_lock_set_prompter(lock, default_prompter, NULL); } else return HX509_UNKNOWN_LOCK_COMMAND;