[
https://issues.apache.org/jira/browse/DIRKRB-692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16355619#comment-16355619
]
Fabiano Tarlao edited comment on DIRKRB-692 at 2/7/18 3:53 PM:
---------------------------------------------------------------
I cannot provide a final test for your project, I have not understood how your
integration tests work. I think you spawn a local kdc instance with predefined
domain users.
I have provided a normal test KrbClientTest.java that assumes a kdc is already
running somewhere and KrbClientTest.java class contains constants that should
be initialized properly...
It also loads the kdc configuration from an available kerb5.conf. You can also
change that part to a getResource... + new File(...getURI)... It depends on
your best practises about. Hope useful
Regards
was (Author: ftarlao):
I cannot provide a final test for your project, I have not understood how your
integration tests work. I think you spawn a local kdc instance with predefined
domain users.
I have provided a normal test KrbClientTest.java that assumes a kdc is already
running somewhere and that class has constants that should be initialized
properly...
[|https://issues.apache.org/jira/secure/DeleteAttachment!default.jspa?id=13136579&deleteAttachmentId=12909628&from=issue]it
also loads the kdc configuration from an available kerb5.conf. You can also
change that part to a getResource... new File(...getURI)... I have currently
no-idea of your best practises about. Hope useful
Regards
> 1)sgtTicket clientPrincipal is not initialized + 2)KrbClient fails to store
> SGT ticket in cache file
> ----------------------------------------------------------------------------------------------------
>
> Key: DIRKRB-692
> URL: https://issues.apache.org/jira/browse/DIRKRB-692
> Project: Directory Kerberos
> Issue Type: Bug
> Affects Versions: 1.1.0
> Environment: Linux Mint 17.1 + Netbeans 8.1 with a Maven Project +
> kerb-core 1.1.0 in Windows AD (KDC is Windows 2016 Server)
> Reporter: Fabiano Tarlao
> Priority: Major
> Labels: easyfix
> Attachments: KrbClientTest.java, bug1.diff, bug2.diff
>
>
> Two bugs that interact each other
> h1. 1)
> *SgtTicket*, returned by *KrbClient.requestSgt(..)*, has a _null_
> *clientPrincipal* field (unassigned). Perhaps this is not mandatory but your
> code assumes this property is populated (see later). I highly suggest to
> populate this field.
> I have wrote a workaround that overrides the *requestSgt* method and works
> for the *USE_TGT* case:
>
> {code:java}
> @Override
> public SgtTicket requestSgt(KOptions requestOptions) throws KrbException {
> SgtTicket requestSgt = super.requestSgt(requestOptions);
> TgtTicket tgt = (TgtTicket)
> requestOptions.getOptionValue(KrbOption.USE_TGT);
> if(tgt != null){
> requestSgt.setClientPrincipal(tgt.getClientPrincipal());
> }
> return requestSgt;
> }{code}
>
> h1. 2)
> Creating a new credential cache file when storing only one SGT (service
> ticket) fails. (i.e., trying to create a new cache file containing only one
> SGT and no TGT)
> Invoking *KrbClient.storeTicket(sgtTicket, File)* fails for this reason (here
> is the original code in *KrbClientBase* class, my comments in RED ):
> {{public void storeTicket(SgtTicket sgtTicket, File ccacheFile) throws
> KrbException {}}
> {{ LOG.info("Storing the sgt to the credential cache file.");}}
> {{ if (!ccacheFile.exists()) {}}
> {{ createCacheFile(ccacheFile);{color:#ff0000} //Correctly
> creates a new file but...{color}}}
> {{ if (ccacheFile.exists() && ccacheFile.canWrite()) {}}
> {{ CredentialCache cCache = new CredentialCache();}}
> {{ try {}}
> {{ cCache.load(ccacheFile);{color:#ff0000} //..this line
> EXPLODES cause it tries to initialize from an empty file, the unexistent file
> case is not managed correctly{color}}}
> {{ cCache.addCredential(new Credential(sgtTicket,
> sgtTicket.getClientPrincipal()));}}
> {{
> cCache.setPrimaryPrincipal(sgtTicket.getClientPrincipal());}}
> {{ cCache.store(ccacheFile);}}
> {{ } catch (IOException e) {}}
> {{ throw new KrbException("Failed to store sgt", e);}}
> {{ } else {}}
> {{ throw new IllegalArgumentException("Invalid ccache file, "}}
> {{ + "not exist or writable: " +
> ccacheFile.getAbsolutePath());}}
> {{}}}
> Here follows my proposal/fix, this code correctly manages the MIT ccache file
> creation for one SGT, please note that this fix assumes that bug 1 is already
> fixed:
> {{public static void storeTicket(SgtTicket sgtTicket, File ccacheFile) throws
> KrbException {}}
> {{ LOG.info("Storing the sgt to the credential cache file.");}}
> {{ boolean isFreshNew = !ccacheFile.exists();}}
> {{ if (isFreshNew) {}}
> {{ createCacheFile(ccacheFile);}}
> {{ if (ccacheFile.exists() && ccacheFile.canWrite()) {}}
> {{ }}
> {{ try {}}
> {{ CredentialCache cCache;}}
> {{ if(!isFreshNew){}}
> {{ cCache = new CredentialCache(sgtTicket);
> {color:#ff0000}//This constructor sets also the cCache principal from
> sgtTicket principal{color}}}
> {{ cCache.load(ccacheFile);}}
> {{ cCache.addCredential(new Credential(sgtTicket,
> sgtTicket.getClientPrincipal()));}}
> {{
> cCache.setPrimaryPrincipal(sgtTicket.getClientPrincipal());}}
> {{ } else {}}
> {{ cCache = new CredentialCache(sgtTicket);}}
> {{ cCache.store(ccacheFile);}}
> {{ } catch (IOException e) {}}
> {{ throw new KrbException("Failed to store sgt", e);}}
> {{ } else {}}
> {{ throw new IllegalArgumentException("Invalid ccache file, "}}
> {{ + "not exist or writable: " +
> ccacheFile.getAbsolutePath());}}
> Please note that *YOUR CredentialCache contructor assumes the clientPrincipal
> is populated* ;)
> Hope useful,
> regards
> Fabiano
> P.s: Attached two paches for the project, bug2.diff for bug 2 is..*I think..
> production ready*.
> bug1.diff for bug 1 is untested.. I ported the modification of my overriding
> method to the *AbstractInternalKrbClient.requestSgt()* method. But I have not
> performed run/test of modules, your project is big and needs time to manage
> well. *BUT* is this the right solution? or SHOULD the *clientPrincipal* be
> already populated from the doRequestSgt method? I suggest to look for a
> solution at a deeper level starting from *DefaultInternalKrbClient*. Consider
> bug1.diff a fair workaround.
> P.s.2:Added a pull request on GitHub
> Regards
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)