]> andersk Git - openssh.git/commitdiff
- (dtucker) [auth-passwd.c openbsd-compat/port-aix.c openbsd-compat/port-aix.h]
authordtucker <dtucker>
Sat, 22 Nov 2003 03:16:56 +0000 (03:16 +0000)
committerdtucker <dtucker>
Sat, 22 Nov 2003 03:16:56 +0000 (03:16 +0000)
   Move AIX specific password authentication code to port-aix.c, call
   authenticate() until reenter flag is clear.

ChangeLog
auth-passwd.c
openbsd-compat/port-aix.c
openbsd-compat/port-aix.h

index 030b603ae0e16ff9d0a493e88fa644f14fad94d9..4cce54758b109cc793437e12b00a8522d514a9e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 20031122
  - (dtucker) [channels.c] Make AIX write limit code clearer.  Suggested by djm@
+ - (dtucker) [auth-passwd.c openbsd-compat/port-aix.c openbsd-compat/port-aix.h]
+   Move AIX specific password authentication code to port-aix.c, call
+   authenticate() until reenter flag is clear.
 
 20031121
  - (djm) OpenBSD CVS Sync
index 54571f97254c2e4fef3ed8f73cdf129885a5563d..a27170cccb4bf76653af750782e25f698286b452 100644 (file)
@@ -43,9 +43,7 @@ RCSID("$OpenBSD: auth-passwd.c,v 1.30 2003/11/04 08:54:09 djm Exp $");
 #include "servconf.h"
 #include "auth.h"
 #ifdef WITH_AIXAUTHENTICATE
-# include "buffer.h"
 # include "canohost.h"
-extern Buffer loginmsg;
 #endif
 
 extern ServerOptions options;
@@ -89,44 +87,11 @@ auth_password(Authctxt *authctxt, const char *password)
        }
 # endif
 # ifdef WITH_AIXAUTHENTICATE
