Re: JDBC driver patch for non-ASCII users
| От | Oliver Jowett |
|---|---|
| Тема | Re: JDBC driver patch for non-ASCII users |
| Дата | |
| Msg-id | 475E8CAF.5000504@opencloud.com обсуждение исходный текст |
| Ответ на | Re: JDBC driver patch for non-ASCII users (sulfinu@gmail.com) |
| Ответы |
Re: JDBC driver patch for non-ASCII users
|
| Список | pgsql-jdbc |
sulfinu@gmail.com wrote:
> On Saturday 08 December 2007, Oliver Jowett wrote:
>
>> Can you explain what this change does, then?
>>
>>> String result = UnixCrypt.crypt(salt, password);
>>> - byte[] encodedResult =
>>> result.getBytes("US-ASCII"); + byte[]
>>> encodedResult = result.getBytes(Encoding.AUTHENTICATION_PHASE_ENCODING);
>> AFAIK UnixCrypt.crypt() should only be returning ASCII anyway, right?
> Wrong, it returns a String, in other words a series of Unicode points, not
> necessarily ASCII characters.
A general String certainly might contain non-ASCII, but all Strings
returned by UnixCrypt.crypt() contain only ASCII. See the implementation
of UnixCrypt.crypt(), and in particular the UnixCrypt.cov_2char array.
So I still do not understand why the change quoted above is necessary.
Can you explain why it is necessary?
>> Same thing re. salt decoding, doesn't the server only ever send ASCII?
> The server never bothers about any encoding during the authentication phase.
> The server simply treats everything as byte arrays and compares what is
> received from the client to the result of its own byte-wise computation,
> based on stored user name and password.
The server only ever sends a subset of ASCII as crypt salt characters
(specifically, the 62 characters a-z A-Z 0-9), so US-ASCII is just fine
for decoding. See postmaster.c, RandomSalt() / RemapChar().
So I still do not understand why a change to the encoding used to decode
crypt salt characters is necessary. Can you explain why it is necessary?
-O
В списке pgsql-jdbc по дате отправления: