/*
- * Copyright (c) 1998-2005 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 1998-2005, 2010 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
#endif /* STDC_HEADERS */
#ifdef HAVE_STRING_H
# include <string.h>
-#else
-# ifdef HAVE_STRINGS_H
-# include <strings.h>
-# endif
#endif /* HAVE_STRING_H */
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif /* HAVE_STRINGS_H */
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif /* HAVE_UNISTD_H */
#include "sudo.h"
#include "sudo_auth.h"
-#ifndef lint
-__unused static const char rcsid[] = "$Sudo: secureware.c,v 1.10.2.2 2007/06/12 01:28:42 millert Exp $";
-#endif /* lint */
-
int
secureware_init(pw, promptp, auth)
struct passwd *pw;
extern int crypt_type;
if (crypt_type == INT_MAX)
- return(AUTH_FAILURE); /* no shadow */
+ return AUTH_FAILURE; /* no shadow */
#endif
- return(AUTH_SUCCESS);
+ sudo_setspent();
+ auth->data = sudo_getepw(pw);
+ sudo_endspent();
+ return AUTH_SUCCESS;
}
int
char *pass;
sudo_auth *auth;
{
+ char *pw_epasswd = auth->data;
#ifdef __alpha
extern int crypt_type;
# ifdef HAVE_DISPCRYPT
- if (strcmp(user_passwd, dispcrypt(pass, user_passwd, crypt_type)) == 0)
- return(AUTH_SUCCESS);
+ if (strcmp(pw_epasswd, dispcrypt(pass, pw_epasswd, crypt_type)) == 0)
+ return AUTH_SUCCESS;
# else
if (crypt_type == AUTH_CRYPT_BIGCRYPT) {
- if (strcmp(user_passwd, bigcrypt(pass, user_passwd)) == 0)
- return(AUTH_SUCCESS);
+ if (strcmp(pw_epasswd, bigcrypt(pass, pw_epasswd)) == 0)
+ return AUTH_SUCCESS;
} else if (crypt_type == AUTH_CRYPT_CRYPT16) {
- if (strcmp(user_passwd, crypt(pass, user_passwd)) == 0)
- return(AUTH_SUCCESS);
+ if (strcmp(pw_epasswd, crypt(pass, pw_epasswd)) == 0)
+ return AUTH_SUCCESS;
}
# endif /* HAVE_DISPCRYPT */
#elif defined(HAVE_BIGCRYPT)
- if (strcmp(user_passwd, bigcrypt(pass, user_passwd)) == 0)
- return(AUTH_SUCCESS);
+ if (strcmp(pw_epasswd, bigcrypt(pass, pw_epasswd)) == 0)
+ return AUTH_SUCCESS;
#endif /* __alpha */
- return(AUTH_FAILURE);
+ return AUTH_FAILURE;
+}
+
+int
+secureware_cleanup(pw, auth)
+ struct passwd *pw;
+ sudo_auth *auth;
+{
+ char *pw_epasswd = auth->data;
+
+ if (pw_epasswd != NULL) {
+ zero_bytes(pw_epasswd, strlen(pw_epasswd));
+ efree(pw_epasswd);
+ }
+ return AUTH_SUCCESS;
}