--- embedaddon/sudo/plugins/sudoers/auth/secureware.c 2012/02/21 16:23:02 1.1 +++ embedaddon/sudo/plugins/sudoers/auth/secureware.c 2014/06/15 16:12:54 1.1.1.5 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2005, 2010-2011 Todd C. Miller + * Copyright (c) 1998-2005, 2010-2013 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -21,7 +21,6 @@ #include #include -#include #include #ifdef STDC_HEADERS # include @@ -53,57 +52,62 @@ #include "sudo_auth.h" int -secureware_init(struct passwd *pw, sudo_auth *auth) +sudo_secureware_init(struct passwd *pw, sudo_auth *auth) { #ifdef __alpha extern int crypt_type; + debug_decl(sudo_secureware_init, SUDO_DEBUG_AUTH) if (crypt_type == INT_MAX) - return AUTH_FAILURE; /* no shadow */ + debug_return_int(AUTH_FAILURE); /* no shadow */ +#else + debug_decl(secureware_init, SUDO_DEBUG_AUTH) #endif sudo_setspent(); auth->data = sudo_getepw(pw); sudo_endspent(); - return AUTH_SUCCESS; + debug_return_int(AUTH_SUCCESS); } int -secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth) { char *pw_epasswd = auth->data; + char *epass = NULL; + debug_decl(sudo_secureware_verify, SUDO_DEBUG_AUTH) #ifdef __alpha - extern int crypt_type; + { + 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; +# ifdef HAVE_DISPCRYPT + epass = dispcrypt(pass, pw_epasswd, crypt_type); +# else + if (crypt_type == AUTH_CRYPT_BIGCRYPT) + epass = bigcrypt(pass, pw_epasswd); + else if (crypt_type == AUTH_CRYPT_CRYPT16) + epass = crypt(pass, pw_epasswd); +# endif /* HAVE_DISPCRYPT */ } -# endif /* HAVE_DISPCRYPT */ #elif defined(HAVE_BIGCRYPT) - if (strcmp(pw_epasswd, bigcrypt(pass, pw_epasswd)) == 0) - return AUTH_SUCCESS; + epass = bigcrypt(pass, pw_epasswd); #endif /* __alpha */ - return AUTH_FAILURE; + if (epass != NULL && strcmp(pw_epasswd, epass) == 0) + debug_return_int(AUTH_SUCCESS); + debug_return_int(AUTH_FAILURE); } int -secureware_cleanup(pw, auth) +sudo_secureware_cleanup(pw, auth) struct passwd *pw; sudo_auth *auth; { char *pw_epasswd = auth->data; + debug_decl(sudo_secureware_cleanup, SUDO_DEBUG_AUTH) if (pw_epasswd != NULL) { - zero_bytes(pw_epasswd, strlen(pw_epasswd)); + memset_s(pw_epasswd, SUDO_CONV_REPL_MAX, 0, strlen(pw_epasswd)); efree(pw_epasswd); } - return AUTH_SUCCESS; + debug_return_int(AUTH_SUCCESS); }