Changeset 181

Show
Ignore:
Timestamp:
02/22/08 23:46:20 (11 months ago)
Author:
jfp
Message:

removed old libs, changed ldap auth

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jsmtpd/.classpath

    r174 r181  
    55        <classpathentry kind="lib" path="etc"/> 
    66        <classpathentry kind="lib" path="lib/dnsjava-1.6.5.jar"/> 
    7         <classpathentry kind="lib" path="lib/xercesImpl.jar"/> 
    8         <classpathentry kind="lib" path="lib/xmlParserAPIs.jar"/> 
    9         <classpathentry kind="lib" path="lib/crypt.jar"/> 
    107        <classpathentry kind="lib" path="lib/commons-logging.jar"/> 
    118        <classpathentry kind="lib" path="lib/log4j-1.2.9.jar"/> 
  • trunk/jsmtpd/CHANGELOG

    r174 r181  
    11Version 0.x 
     2        Removed old libs 
     3        Refact auth ldap plugin 
    24        Added ssl socket receiver 
    35        Ldap auth fix 
  • trunk/jsmtpd/INSTALL

    r100 r181  
    1010The other interesting configuration file is  
    1111etc/jsmtpd-plugin-config.xml. Take a look at the manual  
    12 (in the doc/ folder) for advanced configuration. 
     12(http://www.jsmtpd.org) for advanced configuration. 
    1313 
    1414 
     
    1717         
    1818 
    19 You'll find the sources of the jsmtpd under the src directory. 
  • trunk/jsmtpd/README

    r3 r181  
    11 
    2 Jsmtpd, https://sourceforge.net/projects/jsmtpd/ 
    3 Copyright (C) 2005  Jean-Franรงois POUX, jf.poux@laposte.net 
     2Jsmtpd, http://www.jsmtpd.org 
     3Copyright (C) 2005  Jean-Francois POUX, jf.poux@laposte.net 
    44 
     5 
     6sources: http://svn.jsmtpd.org 
     7trac: http://dev.jstmpd.org 
     8builds: http://autobuild.jsmtpd.org 
    59 
    610Jsmtpd is a flexible SMTP (email) server, written in java.  
     
    4246requests, mainly to find mail exchangers. 
    4347 
    44 You are encouraged to send feedback/comments to improve Jsmtpd at  
    45 jf.poux@laposte.net 
    46  
    47  
    4848 
    4949Mini Howto 
  • trunk/jsmtpd/build.xml

    r169 r181  
    128128                <mkdir dir="${release.dir}/mailboxes/"/> 
    129129                <mkdir dir="${release.dir}/lib/"/> 
    130                 <mkdir dir="${release.dir}/src/"/> 
    131                   <copy todir="${release.dir}/src/"> 
    132                     <fileset dir="src/"/> 
    133                   </copy> 
    134130                <copy file="build.xml" tofile="${release.dir}/build.xml"/> 
    135131                <copy file="CHANGELOG" tofile="${release.dir}/CHANGELOG"/> 
     
    138134                <copy file="LICENCE" tofile="${release.dir}/LICENCE"/> 
    139135                <copy file="README" tofile="${release.dir}/README"/> 
    140                 <copy file="TODO" tofile="${release.dir}/TODO"/> 
    141136                <copy todir="${release.dir}/lib/"> 
    142137                        <fileset dir="lib/"/> 
     
    151146                <copy file="addcp.bat" tofile="${release.dir}/addcp.bat"/> 
    152147                <copy file="jsmtpd.sh" tofile="${release.dir}/jsmtpd.sh"/> 
     148                <chmod file="${release.dir}/jsmtpd.sh" perm="700"/> 
    153149        </target> 
    154150         
    155         <target name="doc"> 
     151        <target name="doc-src"> 
    156152                <mkdir dir="${release.dir}/doc/Javadoc"/> 
    157153                <javadoc packagenames="org.jsmtpd.core.*,org.jsmtpd.plugins.*,org.jsmtpd.*" 
     
    171167                                    <fileset dir="doc/"/> 
    172168                </copy> 
     169                <mkdir dir="${release.dir}/src/"/> 
     170                <copy todir="${release.dir}/src/"> 
     171                        <fileset dir="src/"/> 
     172                </copy> 
    173173        </target> 
    174174         
     
    180180         
    181181        <target name="buildFullRelease" 
    182                 depends="cleanAll,cleanRelease,jsmtpd-core-jar,jsmtpd-basicplugins-jar,baseRelease,jsmtpd-clamav,jsmtpd-SA,jsmtpd-IPFIlters,jsmtpd-snippet,doc"> 
     182                depends="cleanAll,cleanRelease,jsmtpd-core-jar,jsmtpd-basicplugins-jar,baseRelease,jsmtpd-clamav,jsmtpd-SA,jsmtpd-IPFIlters,jsmtpd-snippet"> 
    183183        </target> 
    184184         
  • trunk/jsmtpd/src/org/jsmtpd/plugins/smtpExtension/LdapAuthenticator.java

    r161 r181  
    2121package org.jsmtpd.plugins.smtpExtension; 
    2222 
    23 import java.io.UnsupportedEncodingException; 
    24 import java.security.MessageDigest; 
    25 import java.security.NoSuchAlgorithmException; 
    2623import java.util.Hashtable; 
    27  
    2824import javax.naming.Context; 
    2925import javax.naming.InitialContext; 
    3026import javax.naming.NamingEnumeration; 
    3127import javax.naming.NamingException; 
    32 import javax.naming.directory.Attribute; 
    33 import javax.naming.directory.Attributes; 
    3428import javax.naming.directory.DirContext; 
    3529import javax.naming.directory.SearchControls; 
    3630import javax.naming.directory.SearchResult; 
    37  
    3831import org.apache.commons.logging.Log; 
    3932import org.apache.commons.logging.LogFactory; 
    4033import org.jsmtpd.core.common.PluginInitException; 
    41 import org.vps.crypt.Crypt; 
    42  
    43 import sun.misc.BASE64Encoder; 
    4434/** 
    4535 * 1/04/06 : Change to query primary mail by fixed attribute, not by uid (for multiple domains and outgoing) 
     
    5646        // How to query the user db 
    5747        private String ldapUserProvider; 
    58         private String ldapUserPassword; 
     48         
    5949    /** 
    6050     * By default, will use uid attribute (posix/shadow account schema), in this case login = uid 
     
    6353     */ 
    6454    private String ldapUserLogin="uid"; 
    65         private MessageDigest md; 
    6655         
    67         protected boolean performAuth(String login, byte[] password)
     56        private String searchUserDn (String login)
    6857                Hashtable<String,String> environnement; 
    6958                environnement = new Hashtable<String,String>(); 
     
    7968                        while (namingEnumeration.hasMore()) { 
    8069                                SearchResult result = namingEnumeration.next(); 
    81                                 Attributes attributes = result.getAttributes(); 
    82                                 Attribute ldapAttrPass = attributes.get(ldapUserPassword); 
    83                                 String ldapPass = new String((byte[])ldapAttrPass.get(), "UTF8"); 
    84                                 if (ldapPass==null) 
    85                                         return false; 
    86                                  
    87                                 if (ldapPass.startsWith("{md5}")||ldapPass.startsWith("{MD5}")) { 
    88                                         String pwd=ldapPass.substring(5); 
    89                                         byte[] bytePass = md.digest(password); 
    90                                         BASE64Encoder b = new BASE64Encoder(); 
    91                                         String inputPass = b.encode(bytePass); 
    92                                         if (pwd.equals(inputPass)) { 
    93                                                 log.debug("user "+login+" authenticated (md5 password)"); 
    94                                                 return true; 
    95                                         } else { 
    96                                                 log.debug("user "+login+" authentication failed (md5 password)"); 
    97                                                 return false; 
    98                                         } 
    99                                 } 
    100                                  
    101                                 if (ldapPass.startsWith("{crypt}")||ldapPass.startsWith("{CRYPT}")) { 
    102                                         String full = ldapPass.substring(7); 
    103                                         String salt = full.substring(0,2); 
    104                                         String rv = Crypt.crypt(salt.getBytes(),password); 
    105  
    106                                         if (rv.equals(full)) { 
    107                                                 log.debug("user "+login+" authenticated (crypt password)"); 
    108                                                 return true; 
    109                                         } else { 
    110                                                 log.debug("user "+login+" authentication failed (crypt password)"); 
    111                                                 return false; 
    112                                         } 
    113                                 } 
    114                                  
    115                                 log.error("I don't know how to handle encryption for user "+login+" in ldap entry"); 
     70                                return (result.getNameInNamespace()); 
    11671                        } 
    11772                } catch (NamingException e) { 
    118                         log.error("Can't query server for aliases",e); 
    119                 } catch (UnsupportedEncodingException e) { 
    120                         log.error("Can't convert enc password",e); 
     73                        log.error("Can't query server for user dn: "+login,e); 
    12174                } 
    122                  
    123                 return false; 
     75                return null; 
     76        } 
     77         
     78        private boolean bindAs (String dn, byte[] password) { 
     79                Hashtable<String,Object> environnement; 
     80                environnement = new Hashtable<String,Object>(); 
     81                environnement.put(Context.SECURITY_PRINCIPAL,dn); 
     82                environnement.put(Context.SECURITY_CREDENTIALS,password); 
     83                InitialContext initialContext; 
     84                try { 
     85                        initialContext = new InitialContext(environnement); 
     86                        DirContext ctx = (DirContext) initialContext.lookup(ldapUrl); 
     87                        ctx.close(); 
     88                        return true; 
     89                } catch (NamingException e) { 
     90                        log.error("Unable to bind user "+dn,e); 
     91                        return false; 
     92                } 
     93        } 
     94         
     95        protected boolean performAuth(String login, byte[] password) { 
     96                String userDn = searchUserDn(login); 
     97                return bindAs (userDn, password); 
    12498        } 
    12599 
     
    128102        } 
    129103 
    130         public void initPlugin() throws PluginInitException { 
    131                 try { 
    132                         md= MessageDigest.getInstance("md5"); 
    133                 } catch (NoSuchAlgorithmException e) { 
    134                         throw new PluginInitException("No md5 available"); 
    135                 } 
    136         } 
     104        public void initPlugin() throws PluginInitException {} 
    137105 
    138         public void shutdownPlugin() { 
    139         } 
     106        public void shutdownPlugin() {} 
    140107 
    141108        public void setLdapUrl(String ldapUrl) { 
     
    145112        public void setLdapUserLogin(String ldapUserLogin) { 
    146113                this.ldapUserLogin = ldapUserLogin; 
    147         } 
    148  
    149         public void setLdapUserPassword(String ldapUserPassword) { 
    150                 this.ldapUserPassword = ldapUserPassword; 
    151114        } 
    152115