Imported Upstream version 1.7.6p1
[debian/sudo] / auth / secureware.c
index 435957d53211239f013f62762cd21b097e3e0d9a..c1c43d04cf8cfd331df7032b83a5ee21701e12c1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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;
@@ -67,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
@@ -78,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;
 }