> Date: Thu, 1 Aug 2013 15:55:37 +0200
> From: a...@ice-sa.com
> To: users@tomcat.apache.org
> Subject: Re: java.net.UnknownHostException: Failed to negotiate with a 
> suitable domain controller for xxx
> 
> Seema Patel wrote:
> > 
> >> Date: Thu, 1 Aug 2013 12:06:39 +0200
> >> From: a...@ice-sa.com
> >> To: users@tomcat.apache.org
> >> Subject: Re: java.net.UnknownHostException: Failed to negotiate with a 
> >> suitable domain controller for xxx
> >>
> >> Seema Patel wrote:
> >>> Hi,
> >>>  
> >>> I am not sure if this is the right List to post this on, please advise if 
> >>> it isn't and let me know where is best to post.
> >>>  
> >>> I am getting the following error on one of our applications running on 
> >>> our intranet:
> >>>  
> >>> 2013-07-31 17:15:11,180 [http-xxx.xxx.x.xxx-xx-x] ERROR 
> >>> org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/forms].[action]
> >>>  - Servlet.service() for servlet action threw exception
> >>> java.net.UnknownHostException: Failed to negotiate with a suitable domain 
> >>> controller for xxx.LOCAL
> >>> at jcifs.smb.SmbSession.getChallengeForDomain(SmbSession.java:187)
> >>> at jcifs.http.NtlmHttpFilter.negotiate(NtlmHttpFilter.java:150)
> >>> at jcifs.http.NtlmHttpFilter.doFilter(NtlmHttpFilter.java:114)
> >>> at 
> >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
> >>> at 
> >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
> >>> at 
> >>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> >>> at 
> >>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
> >>> at 
> >>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
> >>> at 
> >>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> >>> at 
> >>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
> >>> at 
> >>> org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:393)
> >>> at 
> >>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
> >>> at 
> >>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
> >>> at 
> >>> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:837)
> >>> at 
> >>> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640)
> >>> at 
> >>> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1287)
> >>> at java.lang.Thread.run(Unknown Source)
> >>>  
> >> I believe that you should read this page carefully, in particular the blue 
> >> text at the 
> >> beginning : http://jcifs.samba.org/src/docs/ntlmhttpauth.html
> >>
> >> Can you have a look at the WEB-INF/web.xml file *of your application*, and 
> >> check if there 
> >> is a servlet filter configured there, which matches the name above ?
> >>
> >> If so, make a backup copy of that web.xml file, and then edit it to remove 
> >> that filter 
> >> from it, and try again.
> >> I am not quite sure, but it looks possible to me that you have a duplicate 
> >> authentication 
> >> mechanism in use : one at the container (Tomcat) level, and one at the 
> >> application level.
> >> And the one used at the application level is obsolete, unsupported, 
> >> unmaintained etc..
> >>
> > 
> > I have found out that JCIFS is no longer supported, but it will take a lot 
> > of time, development and resources to update it to the recommended Jespa.  
> > In my web.xml file I have the following:
> > 
> > <filter>
> >         <filter-name>NtlmHttpFilter</filter-name>
> >         <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
> >            
> >         <!--
> >             always needed for preauthentication / SMB signatures
> >         -->
> >         <init-param>
> >             <param-name>jcifs.smb.client.domain</param-name>
> >             <param-value>xxx</param-value>
> >         </init-param>
> >         <!-- SMB message signing requires a valid existing login -->
> >         <init-param>
> >             <param-name>jcifs.smb.client.username</param-name>
> >             <param-value>xxx</param-value>
> >         </init-param>
> >         <init-param>
> >             <param-name>jcifs.smb.client.password</param-name>
> >             <param-value>xxx</param-value>
> >         </init-param>
> >         <!-- Set the logging level -->
> >         <init-param>
> >             <param-name>jcifs.util.loglevel</param-name>
> >             <param-value>3</param-value>
> >         </init-param>
> >         <!--  allow non-IE browsers to use basic auth -->
> >         <init-param>
> >             <param-name>jcifs.http.insecureBasic</param-name>
> >             <param-value>true</param-value>
> >         </init-param>
> >     </filter>
> >     <filter>
> >         <filter-name>HRADGroupFilter</filter-name>
> >         <filter-class>xxx.ADGroupFilter</filter-class>
> >         <init-param>
> >             <param-name>AllowedGroups</param-name>
> >             <param-value>G-HR,G-MIS</param-value>
> >         </init-param>
> >     </filter>
> >         <filter>
> >         <filter-name>SuggestionsGroupFilter</filter-name>
> >         <filter-class>xxx.ADGroupFilter</filter-class>
> >         <init-param>
> >             <param-name>AllowedGroups</param-name>
> >             <param-value>xxx, xxx</param-value>
> >         </init-param>
> >     </filter>
> >     
> >     <filter-mapping>
> >         <filter-name>NtlmHttpFilter</filter-name>
> >         <url-pattern>/suggestions/*</url-pattern>
> >     </filter-mapping>
> >     <filter-mapping>
> >         <filter-name>SuggestionsGroupFilter</filter-name>
> >         <url-pattern>/suggestions/*</url-pattern>
> >     </filter-mapping>
> >     <filter-mapping>
> >         <filter-name>NtlmHttpFilter</filter-name>
> >         <url-pattern>/xxx/*</url-pattern>
> >     </filter-mapping>
> >     <filter-mapping>
> >         <filter-name>HRADGroupFilter</filter-name>
> >         <url-pattern>/xxx/xxx.do</url-pattern>
> >     </filter-mapping>
> > 
> > 
> > So, are you saying to just remove the following from the above?:
> >        <filter-name>NtlmHttpFilter</filter-name>
> >        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
> > 
> > Is there anything else in there that needs to be removed?  Sorry for my 
> > lack of understanding, but this was all developed by previous developers, 
> > who are no longer working here and have left no documentation.
> > 
> 
> Neither I nor the other contributors on this list knows what your 
> application(s) really 
> do, nor how your whole system really fits together.
> In addition, this list is for the support of Tomcat, and your issue is not 
> really with 
> Tomcat, but seems to be really at the application level and how this 
> application
> a) performs user authentication
> b) later uses the results of the user authentication
> The fact that there is no documentation and that the relevant delevelopers 
> have left is a 
> pity, but not really something we can do anything about.
> 
> What I really suggest, if this application is important for you (and apart 
> from what Chuck 
> already mentioned) is this : get in touch with the Jespa authors, at 
> www.ioplex.com (email 
> : supp...@ioplex.com) , present the issue to them, and ask them how they 
> could help.
> 
> Maybe first though : download the Jespa Operator's Guide from their website, 
> and read it.
> That will already tell you a lot of what you need to know.
> 
> Replacing the jCIFS HTTP filter by Jespa is not very hard, and mostly 
> consists of 
> installing Jespa and modifying the web.xml to use the Jespa filter instead of 
> the jCIFS 
> filter.  That would be the following sections of your current web.xml :
> 
>  > <filter>
>  >         <filter-name>NtlmHttpFilter</filter-name>
>  >         <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
>  >
>  >         <!--
>  >             always needed for preauthentication / SMB signatures
>  >         -->
>  >         <init-param>
>  >             <param-name>jcifs.smb.client.domain</param-name>
>  >             <param-value>xxx</param-value>
>  >         </init-param>
>  >         <!-- SMB message signing requires a valid existing login -->
>  >         <init-param>
>  >             <param-name>jcifs.smb.client.username</param-name>
>  >             <param-value>xxx</param-value>
>  >         </init-param>
>  >         <init-param>
>  >             <param-name>jcifs.smb.client.password</param-name>
>  >             <param-value>xxx</param-value>
>  >         </init-param>
>  >         <!-- Set the logging level -->
>  >         <init-param>
>  >             <param-name>jcifs.util.loglevel</param-name>
>  >             <param-value>3</param-value>
>  >         </init-param>
>  >         <!--  allow non-IE browsers to use basic auth -->
>  >         <init-param>
>  >             <param-name>jcifs.http.insecureBasic</param-name>
>  >             <param-value>true</param-value>
>  >         </init-param>
>  >     </filter>
> 
> and
> 
>  >     <filter-mapping>
>  >         <filter-name>NtlmHttpFilter</filter-name>
>  >         <url-pattern>/suggestions/*</url-pattern>
>  >     </filter-mapping>
> 
> and
> 
>  >     <filter-mapping>
>  >         <filter-name>NtlmHttpFilter</filter-name>
>  >         <url-pattern>/xxx/*</url-pattern>
>  >     </filter-mapping>
> 
> The sections above have a direct equivalent with Jespa, and there should in 
> principle not 
> be any code changes to make in your applications.
> Just the parameters in web.xml differ somewhat.
> 
> Both the jCIFS filter and the Jespa filter are servlet filters, and they 
> basically do the 
> same thing :
> - authenticate the current user of the application with the Windows Domain 
> Controllers 
> (and whatever is used as their back-end authentication mechanism)
> - "set" the internal "Tomcat user" to this user-id
> 
> Then, after that, runs the other filters that are configured above, and your 
> application.
> What they do with whatever information the authentication filter (jCIFS or 
> Jespa) has 
> passed to Tomcat, we do not know, and there could be a problem there (but 
> more likely not).
> If there was a problem, then the people most likely to be able to help you 
> are the Jespa guys.
> 
> 
> In theory, there could be another way : replace this "application-level" 
> filter-based 
> authentication by a container-level authentication (and get rid of the 
> filters), but in 
> your current situation, I believe that the Jespa solution is really the 
> simplest one.
> 
> And, really, consider upgrading your Tomcat version.  Nothing which you are 
> currently 
> using is supported anymore.

When upgrading Tomcat from version 5.5 to 7, would I need to upgrade to version 
6 first and then to 7 or can I go straight from 5.5 to 7?
I will first try all this in a test environment.  Please bare with me, I may 
come back with further questions to your responses.
But thanks for all the feedback, its appreciated (especially as I'm a newbie to 
this). 



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

Reply via email to