You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2002/05/20 20:50:30 UTC

DO NOT REPLY [Bug 9254] New: - JDBCRealm leaves open Statements

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9254>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9254

JDBCRealm leaves open Statements

           Summary: JDBCRealm leaves open Statements
           Product: Tomcat 4
           Version: 4.0.3 Final
          Platform: All
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Catalina:Modules
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: ahakmeh@hotmail.com


The authenticate method in the JDBCRealm does not close the statements when it 
closes the result sets. This cause certain drivers to misbehave and throw an 
exception making the JDBCRealm unusable. please fix in 4.0.4! 

It would be proper to do the following: (look for '----->>' in two locations)

    public synchronized Principal authenticate(Connection dbConnection, String 
username, String credentials)
        throws SQLException
    {
        String dbCredentials = null;
        PreparedStatement stmt = credentials(dbConnection, username);
        ResultSet rs;
        
        for(rs = stmt.executeQuery(); rs.next();)
            dbCredentials = rs.getString(1).trim();

        rs.close();
----->> stmt.close();
        
        if(dbCredentials == null)
            return null;
        
        boolean validated = false;
        if(hasMessageDigest())
            validated = digest(credentials).equalsIgnoreCase(dbCredentials);
        else
            validated = digest(credentials).equals(dbCredentials);
        
        if(validated)
        {
            if(super.debug >= 2)
                log(sm.getString("jdbcRealm.authenticateSuccess", username));
        }
        else
        {
            if(super.debug >= 2)
                log(sm.getString("jdbcRealm.authenticateFailure", username));
            return null;
        }

        ArrayList list = new ArrayList();
        stmt = roles(dbConnection, username);
        
        for(rs = stmt.executeQuery(); rs.next(); list.add(rs.getString(1).trim
()));
        
        rs.close();
----->> stmt.close();
        
        dbConnection.commit();
        
        return new GenericPrincipal(this, username, credentials, list);
    }

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>