#include <config.h>
#include <sys/types.h>
#include <sys/param.h>
#include <stdio.h>
#ifdef STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# ifdef HAVE_STDLIB_H
# include <stdlib.h>
# endif
#endif
#ifdef HAVE_STRING_H
# include <string.h>
#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <pwd.h>
#ifdef __hpux
# undef MAXINT
# include <hpsecurity.h>
#else
# include <sys/security.h>
#endif
#include <prot.h>
#include "sudo.h"
#include "sudo_auth.h"
int
secureware_init(pw, auth)
struct passwd *pw;
sudo_auth *auth;
{
#ifdef __alpha
extern int crypt_type;
if (crypt_type == INT_MAX)
return AUTH_FAILURE;
#endif
sudo_setspent();
auth->data = sudo_getepw(pw);
sudo_endspent();
return AUTH_SUCCESS;
}
int
secureware_verify(pw, pass, auth)
struct passwd *pw;
char *pass;
sudo_auth *auth;
{
char *pw_epasswd = auth->data;
#ifdef __alpha
extern int crypt_type;
# ifdef HAVE_DISPCRYPT
if (strcmp(pw_epasswd, dispcrypt(pass, pw_epasswd, crypt_type)) == 0)
return AUTH_SUCCESS;
# else
if (crypt_type == AUTH_CRYPT_BIGCRYPT) {
if (strcmp(pw_epasswd, bigcrypt(pass, pw_epasswd)) == 0)
return AUTH_SUCCESS;
} else if (crypt_type == AUTH_CRYPT_CRYPT16) {
if (strcmp(pw_epasswd, crypt(pass, pw_epasswd)) == 0)
return AUTH_SUCCESS;
}
# endif
#elif defined(HAVE_BIGCRYPT)
if (strcmp(pw_epasswd, bigcrypt(pass, pw_epasswd)) == 0)
return AUTH_SUCCESS;
#endif
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;
}