Max,
Krb5AcceptCredential.java
1) you changed it to not extending KerberosKey, potential compatibility
concern?

Not compatibility concern. I only think that now Krb5AcceptCredential can be something else other than simply KerberosKey.

If fact, I have no idea why the original Krb5AcceptCredential needs to extends KerberosKey. I didn't see any place where it's used as a KerberosKey.
I am somewhat concerned about this change.
If any Krb5AcceptCredential objects are added into the Subject's private credential set, with this change, they will no longer be found by apps which search for KerberosKey. We'd better be careful here.


Krb5Util.java
1) When calling ServiceCreds.getInstance(), your change only checks that
kt, kk can't both be null, i.e. line 221. However, at line 237, it uses
kk when ktab file is missing. It looks to me that this may leads NPE if
the ServiceCreds is constructed w/ a non-null (but non-existent) KeyTab
object and null KerberosKey list.

When ktab file is missing, ktab is not null, and line 237 will not be executed.
My comment applies to your webrev.00. I saw you changed it in your latest webrev, i.e. 01, so that the NPE won't happen.


3) You replaced the Krb5Util.getKeys(GSSCaller, ...) method w/
ServicesCreds.getServiceCreds(GSSCaller,...). If you don't update JSSE
source immediately, people will run into a compilation failure. Perhaps
it's better to keep the Krb5Util.getKeys(GSSCaller,...) method and then
remove this method together w/ the updated JSSE sources.

JSSE codes are also updated in the same changeset. I think such problems only happen when a pre-compiled jar is involved. Or, did I miss anything?
Never mind, somehow I missed that JSSE file and thought that you didn't update it.

4) at line 291 and 299, will the KerberosPrincipal found off the Subject
be different from the specified server principal? Seems somewhat strange
that we just grab the first one.

Well, if every credentials inside the subject is a result of Krb5LoginModule commit() call, then there should be one KerberosPrincipal there. I am not using the specified server principal because it has a chance to be null.
Then, how about we use the specified server principal if it's not null and if it is null, then we grab the KerberosPrincipal from the Subject? I think we should use the explicitly specified value whenever possible since that's what we'd expect.


KrbAsReqBuilder.java
1) Its destroy() method no longer destroys key nor clears password? Is
this intentional? If yes, then the method description should be updated.
Also, how/when will keys or keytab objects be destroyed and password be
cleared?

Fixed. Password is now cleared. There is no need to destroy the keytab. Maybe the sun.security...KeyTab class needs a static destroy method to clean up the map, but I am not sure when to call that.
Yes, it's not obvious when to clean up the map.
Well, static map w/ only add and no removal may lead to memory problems later...
At least add some comment in the code to remind ourself about this.


sun.security.krb5.internal.ktab.KeyTab.java
1) your "isReading" flag is static to the KeyTab class but the way you
use it seems to suggest that it should be associated w/ each entry of
the "map" Hashmap.

Updated. I gave up the multi-thread tuning. There is a chance an old keytab is returned even if it was updated long time ago. Now I simply made the getInstance0 method synchronized. As long as the keytab file's timestamp does not change, this method should be very fast.

During the CCC approval, Dmitry Miltsov did like the "try its best" words in "Implementation of getKeys() method should try its best to get the latest info". Therefore I removed it and change the implementation as well.
The changes look good to me.
Question regarding line 124: why update the "isMissing" field of the old keytab? Also, what about the other field such as "lastModified"?
Typo on line 108: "instead if" should be "instead of"
Lastly, regarding "if a user want to revoke all keys, he should empty the keytab instead if deleting the file.", do you think that's what most users do? Can't we detect this by checking the existence of the KeyTab file when there is a copy in the cache? If a KeyTab file was found earlier, but later disappeared/removed, can't we take it as a sign to dispose it by calling the dispose() method and remove it from the cache?

Thanks,
Valerie

Reply via email to