diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-04-07 17:59:45 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-04-07 17:59:45 +0000 |
commit | afa326ab45005de9034136f8919c1e595ef3d6b2 (patch) | |
tree | 145915f7ff3642176dfce65984512c743d788ba9 | |
parent | 53cd478f5cb1b8d3118a7c01d9e65be15d14053e (diff) | |
download | pam-modules-afa326ab45005de9034136f8919c1e595ef3d6b2.tar.gz pam-modules-afa326ab45005de9034136f8919c1e595ef3d6b2.tar.bz2 |
Minor changes
* pamck/conv.c (pamck_conv): Fix handling of PAM_PROMPT_ECHO_ON.
* pamck/pamck.c: Minor changes.
* pam_sql/pam_sql.c (_pam_get_password): Fix condition.
git-svn-id: file:///svnroot/pam-modules/trunk@108 56984be4-0537-0410-a56c-fcb268c96130
-rw-r--r-- | pam_sql/pam_sql.c | 2 | ||||
-rw-r--r-- | pamck/conv.c | 16 | ||||
-rw-r--r-- | pamck/pamck.c | 11 |
3 files changed, 18 insertions, 11 deletions
diff --git a/pam_sql/pam_sql.c b/pam_sql/pam_sql.c index 7c98c9d..a8cac2a 100644 --- a/pam_sql/pam_sql.c +++ b/pam_sql/pam_sql.c @@ -96,7 +96,7 @@ _pam_get_password(pam_handle_t *pamh, char **password, const char *prompt) token = NULL; retval = gray_converse(pamh, i, pmsg, &resp); - if (resp != NULL) { + if (resp != NULL && resp[i - replies].resp) { if (retval == PAM_SUCCESS) { /* a good conversation */ token = XSTRDUP(resp[i - replies].resp); DEBUG(100,("app returned [%s]", token)); diff --git a/pamck/conv.c b/pamck/conv.c index 5ea3913..e5cef46 100644 --- a/pamck/conv.c +++ b/pamck/conv.c @@ -92,7 +92,8 @@ read_string(const char *prompt, int echo) fputs(prompt, out); fflush(out); str = readline(in); - fputc('\n', out); + if (!echo) + fputc('\n', out); fseek(out, 0, SEEK_CUR); @@ -123,14 +124,17 @@ pamck_conv(int num_msg, const struct pam_message **msg, switch (msg[i]->msg_style) { case PAM_PROMPT_ECHO_OFF: - str = read_string(msg[i]->msg, 0); - break; - - case PAM_PROMPT_ECHO_ON: if (pass) str = strdup(pass); else - str = pass = read_string(msg[i]->msg, 1); + str = read_string(msg[i]->msg, 0); + break; + + case PAM_PROMPT_ECHO_ON: + if (user) + str = strdup(user); + else + str = read_string(msg[i]->msg, 1); break; case PAM_ERROR_MSG: diff --git a/pamck/pamck.c b/pamck/pamck.c index ff6be5a..1c90c04 100644 --- a/pamck/pamck.c +++ b/pamck/pamck.c @@ -185,14 +185,17 @@ main (int argc, char **argv) argc -= optind; argv += optind; - if (!argc || argc > 3) { + switch (argc) { + case 2: + pass = argv[1]; + case 1: + user = argv[0]; + break; + default: usage(); exit(1); } - user = argv[0]; - pass = argv[1]; - rc = pam_start(service, user, &conv, &pamh); if (rc) error(2, "pam_start failed"); |