-       {
-               char *authmsg = NULL;
-               int reenter = 1;
-               int authsuccess = 0;
-
-               if (authenticate(pw->pw_name, password, &reenter,
-                   &authmsg) == 0 && ok) {
-                       char *msg;
-                       char *host =
-                           (char *)get_canonical_hostname(options.use_dns);
-
-                       authsuccess = 1;
-                       aix_remove_embedded_newlines(authmsg);
-
-                       debug3("AIX/authenticate succeeded for user %s: %.100s",
-                               pw->pw_name, authmsg);
-
-                       /* No pty yet, so just label the line as "ssh" */
-                       aix_setauthdb(authctxt->user);
-                       if (loginsuccess(authctxt->user, host, "ssh",
-                           &msg) == 0) {
-                               if (msg != NULL) {
-                                       debug("%s: msg %s", __func__, msg);
-                                       buffer_append(&loginmsg, msg,
-                                           strlen(msg));
-                                       xfree(msg);
-                               }
-                       }
-               } else {
-                       debug3("AIX/authenticate failed for user %s: %.100s",
-                           pw->pw_name, authmsg);
-               }
-
-               if (authmsg != NULL)
-                       xfree(authmsg);
-
-               return authsuccess;
-       }
+       if (aix_authenticate(pw->pw_name, password,
+           get_canonical_hostname(options.use_dns)) == 0)
+               return 0;
+       else
+               return ok;
 # endif
 # ifdef BSD_AUTH
        if (auth_userokay(pw->pw_name, authctxt->style, "auth-ssh",
index 9fbcce936d4d5af0a3099c35b27d7fb59a47d1c3..a9cbf49b0bb3618428055822c28987e61f3443cc 100644 (file)
@@ -29,6 +29,7 @@
 #include "servconf.h"
 #include "canohost.h"
 #include "xmalloc.h"
+#include "buffer.h"
 
 #ifdef _AIX
 
@@ -36,6 +37,7 @@
 #include "port-aix.h"
 
 extern ServerOptions options;
+extern Buffer loginmsg;
 
 /*
  * AIX has a "usrinfo" area where logname and other stuff is stored - 
@@ -63,7 +65,7 @@ aix_usrinfo(struct passwd *pw)
        xfree(cp);
 }
 
-#ifdef WITH_AIXAUTHENTICATE
+# ifdef WITH_AIXAUTHENTICATE
 /*
  * Remove embedded newlines in string (if any).
  * Used before logging messages returned by AIX authentication functions
@@ -83,27 +85,68 @@ aix_remove_embedded_newlines(char *p)
        if (*--p == ' ')
                *p = '\0';
 }
-#endif /* WITH_AIXAUTHENTICATE */
+
+/*
+ * Do authentication via AIX's authenticate routine.  We loop until the
+ * reenter parameter is 0, but normally authenticate is called only once.
+ *
+ * Note: this function returns 1 on success, whereas AIX's authenticate()
+ * returns 0.
+ */
+int
+aix_authenticate(const char *name, const char *password, const char *host)
+{
+       char *authmsg = NULL, *msg;
+       int authsuccess = 0, reenter, result;
+
+       do {
+               result = authenticate((char *)name, (char *)password, &reenter,
+                   &authmsg);
+               aix_remove_embedded_newlines(authmsg);  
+               debug3("AIX/authenticate result %d, msg %.100s", result,
+                   authmsg);
+       } while (reenter);
+
+       if (result == 0) {
+               authsuccess = 1;
+
+               /* No pty yet, so just label the line as "ssh" */
+               aix_setauthdb(name);
+               if (loginsuccess((char *)name, (char *)host, "ssh", &msg) == 0) {
+                       if (msg != NULL) {
+                               debug("%s: msg %s", __func__, msg);
+                               buffer_append(&loginmsg, msg, strlen(msg));
+                               xfree(msg);
+                       }
+               }
+       }
+
+       if (authmsg != NULL)
+               xfree(authmsg);
+
+       return authsuccess;
+}
   
-# ifdef CUSTOM_FAILED_LOGIN
+#  ifdef CUSTOM_FAILED_LOGIN
 /*
  * record_failed_login: generic "login failed" interface function
  */
 void
 record_failed_login(const char *user, const char *ttyname)
 {
-       char *hostname = get_canonical_hostname(options.use_dns);
+       char *hostname = (char *)get_canonical_hostname(options.use_dns);
 
        if (geteuid() != 0)
                return;
 
        aix_setauthdb(user);
-#  ifdef AIX_LOGINFAILED_4ARG
+#   ifdef AIX_LOGINFAILED_4ARG
        loginfailed((char *)user, hostname, (char *)ttyname, AUDIT_FAIL_AUTH);
-#  else
+#   else
        loginfailed((char *)user, hostname, (char *)ttyname);
-#  endif
+#   endif
 }
+#  endif /* CUSTOM_FAILED_LOGIN */
 
 /*
  * If we have setauthdb, retrieve the password registry for the user's
@@ -135,8 +178,9 @@ aix_setauthdb(const char *user)
                debug3("%s: Could not read S_REGISTRY for user: %s", __func__,
                    strerror(errno));
        enduserdb();
-#  endif
+#  endif /* HAVE_SETAUTHDB */
 }
-# endif /* CUSTOM_FAILED_LOGIN */
-#endif /* _AIX */
 
+# endif /* WITH_AIXAUTHENTICATE */
+
+#endif /* _AIX */
index 8a95816db123411c555c6637f50379d5d297a1c5..8c8e1fbffa2fc6c2d9787feb073a0ff63fb80190 100644 (file)
 # include <sys/timers.h>
 #endif
 
+void aix_usrinfo(struct passwd *);
+
 #ifdef WITH_AIXAUTHENTICATE
 # define CUSTOM_FAILED_LOGIN 1
 void record_failed_login(const char *, const char *);
-void aix_setauthdb(const char *);
 #endif
 
-void aix_usrinfo(struct passwd *);
+int aix_authenticate(const char *, const char *, const char *);
+void aix_setauthdb(const char *);
 void aix_remove_embedded_newlines(char *);
 #endif /* _AIX */
This page took 0.0952499999999999 seconds and 5 git commands to generate.