#ifdef __svr4__
#include <shadow.h>
#endif /* __svr4__ */
-
+#if defined(__convex__) && defined(HAVE_C2_SECURITY)
+#include <sys/security.h>
+#include <prot.h>
+#endif /* __convex__ && HAVE_C2_SECURITY */
/*
#ifdef __svr4__
struct spwd *spw_ent;
#endif /* __svr4__ */
-#if defined (hpux) && defined(HAVE_C2_SECURITY)
+#if defined (__hpux) && defined(HAVE_C2_SECURITY)
struct s_passwd *spw_ent;
-#endif /* hpux && HAVE_C2_SECURITY */
+#endif /* __hpux && HAVE_C2_SECURITY */
+#if defined (__convex__) && defined(HAVE_C2_SECURITY)
+ char salt[2]; /* Need the salt to perform the encryption */
+ register int i;
+ struct pr_passwd *secure_pw_ent;
+#endif /* __convex__ && HAVE_C2_SECURITY */
char *encrypted; /* this comes from /etc/passwd */
char *pass; /* this is what gets entered */
register int counter = TRIES_FOR_PASSWORD;
/* some os's need to be root to get at shadow password */
be_root();
-#if defined (hpux) && defined(HAVE_C2_SECURITY)
+#if defined (__hpux) && defined(HAVE_C2_SECURITY)
spw_ent = getspwuid(uid);
-#endif /* hpux && HAVE_C2_SECURITY */
+#endif /* __hpux && HAVE_C2_SECURITY */
pw_ent = getpwuid(uid);
be_user();
if (pw_ent == NULL) {
}
encrypted = spw_ent -> sp_pwdp;
#else
-#if defined (hpux) && defined(HAVE_C2_SECURITY)
+#if defined (__convex__) && defined(HAVE_C2_SECURITY)
+ be_root();
+ secure_pw_ent = getprpwnam(pw_ent->pw_name);
+ be_user();
+ if (secure_pw_ent == (struct pr_passwd *)NULL) {
+ (void) sprintf(user, "%u", uid);
+ log_error(GLOBAL_NO_AUTH_ENT);
+ inform_user(GLOBAL_NO_AUTH_ENT);
+ exit(1);
+ }
+ encrypted = secure_pw_ent->ufld.fd_encrypt;
+#endif /* __convex__ && HAVE_C2_SECURITY */
+#if defined (__hpux) && defined(HAVE_C2_SECURITY)
if (spw_ent && spw_ent -> pw_passwd)
encrypted = spw_ent -> pw_passwd;
else
-#endif /* hpux && HAVE_C2_SECURITY */
+#endif /* __hpux && HAVE_C2_SECURITY */
encrypted = pw_ent -> pw_passwd;
#endif /* __svr4__ */
#endif /* USE_GETPASS */
if (!pass || *pass == '\0')
exit(0);
+#if defined (__convex__) && defined(HAVE_C2_SECURITY)
+ strncpy(salt, secure_pw_ent->ufld.fd_encrypt, 2);
+ i = AUTH_SALT_SIZE + AUTH_CIPHERTEXT_SEG_CHARS;
+ if (strncmp(encrypted, crypt(pass, salt), i) == 0)
+ return; /* if the passwd is correct return() */
+#else
if (!strcmp(encrypted, (char *) crypt(pass, encrypted)))
return; /* if the passwd is correct return() */
+#endif /* __convex__ && HAVE_C2_SECURITY */
--counter; /* otherwise, try again */
#ifdef USE_INSULTS
(void) fprintf(stderr, "%s\n", INSULT);