We recently upgraded Ciphermail from a 3.x version (cannot recall which version) to 4.1.3.
Since doing so, we're getting Tomcat 404 errors at
https://server.fqdn:8443/ciphermail/. I'm looking for some help troubleshooting this
if anyone has some insight.
The server is running Ubuntu Server 16.04, we're using the deb packages from the
website, and using Tomcat 7. This server has nothing else installed on it and the OS is
fully up to date.
catalina.out says that /usr/share/djigzo-web/conf/spring/spring.properties.d is not a
directory, but it is. Here's catalina.out after a restart of tomcat and an ls of
/usr/share/djigzo-web/conf/spring/spring.properties.d:
root@ciphermail:/var/log/tomcat7# cat catalina.out
Dec 26, 2018 12:50:55 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-8443"]
Dec 26, 2018 12:50:55 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Dec 26, 2018 12:50:56 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-8443"]
Dec 26, 2018 12:50:56 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8443"]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false],
isDirectory: [false], canRead: [false]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory:
[false], canRead: [false]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false],
isDirectory: [false], canRead: [false]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory:
[false], canRead: [false]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false],
isDirectory: [false], canRead: [false]
Dec 26, 2018 12:50:56 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory:
[false], canRead: [false]
Dec 26, 2018 12:50:57 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8443"]
Dec 26, 2018 12:50:58 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1005 ms
Dec 26, 2018 12:50:58 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Dec 26, 2018 12:50:58 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.68 (Ubuntu)
Dec 26, 2018 12:50:58 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor /etc/tomcat7/Catalina/localhost/ciphermail.xml
Dec 26, 2018 12:51:07 PM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging
for this logger for a complete list of JARs that were scanned but no TLDs were found in
them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation
time.
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Root WebApplicationContext:
initialization started (org.springframework.web.context.ContextLoader)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Refreshing Root WebApplicationContext:
startup date [Wed Dec 26 12:51:08 EST 2018]; root of context hierarchy
(org.springframework.web.context.support.XmlWebApplicationContext)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Loading XML bean definitions from
ServletContext resource [/WEB-INF/spring.xml]
(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO You are running with Spring Security
Core 3.2.5.RELEASE (org.springframework.security.core.SpringSecurityCoreVersion)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Spring Security 'config' module
version is 3.2.5.RELEASE
(org.springframework.security.config.SecurityNamespaceHandler)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Checking sorted filter chain: [Root
bean: class [org.springframework.security.web.context.SecurityContextPersistenceFilter];
scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;
autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null;
initMethodName=null; destroyMethodName=null, order = 200, Root bean: class
[org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter];
scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;
autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null;
initMethodName=null; destroyMethodName=null, order = 400,
<bannedAuthenticationProcessingFilter>, order = 1100, Root bean: class
[org.springframework.security.web.savedrequest.RequestCacheAwareFilter]; scope=;
abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null, order = 1600, Root bean: class
[org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter];
scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0;
autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null;
initMethodName=null; destroyMethodName=null, order = 1700, Root bean: class
[org.springframework.security.web.authentication.AnonymousAuthenticationFilter]; scope=;
abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null, order = 2000, Root bean: class
[org.springframework.security.web.session.SessionManagementFilter]; scope=;
abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null, order = 2100, Root bean: class
[org.springframework.security.web.access.ExceptionTranslationFilter]; scope=;
abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true;
primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null, order = 2200,
<org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0>,
order = 2300]
(org.springframework.security.config.http.HttpSecurityBeanDefinitionParser)
[26 Dec 2018 12:51:08 localhost-startStop-1] INFO Destroying singletons in
org.springframework.beans.factory.support.DefaultListableBeanFactory@23d6724f: defining
beans
[mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer#0,authenticationEntryPoint,bannedAuthenticationProcessingFilter,org.springframework.security.authentication.dao.DaoAuthenticationProvider#0,org.springframework.security.authentication.DefaultAuthenticationEventPublisher#0,org.springframework.security.authenticationManager,org.springframework.security.filterChains,org.springframework.security.filterChainProxy,org.springframework.security.web.DefaultSecurityFilterChain#0,org.springframework.security.web.DefaultSecurityFilterChain#1,org.springframework.security.web.DefaultSecurityFilterChain#2,org.springframework.security.web.DefaultSecurityFilterChain#3,org.springframework.security.web.DefaultSecurityFilterChain#4,org.springframework.security.web.DefaultSecurityFilterChain#5,org.springframework.security.web.DefaultSecurityFilterChain#6,org.springframework.security.web.DefaultSecurityFilterChain#7,org.springframework.security.web.DefaultSecurityFilterChain#8,org.springframework.security.web.PortMapperImpl#0,org.springframework.security.web.PortResolverImpl#0,org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0,org.springframework.security.authentication.ProviderManager#0,org.springframework.security.web.context.HttpSessionSecurityContextRepository#0,org.springframework.security.web.authentication.session.CompositeSessionAuthenticationStrategy#0,org.springframework.security.web.savedrequest.HttpSessionRequestCache#0,org.springframework.security.access.vote.AffirmativeBased#0,org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0,org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#0,org.springframework.security.authentication.AnonymousAuthenticationProvider#0,org.springframework.security.userDetailsServiceFactory,org.springframework.security.web.DefaultSecurityFilterChain#9,adminPasswordEncoder,portalPasswordEncoder,userDetailsService,authenticationEventListener,jobScheduler];
root of factory hierarchy
(org.springframework.beans.factory.support.DefaultListableBeanFactory)
[26 Dec 2018 12:51:08 localhost-startStop-1] ERROR Context initialization failed
(org.springframework.web.context.ContextLoader)
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer#0' defined in
ServletContext resource [/WEB-INF/spring.xml]: Instantiation of bean failed; nested
exception is org.springframework.beans.BeanInstantiationException: Could not instantiate
bean class [mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer]:
Constructor threw exception; nested exception is java.lang.IllegalArgumentException:
/usr/share/djigzo-web/conf/spring/spring.properties.d is not a directory.
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:285)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1075)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:979)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
at
org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:657)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461)
at
org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:677)
at
org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1962)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate
bean class [mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer]:
Constructor threw exception; nested exception is java.lang.IllegalArgumentException:
/usr/share/djigzo-web/conf/spring/spring.properties.d is not a directory.
at
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:121)
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:277)
... 26 more
Caused by: java.lang.IllegalArgumentException:
/usr/share/djigzo-web/conf/spring/spring.properties.d is not a directory.
at
mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer.setDirectory(FilePropertyPlaceholderConfigurer.java:81)
at
mitm.application.djigzo.service.FilePropertyPlaceholderConfigurer.<init>(FilePropertyPlaceholderConfigurer.java:63)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at
org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 28 more
Dec 26, 2018 12:51:08 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: One or more listeners failed to start. Full details will be found in the
appropriate container log file
Dec 26, 2018 12:51:08 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ciphermail] startup failed due to previous errors
Dec 26, 2018 12:51:08 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deployment of configuration descriptor
/etc/tomcat7/Catalina/localhost/ciphermail.xml has finished in 10,482 ms
Dec 26, 2018 12:51:08 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
Dec 26, 2018 12:51:08 PM org.apache.catalina.core.StandardContext setPath
WARNING: A context path must either be an empty string or start with a '/' and do
not end with a '/'. The path [/] does not meet these criteria and has been changed
to []
Dec 26, 2018 12:51:08 PM org.apache.catalina.startup.TldConfig execute
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging
for this logger for a complete list of JARs that were scanned but no TLDs were found in
them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation
time.
Dec 26, 2018 12:51:08 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /var/lib/tomcat7/webapps/ROOT has finished
in 273 ms
Dec 26, 2018 12:51:08 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8443"]
Dec 26, 2018 12:51:08 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 10811 ms
root@ciphermail:/var/log/tomcat7# ls -l
/usr/share/djigzo-web/conf/spring/spring.properties.d
total 4
-rw-r--r-- 1 djigzo djigzo 99 Aug 13 04:23 README.txt
root@ciphermail:/var/log/tomcat7# ls -l /usr/share/djigzo-web/conf/spring
total 16
drwxr-xr-x 2 djigzo djigzo 4096 Dec 22 00:00 portal.spring.d
drwxr-xr-x 2 djigzo djigzo 4096 Dec 22 00:00 portal.spring.properties.d
drwxr-xr-x 2 djigzo djigzo 4096 Dec 22 00:00 spring.d
drwxr-xr-x 2 djigzo djigzo 4096 Dec 22 00:00 spring.properties.d
Todd R. James<mailto:trj@h2law.com>
Systems Architect
450 West Fourth Street, Royal Oak, MI 48067
E: trj@h2law.com<mailto:trj@h2law.com>
D: 248.723.0544<tel:248.723.0544> F: 248.645.1568<tel:248.645.1568>
[cid:hh_logo_sig_f80700f2-1c72-4801-9140-230a5fc86422.png]<https://howardandhoward.com>
NOTICE: Information contained in this transmission to the named addressee is proprietary
information and is subject to attorney-client privilege and work product confidentiality.
If the recipient of this transmission is not the named addressee, the recipient should
immediately notify the sender and destroy the information transmitted without making any
copy or distribution thereof.
ELECTRONIC SIGNATURE: Nothing contained in this communication is intended to constitute an
electronic signature unless a specific statement to the contrary is included in this
message.