-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Rop,

On 3/12/15 3:33 PM, rop wrote:
> Finally, found the issue.

Please bottom-post if you can. Also, please sign your posts.

> On Thu, Mar 12, 2015 at 6:18 PM, Mark Thomas <ma...@apache.org>
> wrote:
> 
>> On 12/03/2015 15:51, rop wrote:
>>> Ah, I got it now. Thanks, David.
>>> 
>>> Yes, the a-b-c-d points are OK then.
>>> 
>>> As a trouble-shoot action, I actually did an install-and-test
>>> "binary search" among the intermediate tomcat-versions to
>>> pinpoint exactly which version breaks our app.
>>> 
>>> Turns out, up to 7.0.47 it still works OK. (7.0.48 and 7.0.49
>>> do not exist in the tomcat archive) And from 7.0.50 it breaks.
>>> 
>>> So apparently, between 47 and 50 some change occurred that
>>> breaks our login....
>> 
>> Nothing jumps out at me in the change log. I'd add that FORM auth
>> is tested as part of every release so it isn't a general
>> problem.
>> 
>> In your shoes, I'd be firing up Eclipse and remote debugging my
>> way through the authentication process. Alternatively, try
>> creating the smallest/simplest possible WAR that exhibits the
>> problem.
> 
> The crucial change was in the method
> RealmBase.compareCredentials(), which is new in 7.0.50 (the
> comparison was much simpler before that).

It is much more extensible, now.

> Dunno if we do something unusual here, but we just extend
> DataSourceRealm, like MyDataSourceRealm, and implement the
> message-digest for password-hashing in there, by simply overriding
> the digest() method.

Do you need to extend the whole realm, or did you just want to
override Tomcat's default password-hashing algorithm?

If you just want to tweak the hashing algorithm, you can write a
simpler class and not subclass DataSourceRealm. What does your Realm
do besides change the password-comparison algorithm?

> Before 7.0.50, this worked fine *without* explicitly setting the 
> DataSourceRealm.setDigest() property. It's always been null, and
> still worked.

This was because it defaulted to "MD5" and Tomcat always used
simplistic credential-hashing. It's much more sophisticated, now, and
also supports things like Bcrypt, Scrypt, PBKDF2, etc.

> But the new method RealmBase.compareCredentials() assumes: if you
> use messageDigest, this property MUST be set. (
> compareCredentials() calls hasMessageDigest() which did not happen
> in earlier versions. )
> 
> So the solution was to simply add the property digest in <Realm
> digest="..." ...> which we didnt have there before. Then it works.

Great. But I think you can do better. If your Realm merely changes the
way hashing is done, please check-out the new features. You may be
able to a) eliminate your class altogether due to new features or b)
replace your Realm with a CredentialHandler that only does the
mutation and comparison of credentials.

We did this so you can use the same credential-mutations on *any*
realm, without having to subclass every Realm to do it.

Hope that helps,
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJVAe6tAAoJEBzwKT+lPKRYl6UP/AhEtn5f53OPipu+EN1r3iKR
CkjrSZDT89yQ3LEqdV7mHkP1O1834MS8a21QVJ+AuLmceor2KRMkiwdAWbfa/uAx
5FKXg80n3Cu0lFQXrD3dHRq92+JPFJuAhN60s2VU+O76rbRgT4RkLULJa7j/t7Jr
H2vQXL/kY2/y7Ku8Xg+I+be9fBdss7K0DBAq8PT1Qluo2BkHRjf5JU6D59xy0wXZ
KMN6rnN7XRkKRw2/jZlle/fTBHKjIGO5Sq9lsr8KcS7Qpzguxlo3nZjz487pQ8Ok
y1DV3pjNz7y4cZtL5j0zS8zxFf0Tlb5A/xfqn8japLXti0uBZEyld//b42mWlVD1
8OTcTh6B5XyMcqchfvfV/7Fp27EbKl6Gwtdn560NizQ3fCbmyx3QMWY5i1K+lq7P
hlAYh4Xcs8WCS2aZ9s+R48AqsDAPsKVAHAam1i7wOe9k7yk7ziOkNvm1y9LNSseZ
FPDc9G13O/JXDg7GRTOdX3yas2aXCygTkm062fd2Uvvv4E5musaIYE4VDJgAlWUJ
cyY2Zx6DMjjSsDhxNgRgC6Z7c0eyjyHk7haWqMtWgqpDN0z+4qmc78o3hNoW5yfY
TLEZQSKt7q04ECq0xlt0cktcp7hmHaB/gvu5bK+cYS8H4lmGAr9Fg6zbI31Uzyov
xkQ8CoV6X9Oq0TlV3PXi
=Y/0T
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to