UnixAuthenticator.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* $Id: UnixAuthenticator.java,v 1.1.1.1 2000/02/01 12:01:31 wastl Exp $ */
  2. import net.wastl.webmail.server.*;
  3. import java.io.*;
  4. import java.util.*;
  5. import net.wastl.webmail.misc.*;
  6. import net.wastl.webmail.config.ConfigScheme;
  7. /**
  8.  * UnixAuthenticator.java
  9.  *
  10.  *
  11.  * Created: Mon Apr 19 13:43:48 1999
  12.  *
  13.  * @author Sebastian Schaffert
  14.  * @version
  15.  */
  16. public class UnixAuthenticator extends Authenticator {
  17.     
  18.     public final String VERSION="1.2";
  19.     public static final String passwd="/etc/passwd";
  20.     public static final String shadow="/etc/shadow";
  21.     public UnixAuthenticator() {
  22. super();
  23.     }
  24.     public String getVersion() {
  25. return VERSION;
  26.     }
  27.     public void init(Storage store) {
  28.     }
  29.     public void register(ConfigScheme store) {
  30. key="UNIX";
  31. store.configAddChoice("AUTH",key,"Authenticate against the local Unix server's passwd/shadow files. Password change not possible.");
  32.     }
  33.     public void authenticatePreUserData(String user, String domain,String given_passwd) throws InvalidPasswordException {
  34. super.authenticatePreUserData(user,domain,given_passwd);
  35. String login=user;
  36. try {
  37.     File f_passwd=new File(passwd);
  38.     File f_shadow=new File(shadow);
  39.     BufferedReader in;
  40.     if(f_shadow.exists()) {
  41. in=new BufferedReader(new InputStreamReader(new FileInputStream(f_shadow)));
  42.     } else {
  43. in=new BufferedReader(new InputStreamReader(new FileInputStream(f_passwd)));
  44.     }
  45.     String line;
  46.     line=in.readLine();
  47.     while(line != null) {
  48. if(line.startsWith(login)) break;
  49. line=in.readLine();
  50.     }
  51.     
  52.     if(line == null) throw new InvalidPasswordException("Invalid user: "+login);
  53.     
  54.     
  55.     StringTokenizer tok=new StringTokenizer(line,":");
  56.     String my_login=tok.nextToken();
  57.     String password=tok.nextToken();
  58.     if(!password.equals(Helper.crypt(password,given_passwd))) {
  59. WebMailServer.getStorage().log(Storage.LOG_WARN,"UnixAuthentication: user "+login+
  60.        " authentication failed.");
  61. throw new InvalidPasswordException("Unix authentication failed");
  62.     }
  63.     WebMailServer.getStorage().log(Storage.LOG_INFO,"UnixAuthentication: user "+login+
  64.    " authenticated successfully.");
  65. } catch(IOException ex) {
  66.     System.err.println("*** Cannot use UnixAuthentication and shadow passwords if WebMail is not executed as user 'root'! ***");
  67.     throw new InvalidPasswordException("User login denied due to configuration error (contact system administrator)");
  68. }
  69.     }
  70.     /**
  71.      * Don't allow to change Unix-Passwords as this could mess things up.
  72.      */
  73.     public boolean canChangePassword() {
  74. return false;
  75.     }    
  76. } // UnixAuthenticator