diff --git a/changehat/tomcat_apparmor/tomcat_5_5/Makefile b/changehat/tomcat_apparmor/tomcat_5_5/Makefile index ed73e2e16..da08166c5 100644 --- a/changehat/tomcat_apparmor/tomcat_5_5/Makefile +++ b/changehat/tomcat_apparmor/tomcat_5_5/Makefile @@ -27,11 +27,11 @@ common/Make.rules: $(COMMONDIR)/Make.rules endif LIB = lib -CATALINA_HOME = /usr/share/tomcat5 +CATALINA_HOME = /usr/share/tomcat55 + -# By default build 1.4 bytecode all: - ant -Dtarget=1.4 jar jni_so + ant -Dcatalina_home=${CATALINA_HOME} -Dtarget=1.5 jar jni_so clean: ant clean diff --git a/changehat/tomcat_apparmor/tomcat_5_5/build.xml b/changehat/tomcat_apparmor/tomcat_5_5/build.xml index c65da220b..171444624 100644 --- a/changehat/tomcat_apparmor/tomcat_5_5/build.xml +++ b/changehat/tomcat_apparmor/tomcat_5_5/build.xml @@ -18,10 +18,10 @@ - + - + @@ -54,6 +54,7 @@ + diff --git a/changehat/tomcat_apparmor/tomcat_5_5/src/com/novell/apparmor/catalina/valves/ChangeHatValve.java b/changehat/tomcat_apparmor/tomcat_5_5/src/com/novell/apparmor/catalina/valves/ChangeHatValve.java index ba6e222a6..a65fa2f13 100644 --- a/changehat/tomcat_apparmor/tomcat_5_5/src/com/novell/apparmor/catalina/valves/ChangeHatValve.java +++ b/changehat/tomcat_apparmor/tomcat_5_5/src/com/novell/apparmor/catalina/valves/ChangeHatValve.java @@ -1,11 +1,11 @@ -/* ------------------------------------------------------------------ - * - * Copyright (C) 2002-2005 Novell/SUSE - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License published by the Free Software Foundation. - * +/* ------------------------------------------------------------------ + * + * Copyright (C) 2002-2007 Novell/SUSE + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License published by the Free Software Foundation. + * * ------------------------------------------------------------------ */ package com.novell.apparmor.catalina.valves; @@ -13,10 +13,7 @@ package com.novell.apparmor.catalina.valves; import com.novell.apparmor.JNIChangeHat; import java.io.IOException; import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import org.apache.catalina.HttpRequest; import org.apache.catalina.Container; -import org.apache.catalina.HttpResponse; import org.apache.catalina.valves.ValveBase; import java.security.SecureRandom; @@ -28,9 +25,9 @@ public final class ChangeHatValve extends ValveBase { private static String DEFAULT_HAT = "DEFAULT"; private static int SERVLET_PATH_MEDIATION = 0; private static int URI_MEDIATION = 1; - + private int mediationType = ChangeHatValve.SERVLET_PATH_MEDIATION; - + /* * * Property setter called during the parsing of the server.xml. @@ -53,18 +50,18 @@ public final class ChangeHatValve extends ValveBase { this.mediationType = ChangeHatValve.SERVLET_PATH_MEDIATION; } } - + /* * * Return an int value representing the currently configured * mediationType for this instance. * */ - int getMediationType() { + public int getMediationType() { return this.mediationType; } - - + + /* * * Return an instance of SecureRandom creating one if necessary @@ -76,7 +73,7 @@ public final class ChangeHatValve extends ValveBase { } return ChangeHatValve.randomNumberGenerator; } - + /* * * Call to return a random cookie from the SecureRandom PRNG @@ -85,13 +82,15 @@ public final class ChangeHatValve extends ValveBase { int getCookie() { SecureRandom rnd = getRndGen(); if ( rnd == null ) { - this.getContainer().getLogger().log( "[APPARMOR] can't initialize SecureRandom for cookie generation for change_hat() call.", container.getLogger().ERROR); + this.getContainer().getLogger().error( + "[APPARMOR] can't initialize SecureRandom for cookie" + + " generation for change_hat() call."); return 0; } return rnd.nextInt(); } - - + + /* * * Call out to AppArmor change_hat(2) to change the security @@ -110,87 +109,71 @@ public final class ChangeHatValve extends ValveBase { * @exception ServletException if a servlet error has occurred * */ - public void invoke( org.apache.catalina.Request request, - org.apache.catalina.Response response, - org.apache.catalina.ValveContext context ) + public void invoke( org.apache.catalina.connector.Request request, + org.apache.catalina.connector.Response response ) throws IOException, ServletException { - + Container container = this.getContainer(); int cookie, result; boolean inSubHat = false; - container.getLogger().log(this.getClass().toString() + - "[APPARMOR] Request received [" + request.getInfo() - + "]", container.getLogger().DEBUG); - - if ( !( request instanceof HttpRequest) - || !(response instanceof HttpResponse) ) { - container.getLogger().log(this.getClass().toString() - + "[APPARMOR] Non HttpRequest received. Not changing context. " - + "[" + request.getInfo() + "]", container.getLogger().ERROR); - context.invokeNext(request, response); - return; - } - - HttpRequest httpRequest = (HttpRequest) request; - HttpServletRequest servletRequest = (HttpServletRequest) - httpRequest.getRequest(); - + container.getLogger().debug(this.getClass().toString() + + "[APPARMOR] Request received [" + request.getInfo() + + "]"); + String hatname = ChangeHatValve.DEFAULT_HAT;; if ( getMediationType() == ChangeHatValve.SERVLET_PATH_MEDIATION ) { - hatname = servletRequest.getServletPath(); + hatname = request.getServletPath(); } else if ( getMediationType() == ChangeHatValve.URI_MEDIATION ) { - hatname = servletRequest.getRequestURI(); + hatname = request.getRequestURI(); } - + /* * Select the AppArmor container for this request: - * - * 1. try hat name from either URI or ServletPath + * + * 1. try hat name from either URI or ServletPath * (based on configuration) - * - * 2. try hat name of the defined DEFAULT_HAT - * + * + * 2. try hat name of the defined DEFAULT_HAT + * * 3. run in the current AppArmor context */ - + cookie = getCookie(); if ( hatname == null || "".equals(hatname) ) { hatname = ChangeHatValve.DEFAULT_HAT; - } - container.getLogger().log("[APPARMOR] ChangeHat to [" + hatname - + "] cookie [" + cookie + "]", container.getLogger().DEBUG); - + } + container.getLogger().debug("[APPARMOR] ChangeHat to [" + hatname + + "] cookie [" + cookie + "]"); + result = changehat_wrapper.changehat_in(hatname, cookie); - + if ( result == JNIChangeHat.EPERM ) { - container.getLogger().log("[APPARMOR] change_hat valve " + + container.getLogger().error("[APPARMOR] change_hat valve " + "configured but Tomcat process is not confined by an " + - "AppArmor profile.", container.getLogger().ERROR); - context.invokeNext(request, response); + "AppArmor profile."); + getNext().invoke(request, response); } else { if ( result == JNIChangeHat.EACCES ) { - changehat_wrapper.changehat_out(cookie); - result = changehat_wrapper.changehat_in(ChangeHatValve.DEFAULT_HAT, - cookie); - if ( result != 0 ) { - changehat_wrapper.changehat_out(cookie); - container.getLogger().log("[APPARMOR] ChangeHat to [" + hatname - + "] failed. Running in parent context.", - container.getLogger().ERROR); - } else { - inSubHat = true; - } - } else if ( result != 0 ) { - changehat_wrapper.changehat_out(cookie); - container.getLogger().log("[APPARMOR] ChangeHat to [" + hatname - + "] failed. Running in parent context.", - container.getLogger().ERROR); - } else { - inSubHat = true; - } - context.invokeNext(request, response); - if ( inSubHat ) changehat_wrapper.changehat_out(cookie); + changehat_wrapper.changehat_out(cookie); + result = changehat_wrapper.changehat_in(ChangeHatValve.DEFAULT_HAT, + cookie); + if ( result != 0 ) { + changehat_wrapper.changehat_out(cookie); + container.getLogger().error("[APPARMOR] ChangeHat to [" + hatname + + "] failed. Running in parent context."); + } else { + inSubHat = true; + } + } else if ( result != 0 ) { + changehat_wrapper.changehat_out(cookie); + container.getLogger().error("[APPARMOR] ChangeHat to [" + hatname + + "] failed. Running in parent context."); + } else { + inSubHat = true; + } + getNext().invoke(request, response); + if ( inSubHat ) changehat_wrapper.changehat_out(cookie); } } } diff --git a/changehat/tomcat_apparmor/tomcat_5_5/src/jni_src/Makefile b/changehat/tomcat_apparmor/tomcat_5_5/src/jni_src/Makefile index c7cb97ea8..34e593923 100644 --- a/changehat/tomcat_apparmor/tomcat_5_5/src/jni_src/Makefile +++ b/changehat/tomcat_apparmor/tomcat_5_5/src/jni_src/Makefile @@ -1,15 +1,15 @@ -INCLUDE=/usr/lib/jvm/java/include -TOP=../.. -CLASSPATH=${TOP}/build -CFLAGS=-g -O2 -Wall -Wstrict-prototypes -Wl,-soname,$@.${SO_VERS} -pipe -fpic -D_REENTRANT -INCLUDES=-I$(INCLUDE) -I$(INCLUDE)/linux -CLASSFILE=${CLASSPATH}/com/novell/apparmor/${JAVA_CLASSNAME}.class -DESTDIR=${TOP}/dist -SO_VERS = 1 -LIB = lib/ -LIBDIR = /usr/${LIB} -JAVA_CLASSNAME=JNIChangeHat -TARGET=lib${JAVA_CLASSNAME} +TOP = ../.. +CLASSPATH = ${TOP}/build +LIB = lib/ +LIBDIR = /usr/${LIB} +INCLUDE = ${LIBDIR}/jvm/java/include +CFLAGS = -g -O2 -Wall -Wstrict-prototypes -Wl,-soname,$@.${SO_VERS} -pipe -fpic -D_REENTRANT +INCLUDES = -I$(INCLUDE) -I$(INCLUDE)/linux +CLASSFILE = ${CLASSPATH}/com/novell/apparmor/${JAVA_CLASSNAME}.class +DESTDIR = ${TOP}/dist +SO_VERS = 1 +JAVA_CLASSNAME = JNIChangeHat +TARGET = lib${JAVA_CLASSNAME} all: ${TARGET}.so diff --git a/changehat/tomcat_apparmor/tomcat_5_5/tomcat_apparmor.spec.in b/changehat/tomcat_apparmor/tomcat_5_5/tomcat_apparmor.spec.in index 94dc8c477..4aeca36e0 100644 --- a/changehat/tomcat_apparmor/tomcat_5_5/tomcat_apparmor.spec.in +++ b/changehat/tomcat_apparmor/tomcat_5_5/tomcat_apparmor.spec.in @@ -23,7 +23,7 @@ %endif %if %{distro} == "suse" -%define CATALINA_HOME /usr/share/tomcat5 +%define CATALINA_HOME /usr/share/tomcat55 %endif %define APPARMOR_DOC_DIR /usr/share/doc/packages/apparmor-docs/ %define JNI_SO libJNIChangeHat.so @@ -39,9 +39,8 @@ Source0: %{name}-%{version}-@@repo_version@@.tar.gz License: LGPL BuildRoot: %{?_tmppath:}%{!?_tmppath:/var/tmp}/%{name}-%{version}-build Url: http://developer.novell.com/wiki/index.php/Novell_AppArmor -Prereq: tomcat5, servletapi5, libapparmor -BuildRequires: tomcat5, servletapi5 ant, java, libapparmor, java2-devel-packages, apparmor-docs -Provides: tomcat_apparmor +Prereq: tomcat55, servletapi5, libapparmor +BuildRequires: tomcat55, servletapi5, ant, java, libapparmor, java2-devel-packages, apparmor-docs %description tomcat_apparmor - is a plugin for Apache Tomcat version 5.x that provides @@ -57,7 +56,7 @@ URL processing or per servlet. %build [ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT} -ant -Ddist=${RPM_BUILD_DIR}/%{name}-%{version} -Dtarget=1.4 jar jni_so +ant -Dinstall_lib=%{_lib} -Dcatalina_home=%{CATALINA_HOME} -Ddist=${RPM_BUILD_DIR}/%{name}-%{version} -Dtarget=1.4 jar jni_so %install ant -Ddist=${RPM_BUILD_DIR}/%{name}-%{version} -Dversion=%{version} -Drelease=%{release} -Dcatalina_home=%{CATALINA_HOME} -Dinstall_root=${RPM_BUILD_ROOT} -Dinstall_lib=%{_lib} install_jar install_jni