db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jørgen Løland (JIRA) <j...@apache.org>
Subject [jira] Updated: (DERBY-3060) Network Server incorrectly assumes that all SQLExceptions with error code 08004 are caused by an authentication failure.
Date Fri, 07 Sep 2007 13:01:36 GMT

     [ https://issues.apache.org/jira/browse/DERBY-3060?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jørgen Løland updated DERBY-3060:
---------------------------------

    Attachment: derby-3060-1.stat
                derby-3060-1.diff

Attaching a patch, v1, that does the following:

M      java/drda/org/apache/derby/impl/drda/DRDAConnThread.java

Added a method, isAuthenticationException, that checks if the EmbedSQLException.getMessageId
field is equal to the authentication error code in SQLState.java. getMessageId returns the
whole 9-character error code (e.g. 08004.C.1) instead of only the first five chars returned
by getSqlState, allowing us to check if the exception is, in fact, authentication related.


If the exception turns out to not be an EmbedSQLException, the pre-patch strategy of assuming
the cause is an authentication failure is used.

The described method is used in two cases that previously only checked if the SQL state was
08004 and concluded on an authentication failure.

M      java/engine/org/apache/derby/impl/jdbc/EmbedConnection.java
M      java/engine/org/apache/derby/jdbc/InternalDriver.java

Changed two uses of SQLState.LOGIN_FAILED where the causes of the exceptions were failed authentication.
Changed these to use the more explicit SQLState for authentication error: NET_CONNECT_AUTH_FAILED



I have started the tests and will revert back with results once these have completed. I attached
the patch now in case someone wants to comment on the solution.

> Network Server incorrectly assumes that all SQLExceptions with error code 08004 are caused
by an authentication failure.
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-3060
>                 URL: https://issues.apache.org/jira/browse/DERBY-3060
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server
>    Affects Versions: 10.3.1.4, 10.4.0.0
>            Reporter: Jørgen Løland
>            Assignee: Jørgen Løland
>         Attachments: derby-3060-1.diff, derby-3060-1.stat
>
>
> DRDAConnThread#getConnFromDatabaseName incorrectly assumes that all SQLExceptions with
error code 08004 thrown when trying to connect to a database are caused by an authentication
failure.
> DRDAConnThread lines 1295-1296:
> ------8<------ 
> if (sqlState.regionMatches(0,SQLState.LOGIN_FAILED,0,5)) 
>     return CodePoint.SECCHKCD_USERIDINVALID;
> ------>8------
> I have added an exception to BasicDatabase#setupConnection with error code 08004.C.7.
The exception is thrown if the connection is refused because the database has been booted
in slave replication mode. This exception is, however, translated into an authentication exception
by DRDAConnThread:
> When the NetworkServer has already booted a database 'test' in slave replication mode,
I get the following output from ij:
> ij> connect 'jdbc:derby://localhost/test';
> ERROR 08004: Connection authentication failure occurred.  Reason: userid or password
invalid.
> If I change the SQL code of the exception to XRE02.C and repeat, I get:
> ij> connect 'jdbc:derby://localhost/test';
> ERROR XRE02: DERBY SQL error: SQLCODE: -1, SQLSTATE: XRE02, SQLERRMC: Connect refused
to database 'test' because it is in replication slave mode.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message