amyroh 2003/02/10 19:34:43 Modified: webapps/admin build.xml webapps/admin/WEB-INF/classes/org/apache/webapp/admin ApplicationResources_en.properties ApplicationResources_es.properties webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve RemoteAddrValveForm.java RemoteHostValveForm.java ValveUtil.java Log: Port change. Revision Changes Path 1.7 +8 -0 jakarta-tomcat-catalina/webapps/admin/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/build.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- build.xml 28 Jan 2003 16:37:20 -0000 1.6 +++ build.xml 11 Feb 2003 03:34:43 -0000 1.7 @@ -29,6 +29,7 @@ <pathelement location="${struts.jar}"/> <pathelement location="${commons-beanutils.jar}"/> <pathelement location="${commons-digester.jar}"/> + <pathelement location="${regexp.jar}"/> </path> @@ -72,6 +73,9 @@ <available property="beanutils.present" classname="org.apache.commons.beanutils.PropertyUtils" classpath="${common-beanutils.jar}" /> + <available property="regexp.present" + classname="org.apache.regexp.RE" + classpath="${regexp.jar}" /> <!-- JAR files availability flags --> @@ -81,6 +85,7 @@ <available property="jsp-api.jar.present" file="${jsp-api.jar}" /> <available property="struts.jar.present" file="${struts.jar}" /> <available property="beanutils.jar.present" file="${commons-beanutils.jar}" /> + <available property="regexp.jar.present" file="${regexp.jar}" /> <!-- Conditional compilation flags (determined from the flags above) --> <condition property="compile.admin"> @@ -90,6 +95,7 @@ <equals arg1="${struts.present}" arg2="true" /> <equals arg1="${jmx.present}" arg2="true" /> <equals arg1="${modeler.present}" arg2="true" /> + <equals arg1="${regexp.present}" arg2="true" /> <available file="${struts.lib}/struts-bean.tld" /> <available file="${struts.lib}/struts-html.tld" /> <available file="${struts.lib}/struts-logic.tld" /> @@ -136,6 +142,7 @@ <echo message="modeler.present=${modeler.present}" /> <echo message="servlet.present=${servlet.present}" /> <echo message="jsp.present=${jsp.present}" /> + <echo message="regexp.present=${regexp.present}" /> <echo message="--- Required JARs ---" /> <echo message="jmx.jar.present=${jmx.jar.present}" /> @@ -144,6 +151,7 @@ <echo message="jsp-api.jar.present=${jsp-api.jar.present}" /> <echo message="struts.jar.present=${struts.jar.present}" /> <echo message="beanutils.jar.present=${beanutils.jar.present}" /> + <echo message="regexp.jar.present=${regexp.jar.present}" /> <echo message="--- Optional JARs ---" /> 1.9 +6 -0 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/ApplicationResources_en.properties Index: ApplicationResources_en.properties =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/ApplicationResources_en.properties,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ApplicationResources_en.properties 23 Jan 2003 00:07:07 -0000 1.8 +++ ApplicationResources_en.properties 11 Feb 2003 03:34:43 -0000 1.9 @@ -253,6 +253,12 @@ valve.denyHosts=Deny these Hosts valve.allowIPs=Allow IP addresses valve.denyIPs=Deny IP addresses +error.allowHost=<li>Allow is invalid. Need to include the admin's Hostname.</li> +error.denyHost=<li>Deny is invalid. Need to exclude the admin's Hostname.</li> +error.allowIP=<li>Allow is invalid. Need to include the admin's IP address.</li> +error.denyIP=<li>Deny is invalid. Need to exclude the admin's IP address.</li> +error.allow.deny.required=<li>Allow or deny is required.</li> +error.syntax=<li>Syntax error in request filter pattern.</li> error.resource.required=<li>Resource Name is required.</li> error.resource.javaprefix=<li>Resource must have "java:" prefix.</li> error.pathName.required=<li>Path Name is required.</li> 1.9 +6 -0 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/ApplicationResources_es.properties Index: ApplicationResources_es.properties =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/ApplicationResources_es.properties,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ApplicationResources_es.properties 23 Jan 2003 00:07:07 -0000 1.8 +++ ApplicationResources_es.properties 11 Feb 2003 03:34:43 -0000 1.9 @@ -252,6 +252,12 @@ valve.denyHosts=Niegue estos Hosts valve.allowIPs=Permitir estas direcciones IP valve.denyIPs=Rechazar estas direcciones IP +error.allowHost=<li>Permita es inválido. Necesidad de incluir el hostname del admin.</li> +error.denyHost=<li>Niegue es inválido. Necesidad de excluir el hostname del admin.</li> +error.allowIP=<li>Permita es inválido. Necesidad de incluir el IP ADDRESS del admin.</li> +error.denyIP=<li>Niegue es inválido. Necesidad de excluir el IP ADDRESS del admin.</li> +error.allow.deny.required=<li>Permita o niegue se requiere.</li> +error.syntax=<li>Error del sintaxis en patrón del filtro de la petición.</li> error.resource.required=<li>Se requiere el nombre del recurso.</li> error.resource.javaprefix=<li>El recurso debe tener prefijo de "java:"</li> error.pathName.required=<li>Se requiere el nombre del path.</li> 1.2 +82 -10 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/RemoteAddrValveForm.java Index: RemoteAddrValveForm.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/RemoteAddrValveForm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- RemoteAddrValveForm.java 18 Jul 2002 16:48:28 -0000 1.1 +++ RemoteAddrValveForm.java 11 Feb 2003 03:34:43 -0000 1.2 @@ -61,13 +61,16 @@ package org.apache.webapp.admin.valve; +import java.lang.IllegalArgumentException; +import java.net.InetAddress; +import java.util.List; import javax.servlet.http.HttpServletRequest; +import org.apache.regexp.RE; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; -import java.net.InetAddress; -import java.util.List; + import org.apache.webapp.admin.ApplicationServlet; import org.apache.webapp.admin.LabelValueBean; @@ -83,6 +86,7 @@ // ----------------------------------------------------- Instance Variables + /** * The text for the allow IP addresses. * A comma-separated list of regular expression patterns @@ -94,6 +98,17 @@ * The text for the deny IP addresses. */ private String deny = ""; + + /** + * The set of <code>allow</code> regular expressions we will evaluate. + */ + private RE allows[] = new RE[0]; + + /** + * The set of <code>deny</code> regular expressions we will evaluate. + */ + private RE denies[] = new RE[0]; + // ------------------------------------------------------------- Properties @@ -135,6 +150,7 @@ // --------------------------------------------------------- Public Methods + /** * Reset all properties to their default values. * @@ -146,6 +162,8 @@ super.reset(mapping, request); this.allow = null; this.deny = null; + this.allows = null; + this.denies = null; } @@ -188,10 +206,64 @@ String submit = request.getParameter("submit"); // front end validation when save is clicked. - if (submit != null) { - // validate allow/deny patterns? - } - + if (submit != null) { + // validate allow/deny patterns + if ((allow == null) || (allow.length() < 1)) { + if ((deny == null) || (deny.length() < 1)) { + errors.add("allow", + new ActionError("error.allow.deny.required")); + } + } + } + + try { + allows = ValveUtil.precalculate(allow); + } catch (IllegalArgumentException e) { + errors.add("allow", new ActionError("error.syntax")); + return errors; + } + + try { + denies = ValveUtil.precalculate(deny); + } catch (IllegalArgumentException e) { + errors.add("allow", new ActionError("error.syntax")); + return errors; + } + + String ip = request.getRemoteAddr(); + + if (ip == null) { + return errors; + } + + for (int i = 0; i < denies.length; i++) { + if (denies[i].match("127.0.0.1")) { + errors.add("deny", + new ActionError("error.denyIP")); + } + if (denies[i].match(ip)) { + for (int j = 0; j < allows.length; j++) { + if (!allows[j].match(ip)) { + errors.add("deny", + new ActionError("error.denyIP")); + } + } + } + } + + boolean allowMatch = true; + if (allows.length > 0) { + allowMatch = false; + } + for (int i = 0; i < allows.length; i++) { + if (allows[i].match(ip)) { + allowMatch = true; + } + } + if (!allowMatch) { + errors.add("allow", new ActionError("error.allowIP")); + } + return errors; } } 1.2 +94 -8 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/RemoteHostValveForm.java Index: RemoteHostValveForm.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/RemoteHostValveForm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- RemoteHostValveForm.java 18 Jul 2002 16:48:28 -0000 1.1 +++ RemoteHostValveForm.java 11 Feb 2003 03:34:43 -0000 1.2 @@ -61,13 +61,16 @@ package org.apache.webapp.admin.valve; +import java.lang.IllegalArgumentException; +import java.net.InetAddress; +import java.util.List; import javax.servlet.http.HttpServletRequest; + +import org.apache.regexp.RE; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; -import java.net.InetAddress; -import java.util.List; import org.apache.webapp.admin.ApplicationServlet; import org.apache.webapp.admin.LabelValueBean; @@ -83,6 +86,7 @@ // ----------------------------------------------------- Instance Variables + /** * The text for the allow hosts IP addresses. * A comma-separated list of regular expression patterns @@ -95,6 +99,17 @@ */ private String deny = ""; + /** + * The set of <code>allow</code> regular expressions we will evaluate. + */ + private RE allows[] = new RE[0]; + + /** + * The set of <code>deny</code> regular expressions we will evaluate. + */ + private RE denies[] = new RE[0]; + + // ------------------------------------------------------------- Properties /** @@ -146,6 +161,8 @@ super.reset(mapping, request); this.allow = null; this.deny = null; + this.allows = null; + this.denies = null; } @@ -188,10 +205,79 @@ String submit = request.getParameter("submit"); // front end validation when save is clicked. - if (submit != null) { + if (submit != null) { // TBD // validate allow/deny IPs - } + if ((allow == null) || (allow.length() < 1)) { + if ((deny == null) || (deny.length() < 1)) { + errors.add("allow", + new ActionError("error.allow.deny.required")); + } + } + } + + try { + allows = ValveUtil.precalculate(allow); + } catch (IllegalArgumentException e) { + errors.add("allow", new ActionError("error.syntax")); + return errors; + } + + try { + denies = ValveUtil.precalculate(deny); + } catch (IllegalArgumentException e) { + errors.add("allow", new ActionError("error.syntax")); + return errors; + } + + String host = request.getRemoteHost(); + // check for IP address also in case DNS is not configured + // to give a host name for the client machine + String ip = request.getRemoteAddr(); + + if (host == null) { + return errors; + } + + for (int i = 0; i < denies.length; i++) { + if (denies[i].match("localhost") || + denies[i].match("127.0.0.1")) { + errors.add("deny", + new ActionError("error.denyHost")); + } + if (denies[i].match(host)) { + for (int j = 0; j < allows.length; j++) { + if (!allows[j].match(host)) { + errors.add("deny", + new ActionError("error.denyHost")); + } + } + } else if (denies[i].match(ip)) { + for (int j = 0; j < allows.length; j++) { + if (!allows[j].match(ip)) { + errors.add("deny", + new ActionError("error.denyHost")); + } + } + } + } + + boolean allowMatch = true; + + if ((allows != null) && (allows.length > 0)) { + allowMatch = false; + } + + for (int i = 0; i < allows.length; i++) { + if (allows[i].match(host)) { + allowMatch = true; + } + } + + if (!allowMatch) { + errors.add("allow", new ActionError("error.allowHost")); + } + return errors; } 1.3 +52 -7 jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/ValveUtil.java Index: ValveUtil.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/admin/WEB-INF/classes/org/apache/webapp/admin/valve/ValveUtil.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ValveUtil.java 10 Feb 2003 04:27:10 -0000 1.2 +++ ValveUtil.java 11 Feb 2003 03:34:43 -0000 1.3 @@ -62,6 +62,7 @@ package org.apache.webapp.admin.valve; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Iterator; import java.util.Locale; import java.io.IOException; @@ -77,6 +78,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.regexp.RE; +import org.apache.regexp.RESyntaxException; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; @@ -133,7 +136,7 @@ String operation = null; String values[] = null; String vObjectName = null; - + try { String objectName = DeleteLoggerAction.getObjectName(parent, @@ -158,8 +161,7 @@ servlet.log(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); - } - + } // Ensure that the requested valve name is unique // TBD -- do we need this check? @@ -188,6 +190,7 @@ operation = "create" + valveType; if ("AccessLogValve".equalsIgnoreCase(valveType)) operation = "createAccessLoggerValve"; + vObjectName = (String) mBServer.invoke(fname, operation, values, createStandardValveTypes); @@ -238,4 +241,46 @@ session.removeAttribute(mapping.getAttribute()); return vObjectName; } + + + /** + * Return an array of regular expression objects initialized from the + * specified argument, which must be <code>null</code> or a comma-delimited + * list of regular expression patterns. + * + * @param list The comma-separated list of patterns + * + * @exception IllegalArgumentException if one of the patterns has + * invalid syntax + */ + public static RE[] precalculate(String list) + throws IllegalArgumentException { + + if (list == null) + return (new RE[0]); + list = list.trim(); + if (list.length() < 1) + return (new RE[0]); + list += ","; + + ArrayList reList = new ArrayList(); + while (list.length() > 0) { + int comma = list.indexOf(','); + if (comma < 0) + break; + String pattern = list.substring(0, comma).trim(); + try { + reList.add(new RE(pattern)); + } catch (RESyntaxException e) { + throw new IllegalArgumentException + ("Syntax error in request filter pattern"); + } + list = list.substring(comma + 1); + } + + RE reArray[] = new RE[reList.size()]; + return ((RE[]) reList.toArray(reArray)); + + } + }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]