diff options
author | pst <pst@FreeBSD.org> | 1994-10-19 00:14:32 +0000 |
---|---|---|
committer | pst <pst@FreeBSD.org> | 1994-10-19 00:14:32 +0000 |
commit | 7d6e5770c7a42379fb8e938455a18b68a65d84b3 (patch) | |
tree | 1ae0404a30c16c2168f89f9f9791df58e3d3357a /lib | |
parent | a538461f0dc52332e0aab506710b7a1a1001b96d (diff) | |
download | FreeBSD-src-7d6e5770c7a42379fb8e938455a18b68a65d84b3.zip FreeBSD-src-7d6e5770c7a42379fb8e938455a18b68a65d84b3.tar.gz |
new file does skey_getpass() support
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libskey/skey_getpass.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/libskey/skey_getpass.c b/lib/libskey/skey_getpass.c new file mode 100644 index 0000000..1608355 --- /dev/null +++ b/lib/libskey/skey_getpass.c @@ -0,0 +1,40 @@ +#include <unistd.h> +#include <stdio.h> +#include <skey.h> + +/* skey_getpass - read regular or s/key password */ + +char *skey_getpass(prompt, pwd, pwok) +char *prompt; +struct passwd *pwd; +int pwok; +{ + static char buf[128]; + struct skey skey; + char *pass; + char *username = pwd ? pwd->pw_name : "nope"; + int sflag; + + /* Attempt an s/key challenge. */ + sflag = skeychallenge(&skey, username, buf); + if (!sflag) + printf("%s\n", buf); + + if (!pwok) + printf("(s/key required)\n"); + + pass = getpass(prompt); + + /* Give S/Key users a chance to do it with echo on. */ + if (!sflag && !feof(stdin) && *pass == '\0') { + fputs(" (turning echo on)\n", stdout); + fputs(prompt, stdout); + fflush(stdout); + fgets(buf, sizeof(buf), stdin); + rip(buf); + return (buf); + } + + putchar('\n'); + return (pass); +} |