Imported Upstream version 1.7.6p1
[debian/sudo] / auth / secureware.c
index e7148d3f7e51f4087848fc06e85d044d83e69e0f..c1c43d04cf8cfd331df7032b83a5ee21701e12c1 100644 (file)
@@ -62,9 +62,12 @@ secureware_init(pw, promptp, auth)
     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
@@ -73,25 +76,40 @@ secureware_verify(pw, pass, auth)
     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;
 }