From: | Dave Cramer <Dave(at)micro-automation(dot)net> |
---|---|
To: | Jun KAWAI <kwj(at)sa-y(dot)com> |
Cc: | "pgsql-jdbc(at)postgresql(dot)org" <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: md5 authentication bug? |
Date: | 2002-08-16 19:35:05 |
Message-ID: | 1029526512.1947.145.camel@inspiron.cramers |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Patch has been applied,
Thanks,
Dave
On Thu, 2002-08-15 at 14:09, Jun KAWAI wrote:
> > I think I found a MD5 authentication bug in the PostgreSQL JDBC
> > driver (PostgreSQL 7.2.1).
>
> I forgot to attach a diff file.
>
>
> Thank you.
>
> Jun Kawai
> ----
>
> diff -uNr postgresql-7.2.1.orig/src/interfaces/jdbc/org/postgresql/Connection.java postgresql-7.2.1/src/interfaces/jdbc/org/postgresql/Connection.java
> --- postgresql-7.2.1.orig/src/interfaces/jdbc/org/postgresql/Connection.java Tue Dec 11 13:44:23 2001
> +++ postgresql-7.2.1/src/interfaces/jdbc/org/postgresql/Connection.java Tue Aug 13 20:43:24 2002
> @@ -67,6 +67,7 @@
>
> // New for 6.3, salt value for crypt authorisation
> private String salt;
> + private byte[] md5salt = new byte[4];
>
> // These are used to cache oids, PGTypes and SQLTypes
> private static Hashtable sqlTypeCache = new Hashtable(); // oid -> SQLType
> @@ -194,12 +195,11 @@
> // Or get the md5 password salt if there is one
> if (areq == AUTH_REQ_MD5)
> {
> - byte[] rst = new byte[4];
> - rst[0] = (byte)pg_stream.ReceiveChar();
> - rst[1] = (byte)pg_stream.ReceiveChar();
> - rst[2] = (byte)pg_stream.ReceiveChar();
> - rst[3] = (byte)pg_stream.ReceiveChar();
> - salt = new String(rst, 0, 4);
> + md5salt[0] = (byte)pg_stream.ReceiveChar();
> + md5salt[1] = (byte)pg_stream.ReceiveChar();
> + md5salt[2] = (byte)pg_stream.ReceiveChar();
> + md5salt[3] = (byte)pg_stream.ReceiveChar();
> + salt = new String(md5salt, 0, 4);
> DriverManager.println("MD5 salt=" + salt);
> }
>
> @@ -236,7 +236,7 @@
>
> case AUTH_REQ_MD5:
> DriverManager.println("postgresql: MD5");
> - byte[] digest = MD5Digest.encode(PG_USER, PG_PASSWORD, salt);
> + byte[] digest = MD5Digest.encode(PG_USER, PG_PASSWORD, md5salt);
> pg_stream.SendInteger(5 + digest.length, 4);
> pg_stream.Send(digest);
> pg_stream.SendInteger(0, 1);
> diff -uNr postgresql-7.2.1.orig/src/interfaces/jdbc/org/postgresql/util/MD5Digest.java postgresql-7.2.1/src/interfaces/jdbc/org/postgresql/util/MD5Digest.java
> --- postgresql-7.2.1.orig/src/interfaces/jdbc/org/postgresql/util/MD5Digest.java Mon Nov 26 08:26:59 2001
> +++ postgresql-7.2.1/src/interfaces/jdbc/org/postgresql/util/MD5Digest.java Tue Aug 13 20:40:00 2002
> @@ -21,11 +21,11 @@
> *
> * @param user The connecting user.
> * @param password The connecting user's password.
> - * @param salt A four-character string sent by the server.
> + * @param salt A four-byte salt sent by the server.
> *
> * @return A 35-byte array, comprising the string "md5" and an MD5 digest.
> */
> - public static byte[] encode(String user, String password, String salt)
> + public static byte[] encode(String user, String password, byte[] salt)
> {
> MessageDigest md;
> byte[] temp_digest, pass_digest;
> @@ -41,7 +41,7 @@
>
> bytesToHex(temp_digest, hex_digest, 0);
> md.update(hex_digest, 0, 32);
> - md.update(salt.getBytes());
> + md.update(salt);
> pass_digest = md.digest();
>
> bytesToHex(pass_digest, hex_digest, 3);
> ----
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2002-08-16 19:38:21 | Re: md5 authentication bug? |
Previous Message | Barry Lind | 2002-08-16 16:58:13 | Re: Inserting large BLOBs via JDBC - OutOfMemoryError |