From 43658eac6462232f0d9112fc9cddbf97456c05ca Mon Sep 17 00:00:00 2001 From: "Andrey A. Chernov" Date: Fri, 18 Oct 1996 17:09:26 +0000 Subject: [PATCH] Implement alternative strategy if it is impossible to confirm password: ask for it, but don't tell that S/key password required. It looks like non-s/key system from outside. Additionally tell that s/key required when it is so for normal case --- libexec/ftpd/extern.h | 2 +- libexec/ftpd/ftpd.c | 13 +------------ libexec/ftpd/skey-stuff.c | 16 +++++++--------- 3 files changed, 9 insertions(+), 22 deletions(-) diff --git a/libexec/ftpd/extern.h b/libexec/ftpd/extern.h index bdfed868d8bb..f5878664b4d3 100644 --- a/libexec/ftpd/extern.h +++ b/libexec/ftpd/extern.h @@ -68,5 +68,5 @@ void user __P((char *)); void yyerror __P((char *)); int yyparse __P((void)); #if defined(SKEY) && defined(_PWD_H_) /* XXX evil */ -char *skey_challenge __P((char *, struct passwd *, int, int *)); +char *skey_challenge __P((char *, struct passwd *, int)); #endif diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index 42f49b0ecfd1..2c698f3b4a11 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -182,7 +182,6 @@ char proctitle[LINE_MAX]; /* initial part of title */ #ifdef SKEY int pwok = 0; -int sflag; char addr_string[20]; /* XXX */ #endif @@ -628,17 +627,7 @@ user(name) strncpy(curname, name, sizeof(curname)-1); #ifdef SKEY pwok = skeyaccess(name, NULL, remotehost, addr_string); - cp = skey_challenge(name, pw, pwok, &sflag); - if (!pwok && sflag) { - reply(530, cp); - if (logging) - syslog(LOG_NOTICE, - "FTP LOGIN REFUSED FROM %s, %s", - remotehost, name); - pw = (struct passwd *) NULL; - return; - } - reply(331, cp); + reply(331, "%s", skey_challenge(name, pw, pwok)); #else reply(331, "Password required for %s.", name); #endif diff --git a/libexec/ftpd/skey-stuff.c b/libexec/ftpd/skey-stuff.c index 2fe3f56a7a60..98542e154ac5 100644 --- a/libexec/ftpd/skey-stuff.c +++ b/libexec/ftpd/skey-stuff.c @@ -1,6 +1,6 @@ /* Author: Wietse Venema, Eindhoven University of Technology. * - * $Id: skey-stuff.c,v 1.4 1996/10/17 17:06:04 ache Exp $ + * $Id: skey-stuff.c,v 1.3 1996/09/22 21:53:34 wosch Exp $ */ #include @@ -10,21 +10,19 @@ /* skey_challenge - additional password prompt stuff */ -char *skey_challenge(name, pwd, pwok, sflag) +char *skey_challenge(name, pwd, pwok) char *name; struct passwd *pwd; -int pwok; -int *sflag; +int pwok; { static char buf[128]; struct skey skey; - char *username = pwd ? pwd->pw_name : ":"; /* Display s/key challenge where appropriate. */ - *sflag = skeychallenge(&skey, username, buf); - if (*sflag) - sprintf(buf, "%s required for %s.", - pwok ? "Password" : "S/Key password", name); + if (pwd == NULL || skeychallenge(&skey, pwd->pw_name, buf)) + sprintf(buf, "Password required for %s.", name); + else if (!pwok) + strcat(buf, " (s/key required)"); return (buf); }