You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@locus.apache.org on 2000/02/04 00:05:28 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/task ApacheConfig.java
costin 00/02/03 15:05:28
Modified: src/native/apache/jserv jserv_ajpv12.c
src/share/org/apache/tomcat/core ContextManager.java
RequestImpl.java
src/share/org/apache/tomcat/request SimpleMapper.java
src/share/org/apache/tomcat/service/connector
Ajp12ConnectionHandler.java
src/share/org/apache/tomcat/task ApacheConfig.java
Log:
- Added back ApacheConfig - it will generate the apache configuration file.
XXX need to update the docs, the only config for apache is to Include tomcat-apache.conf
( probably that can also be automated !)
- Updated Ajp12 to make use of the context and user informations from mod_jserv.
Problems: mod_jserv will not send the context if setHandler is used ( zone
works only for prefix mounts ).
PathTranslated is broken ( for 2.2 servlet API).
- As a result, Authentication works now in Apache + tomcat, with Apache dealing with user
authentication and authorization. ( not integrated into automatic config, you need to
set it up in apache.conf ).
Revision Changes Path
1.4 +3 -1 jakarta-tomcat/src/native/apache/jserv/jserv_ajpv12.c
Index: jserv_ajpv12.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/native/apache/jserv/jserv_ajpv12.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- jserv_ajpv12.c 1999/12/13 23:48:44 1.3
+++ jserv_ajpv12.c 2000/02/03 23:05:26 1.4
@@ -57,7 +57,7 @@
* Description: ajpv1.2 protocol, used to call local or remote jserv hosts *
* Author: Pierpaolo Fumagalli <ia...@iname.com> *
* Author: Michal Mosiewicz <mi...@interdata.pl> *
- * Version: $Revision: 1.3 $ *
+ * Version: $Revision: 1.4 $ *
*****************************************************************************/
#include "jserv.h"
@@ -486,6 +486,8 @@
* To get PATH_TRANSLATED, treat PATH_INFO as a URI path.
* Need to re-escape it for this, since the entire URI was
* un-escaped before we determined where the PATH_INFO began.
+ */
+ /* XXX In 2.2 we need to add "contextPath" or zone to the path_info !!!!!
*/
request_rec *pa_req;
1.32 +4 -0 jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
Index: ContextManager.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- ContextManager.java 2000/02/03 07:11:51 1.31
+++ ContextManager.java 2000/02/03 23:05:26 1.32
@@ -148,6 +148,10 @@
Context context = getContext((String)enum.nextElement());
context.init();
}
+
+ // After all context are configured, we can generate Apache configs
+ org.apache.tomcat.task.ApacheConfig apacheConfig=new org.apache.tomcat.task.ApacheConfig();
+ apacheConfig.execute( this );
}
/** Will start the connectors and begin serving requests
1.14 +16 -8 jakarta-tomcat/src/share/org/apache/tomcat/core/RequestImpl.java
Index: RequestImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestImpl.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- RequestImpl.java 2000/02/03 07:11:52 1.13
+++ RequestImpl.java 2000/02/03 23:05:27 1.14
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestImpl.java,v 1.13 2000/02/03 07:11:52 costin Exp $
- * $Revision: 1.13 $
- * $Date: 2000/02/03 07:11:52 $
+ * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestImpl.java,v 1.14 2000/02/03 23:05:27 costin Exp $
+ * $Revision: 1.14 $
+ * $Date: 2000/02/03 23:05:27 $
*
* ====================================================================
*
@@ -95,6 +95,7 @@
protected String lookupPath; // everything after contextPath before ?
protected String servletPath;
protected String pathInfo;
+ protected String pathTranslated;
protected Hashtable parameters = new Hashtable();
protected int contentLength = -1;
@@ -117,16 +118,18 @@
// Session
// set by interceptors - the session id
protected String reqSessionId;
- boolean sessionIdFromCookie=true;
- boolean sessionIdFromURL=false;
+ protected boolean sessionIdFromCookie=true;
+ protected boolean sessionIdFromURL=false;
// cache- avoid calling SessionManager for each getSession()
protected HttpSession serverSession;
// LookupResult - used by sub-requests and
// set by interceptors
- ServletWrapper handler = null;
- String mappedPath = null;
+ protected String servletName;
+ protected ServletWrapper handler = null;
+
+ protected String mappedPath = null;
protected String scheme;
protected String method;
@@ -240,7 +243,9 @@
// the real path for this ( i.e. the URI ).
// Check the PATH_TRANSLATED specs before changing!
- return context.getRealPath( getPathInfo() );
+ if( pathTranslated==null)
+ pathTranslated=context.getRealPath( getPathInfo() );
+ return pathTranslated;
}
@@ -249,6 +254,9 @@
}
public String getRemoteUser() {
+ if( remoteUser!=null)
+ return remoteUser;
+
// Using the Servlet 2.2 semantics ...
// return request.getRemoteUser();
java.security.Principal p = getUserPrincipal();
1.6 +1 -2 jakarta-tomcat/src/share/org/apache/tomcat/request/SimpleMapper.java
Index: SimpleMapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/request/SimpleMapper.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SimpleMapper.java 2000/02/03 07:11:54 1.5
+++ SimpleMapper.java 2000/02/03 23:05:27 1.6
@@ -105,14 +105,13 @@
String path = rrequest.getRequestURI();
Context ctx= this.getContextByPath(path);
+ rrequest.setContext(ctx);
// final fix on response & request
// rresponse.setServerHeader(server.getServerHeader());
-
String ctxPath = ctx.getPath();
String pathInfo =path.substring(ctxPath.length(),
path.length());
- rrequest.setContext(ctx);
String lookupPath=rrequest.getLookupPath();
1.11 +45 -8 jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp12ConnectionHandler.java
Index: Ajp12ConnectionHandler.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/connector/Ajp12ConnectionHandler.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Ajp12ConnectionHandler.java 2000/02/01 22:53:32 1.10
+++ Ajp12ConnectionHandler.java 2000/02/03 23:05:27 1.11
@@ -195,32 +195,68 @@
case 1: //beginning of request
method = ajpin.readString(null); //Method
- dummy = ajpin.readString(null); //Zone
- dummy = ajpin.readString(null); //Servlet
+
+ contextPath = ajpin.readString(null); //Zone
+ if("ROOT".equals( contextPath ) ) contextPath="";
+ // System.out.println("AJP: CP=" + contextPath);
+ if( contextPath!= null )
+ context=contextM.getContext( contextPath );
+
+ servletName = ajpin.readString(null); //Servlet
+
+ // System.out.println("AJP: servlet=" + servletName );
+
serverName = ajpin.readString(null); //Server hostname
+
dummy = ajpin.readString(null); //Apache document root
- dummy = ajpin.readString(null); //Apache parsed path-info
- dummy = ajpin.readString(null); //Apache parsed path-translated
+
+ pathInfo = ajpin.readString(null); //Apache parsed path-info
+ // System.out.println("AJP: PI=" + pathInfo );
+
+ // XXX Bug in mod_jserv !!!!!
+ pathTranslated = ajpin.readString(null); //Apache parsed path-translated
+ // System.out.println("AJP: PT=" + pathTranslated );
+
queryString = ajpin.readString(null); //query string
remoteAddr = ajpin.readString(""); //remote address
remoteHost = ajpin.readString(""); //remote host
- dummy = ajpin.readString(null); //remote user
- dummy = ajpin.readString(null); //auth type
+
+ remoteUser = ajpin.readString(null); //remote user
+ // System.out.println("Remote User: " + remoteUser);
+
+ authType = ajpin.readString(null); //auth type
+
dummy = ajpin.readString(null); //remote port
- dummy = ajpin.readString(null); //request method
+
+ method = ajpin.readString(null); //request method
+ // System.out.println("AJP: Meth=" + method );
+
requestURI = ajpin.readString(""); //request uri
+ if(contextPath!=null && contextPath.length() >0 )
+ lookupPath=requestURI.substring( contextPath.length() + 1 );
+ // System.out.println("AJP: URI: " + requestURI + " CP:" + contextPath + " LP: " + lookupPath);
+
dummy = ajpin.readString(null); //script filename
+ // System.out.println("AJP: Script filen=" + dummy);
+
dummy = ajpin.readString(null); //script name
+ // System.out.println("AJP: Script name=" + dummy);
+
serverName = ajpin.readString(""); //server name
try {
serverPort = Integer.parseInt(ajpin.readString("80")); //server port
} catch (Exception any) {
serverPort = 80;
}
- dummy = ajpin.readString(""); //server protocol
+
+ dummy = ajpin.readString(""); //server protocol
+ // System.out.println("AJP: Server proto=" + dummy);
dummy = ajpin.readString(""); //server signature
+ // System.out.println("AJP: Server sign=" + dummy);
dummy = ajpin.readString(""); //server software
+ // System.out.println("AJP: Server softw=" + dummy);
dummy = ajpin.readString(""); //JSERV ROUTE
+ // System.out.println("AJP: JServ Route=" + dummy);
/**
* The two following lines are commented out because we don't
* want to depend on unreleased versions of the jserv module.
@@ -285,6 +321,7 @@
throw ioe;
} catch (Exception e) {
System.err.println("Uncaught exception" + e);
+ e.printStackTrace();
}
// REQUEST_URI includes query string
1.2 +66 -13 jakarta-tomcat/src/share/org/apache/tomcat/task/ApacheConfig.java
Index: ApacheConfig.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/task/ApacheConfig.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ApacheConfig.java 2000/01/25 03:04:20 1.1
+++ ApacheConfig.java 2000/02/03 23:05:28 1.2
@@ -73,18 +73,49 @@
*/
public class ApacheConfig { // implements XXX
// XXX maybe conf/
- public static final String APACHE_CONFIG="/etc/tomcat-apache.conf";
+ public static final String APACHE_CONFIG="/conf/tomcat-apache.conf";
public ApacheConfig() {
}
+ String findApache() {
+ return null;
+ }
+
public void execute(ContextManager cm) throws TomcatException {
try {
String tomcatHome= cm.getHome();
+ String apacheHome=findApache();
+
System.out.println("Tomcat home= " + tomcatHome);
FileWriter configW=new FileWriter( tomcatHome + APACHE_CONFIG);
PrintWriter pw=new PrintWriter( configW );
+
+ if( System.getProperty( "os.name" ).equalsIgnoreCase("windows") ) {
+ pw.println("LoadModule jserv_module modules/ApacheModuleJServ.dll");
+ } else {
+ // XXX XXX change it to mod_jserv_${os.name}.so, put all so in tomcat
+ // home
+ pw.println("LoadModule jserv_module libexec/mod_jserv.so");
+ }
+
+ pw.println("ApJServManual on");
+ pw.println("ApJServDefaultProtocol ajpv12");
+ pw.println("ApJServSecretKey DISABLED");
+ pw.println("ApJServMountCopy on");
+ pw.println("ApJServLogLevel notice");
+ pw.println();
+
+ // XXX read it from ContextManager
+ pw.println("ApJServDefaultPort 8007");
+
+ pw.println();
+ pw.println("AddType test/jsp .jsp");
+ pw.println("AddHandler jserv-servlet .jsp");
+
+
+ // Set up contexts
Enumeration enum = cm.getContextNames();
while (enum.hasMoreElements()) {
@@ -93,23 +124,44 @@
if( path.length() > 1) {
// It's not the root context
// assert path.startsWith( "/" )
+
+ // Static files will be served by Apache
pw.println("Alias " + path + " " + tomcatHome + "/webapps" + path);
+
+ // Dynamic /servet pages go to tomcat
pw.println("ApJServMount " + path +"/servlet" + " " + path);
+
+ // Deny WEB-INF
pw.println("<Location " + path + "/WEB-INF/ >");
pw.println(" AllowOverride None");
pw.println(" deny from all");
pw.println("</Location>");
pw.println();
- pw.println("<Location " + path + "/servlet/ >");
- pw.println(" AllowOverride None");
- pw.println(" SetHandler jserv-servlet");
- pw.println("</Location>");
- pw.println();
- pw.println("<Location " + path + " >");
- pw.println(" AllowOverride None");
- pw.println(" AddHandler jserv-servlet .jsp");
- pw.println(" Options Indexes");
- pw.println("</Location>");
+
+ // SetHandler broken in jserv ( no zone is sent )
+ // pw.println("<Location " + path + "/servlet/ >");
+ // pw.println(" AllowOverride None");
+ // pw.println(" SetHandler jserv-servlet");
+ // pw.println("</Location>");
+ // pw.println();
+
+ // XXX check security
+ if( false ) {
+ pw.println("<Location " + path + "/servlet/ >");
+ pw.println(" AllowOverride None");
+ pw.println(" AuthName \"restricted \"");
+ pw.println(" AuthType Basic");
+ pw.println(" AuthUserFile conf/users");
+ pw.println(" require valid-user");
+ pw.println("</Location>");
+ }
+
+ // SetHandler broken in jserv ( no zone is sent )
+ // pw.println("<Location " + path + " >");
+ // pw.println(" AllowOverride None");
+ // pw.println(" AddHandler jserv-servlet .jsp");
+ // pw.println(" Options Indexes");
+ // pw.println("</Location>");
// XXX ErrorDocument
@@ -126,8 +178,9 @@
pw.close();
} catch( Exception ex ) {
- ex.printStackTrace();
- throw new TomcatException( "Error generating Apache config", ex );
+ // ex.printStackTrace();
+ //throw new TomcatException( "Error generating Apache config", ex );
+ System.out.println("Failed to generate automactic apache confiugration " + ex.toString());
}
}