This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 886c988a25872eec14766e89e0a9a19f309381bb Author: Mark Thomas <ma...@apache.org> AuthorDate: Mon Jan 15 13:33:59 2024 +0000 Align with 9.0.x onwards --- .../apache/catalina/ssi/ExpressionParseTree.java | 8 ++-- .../apache/catalina/ssi/LocalStrings.properties | 46 ++++++++++++++++++++++ .../apache/catalina/ssi/LocalStrings_fr.properties | 46 ++++++++++++++++++++++ .../apache/catalina/ssi/LocalStrings_ja.properties | 46 ++++++++++++++++++++++ .../apache/catalina/ssi/LocalStrings_ko.properties | 46 ++++++++++++++++++++++ .../catalina/ssi/LocalStrings_zh_CN.properties | 46 ++++++++++++++++++++++ .../catalina/ssi/ResponseIncludeWrapper.java | 6 +-- java/org/apache/catalina/ssi/SSIConfig.java | 6 ++- java/org/apache/catalina/ssi/SSIEcho.java | 9 +++-- java/org/apache/catalina/ssi/SSIExec.java | 8 ++-- java/org/apache/catalina/ssi/SSIFilter.java | 2 +- java/org/apache/catalina/ssi/SSIFlastmod.java | 9 +++-- java/org/apache/catalina/ssi/SSIFsize.java | 11 ++++-- java/org/apache/catalina/ssi/SSIInclude.java | 10 +++-- java/org/apache/catalina/ssi/SSIMediator.java | 19 ++++----- java/org/apache/catalina/ssi/SSIServlet.java | 2 - .../catalina/ssi/SSIServletExternalResolver.java | 24 +++++------ java/org/apache/catalina/ssi/SSISet.java | 10 +++-- 18 files changed, 303 insertions(+), 51 deletions(-) diff --git a/java/org/apache/catalina/ssi/ExpressionParseTree.java b/java/org/apache/catalina/ssi/ExpressionParseTree.java index c79623814a..1199f6b1f7 100644 --- a/java/org/apache/catalina/ssi/ExpressionParseTree.java +++ b/java/org/apache/catalina/ssi/ExpressionParseTree.java @@ -24,6 +24,7 @@ import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import org.apache.tomcat.util.ExceptionUtils; +import org.apache.tomcat.util.res.StringManager; /** * Represents a parsed expression. @@ -31,6 +32,7 @@ import org.apache.tomcat.util.ExceptionUtils; * @author Paul Speed */ public class ExpressionParseTree { + private static final StringManager sm = StringManager.getManager(ExpressionParseTree.class); /** * Contains the current set of completed nodes. This is a workspace for the parser. Needs to be LinkedList since it * can contain {@code null}s. @@ -214,13 +216,13 @@ public class ExpressionParseTree { // Finish off the rest of the opps resolveGroup(); if (nodeStack.size() == 0) { - throw new ParseException("No nodes created.", et.getIndex()); + throw new ParseException(sm.getString("expressionParseTree.noNodes"), et.getIndex()); } if (nodeStack.size() > 1) { - throw new ParseException("Extra nodes created.", et.getIndex()); + throw new ParseException(sm.getString("expressionParseTree.extraNodes"), et.getIndex()); } if (oppStack.size() != 0) { - throw new ParseException("Unused opp nodes exist.", et.getIndex()); + throw new ParseException(sm.getString("expressionParseTree.unusedOpCodes"), et.getIndex()); } root = nodeStack.get(0); } diff --git a/java/org/apache/catalina/ssi/LocalStrings.properties b/java/org/apache/catalina/ssi/LocalStrings.properties new file mode 100644 index 0000000000..68736ee66d --- /dev/null +++ b/java/org/apache/catalina/ssi/LocalStrings.properties @@ -0,0 +1,46 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +expressionParseTree.extraNodes=Extra nodes created +expressionParseTree.invalidExpression=Invalid expression [{0}] +expressionParseTree.noNodes=No nodes created +expressionParseTree.unusedOpCodes=Unused nodes exist + +ssiCommand.invalidAttribute=Invalid attribute [{0}] + +ssiEcho.invalidEncoding=Invalid encoding [{0}] + +ssiExec.executeFailed=Cannot execute file [{0}] + +ssiFlastmod.noLastModified=Cannot get last modification date for file [{0}] + +ssiFsize.invalidNumChars=The number of characters cannot be negative +ssiFsize.noSize=Cannot get size for file [{0}] + +ssiInclude.includeFailed=Cannot include file [{0}] + +ssiMediator.unknownEncoding=Unknown encoding [{0}] + +ssiServletExternalResolver.absoluteNonVirtualPath=Non virtual [{0}] path cannot be absolute +ssiServletExternalResolver.noContext=No context for path normalized to [{0}] +ssiServletExternalResolver.noFile=File [{0}] not found +ssiServletExternalResolver.noIncludeFile=Include file [{0}] not found +ssiServletExternalResolver.noResource=Context did not contain resource [{0}] +ssiServletExternalResolver.normalizationError=Normalization returned null for path [{0}] +ssiServletExternalResolver.pathTraversalNonVirtualPath=Non virtual path [{0}] cannot contain path traversal sequences +ssiServletExternalResolver.removeFilenameError=Cannot remove filename from path [{0}] +ssiServletExternalResolver.requestDispatcherError=Cannot get request dispatcher for path [{0}] + +ssiSet.noVariable=No variable specified diff --git a/java/org/apache/catalina/ssi/LocalStrings_fr.properties b/java/org/apache/catalina/ssi/LocalStrings_fr.properties new file mode 100644 index 0000000000..b85636645c --- /dev/null +++ b/java/org/apache/catalina/ssi/LocalStrings_fr.properties @@ -0,0 +1,46 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +expressionParseTree.extraNodes=Des nœuds supplémentaires ont été crées +expressionParseTree.invalidExpression=L''expression [{0}] est invalide +expressionParseTree.noNodes=Aucun nœud n'a été crée +expressionParseTree.unusedOpCodes=Il y a des nœuds non utilisés + +ssiCommand.invalidAttribute=L''attribut [{0}] est invalide + +ssiEcho.invalidEncoding=L''encodage [{0}] est invalide + +ssiExec.executeFailed=Impossible d''exécuter le fichier [{0}] + +ssiFlastmod.noLastModified=Impossible d''obtenir la date de dernière modification du fichier [{0}] + +ssiFsize.invalidNumChars=Le nombre de caractères ne peut être négatif +ssiFsize.noSize=Impossible d''obtenir la taille du fichier [{0}] + +ssiInclude.includeFailed=Impossible d''inclure le fichier [{0}] + +ssiMediator.unknownEncoding=L''encodage [{0}] est inconnu + +ssiServletExternalResolver.absoluteNonVirtualPath=Le chemin non virtuel [{0}] ne peut être absolu +ssiServletExternalResolver.noContext=Pas de contexte dans chemin normalisé en [{0}] +ssiServletExternalResolver.noFile=Le fichier [{0}] n''a pas été trouvé +ssiServletExternalResolver.noIncludeFile=Le fichier inclus [{0}] n''a pas été trouvé +ssiServletExternalResolver.noResource=Le contexte ne contenait pas la ressource [{0}] +ssiServletExternalResolver.normalizationError=La normalisation du chemin [{0}] a retourné null +ssiServletExternalResolver.pathTraversalNonVirtualPath=Le chemin non virtuel [{0}] ne peut contenir des séquences de navigation dans le chemin +ssiServletExternalResolver.removeFilenameError=Impossible de supprimer le nom de fichier du chemin [{0}] +ssiServletExternalResolver.requestDispatcherError=Impossible d''obtenir le dispatcher de requêtes pour le chemin [{0}] + +ssiSet.noVariable=Une variable n'a pas été spécifiée diff --git a/java/org/apache/catalina/ssi/LocalStrings_ja.properties b/java/org/apache/catalina/ssi/LocalStrings_ja.properties new file mode 100644 index 0000000000..c445dbf419 --- /dev/null +++ b/java/org/apache/catalina/ssi/LocalStrings_ja.properties @@ -0,0 +1,46 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +expressionParseTree.extraNodes=余分なノードが作成されました +expressionParseTree.invalidExpression=無効な式[{0}] +expressionParseTree.noNodes=ノードが作成されませんでした +expressionParseTree.unusedOpCodes=未使用のノードが存在します + +ssiCommand.invalidAttribute=無効な属性[{0}] + +ssiEcho.invalidEncoding=無効なエンコード [{0}] + +ssiExec.executeFailed=ファイル[{0}]を実行できません + +ssiFlastmod.noLastModified=ファイル[{0}]の最終変更日を取得できません + +ssiFsize.invalidNumChars=文字数は負数にすることはできません +ssiFsize.noSize=ファイル[{0}]のサイズを取得できません + +ssiInclude.includeFailed=ファイル[{0}]を含めることができません + +ssiMediator.unknownEncoding=不明なエンコード [{0}] + +ssiServletExternalResolver.absoluteNonVirtualPath=非仮想[{0}]パスを絶対パスにすることはできません。 +ssiServletExternalResolver.noContext=[{0}]に正規化されたパスのコンテキストがありません。 +ssiServletExternalResolver.noFile=ファイル[{0}]が見つかりません +ssiServletExternalResolver.noIncludeFile=インクルードファイル[{0}]が見つかりません +ssiServletExternalResolver.noResource=コンテキストにリソース [{0}] が含まれていません +ssiServletExternalResolver.normalizationError=パス [{0}] の正規化によってNULLが返されました +ssiServletExternalResolver.pathTraversalNonVirtualPath=非仮想パス [{0}] にはパストラバーサルシーケンスを含めることはできません +ssiServletExternalResolver.removeFilenameError=パス [{0}] のファイル名を削除できません +ssiServletExternalResolver.requestDispatcherError=パス [{0}] のリクエストディスパッチャを取得できません + +ssiSet.noVariable=変数が指定されていません diff --git a/java/org/apache/catalina/ssi/LocalStrings_ko.properties b/java/org/apache/catalina/ssi/LocalStrings_ko.properties new file mode 100644 index 0000000000..e6da65c8be --- /dev/null +++ b/java/org/apache/catalina/ssi/LocalStrings_ko.properties @@ -0,0 +1,46 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +expressionParseTree.extraNodes=파싱 처리 중 생성된 노드들의 여분이 처리되지 않고 남아있습니다. +expressionParseTree.invalidExpression=유효하지 않은 표현식 [{0}] +expressionParseTree.noNodes=파싱 처리 중 어떤 노드도 생성되지 않았습니다. +expressionParseTree.unusedOpCodes=파싱 처리 중 사용되지 않은 노드들이 존재합니다. + +ssiCommand.invalidAttribute=유효하지 않은 속성 [{0}] + +ssiEcho.invalidEncoding=유효하지 않은 인코딩 [{0}] + +ssiExec.executeFailed=파일 [{0}]을(를) 실행할 수 없습니다. + +ssiFlastmod.noLastModified=파일 [{0}]의 최종 변경 일자를 구할 수 없습니다. + +ssiFsize.invalidNumChars=문자들의 개수가 음수일 수는 없습니다. +ssiFsize.noSize=파일 [{0}]의 크기를 구할 수 없습니다. + +ssiInclude.includeFailed=파일 [{0}]을(를) include할 수 없습니다. + +ssiMediator.unknownEncoding=알 수 없는 인코딩 [{0}] + +ssiServletExternalResolver.absoluteNonVirtualPath=비가상경로 [{0}]은(는) 절대 경로이어서는 안됩니다. +ssiServletExternalResolver.noContext=[{0}](으)로 정규화된 경로를 위한 컨텍스트가 없습니다. +ssiServletExternalResolver.noFile=파일 [{0}]을(를) 찾을 수 없습니다. +ssiServletExternalResolver.noIncludeFile=Include할 파일 [{0}]을(를) 찾을 수 없습니다. +ssiServletExternalResolver.noResource=컨텍스트가 리소스 [{0}]을(를) 포함하지 않았습니다. +ssiServletExternalResolver.normalizationError=경로 [{0}]을(를) 위한 정규화가 널을 반환했습니다. +ssiServletExternalResolver.pathTraversalNonVirtualPath=비가상경로 [{0}]은(는), 디렉토리를 이동하는 문자열 시퀀스를 포함해서는 안됩니다. +ssiServletExternalResolver.removeFilenameError=경로 [{0}](으)로부터, 파일 이름을 제외한 나머지 경로를 구할 수 없습니다. +ssiServletExternalResolver.requestDispatcherError=경로 [{0}]을(를) 위한 요청 디스패처를 얻을 수 없습니다. + +ssiSet.noVariable=변수 이름이 지정되지 않았습니다. diff --git a/java/org/apache/catalina/ssi/LocalStrings_zh_CN.properties b/java/org/apache/catalina/ssi/LocalStrings_zh_CN.properties new file mode 100644 index 0000000000..69617f18e4 --- /dev/null +++ b/java/org/apache/catalina/ssi/LocalStrings_zh_CN.properties @@ -0,0 +1,46 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +expressionParseTree.extraNodes=创建额外节点 +expressionParseTree.invalidExpression=无效表达式[{0}] +expressionParseTree.noNodes=未创建节点 +expressionParseTree.unusedOpCodes=存在未使用的节点 + +ssiCommand.invalidAttribute=无效属性[{0}] + +ssiEcho.invalidEncoding=无效编码[{0}] + +ssiExec.executeFailed=无法执行文件[{0}] + +ssiFlastmod.noLastModified=无法获取文件[{0}]的最后修改日期 + +ssiFsize.invalidNumChars=字符数不能为负 +ssiFsize.noSize=无法获取文件[{0}]的大小 + +ssiInclude.includeFailed=不能包含文件[{0}] + +ssiMediator.unknownEncoding=未知编码[{0}] + +ssiServletExternalResolver.absoluteNonVirtualPath=非虚[{0}]路径不能是绝对路径 +ssiServletExternalResolver.noContext=没有将路径规范化为[{0}]的上下文 +ssiServletExternalResolver.noFile=找不到文件[{0}] +ssiServletExternalResolver.noIncludeFile=未找到包含文件[{0}] +ssiServletExternalResolver.noResource=上下文不包含资源[{0}] +ssiServletExternalResolver.normalizationError=规范化为路径[{0}]返回了空值 +ssiServletExternalResolver.pathTraversalNonVirtualPath=非虚拟路径[{0}]不能包含路径遍历序列 +ssiServletExternalResolver.removeFilenameError=无法从路径[{0}]中删除文件名 +ssiServletExternalResolver.requestDispatcherError=无法获取路径[{0}]的请求调度程序 + +ssiSet.noVariable=未指定变量 diff --git a/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java b/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java index 9b2faa4835..3410a82c7a 100644 --- a/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java +++ b/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java @@ -87,7 +87,7 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { /** - * Return a printwriter, throws and exception if a OutputStream already been returned. + * Return a printwriter, throws and exception if an OutputStream already been returned. * * @return a PrintWriter object * @@ -108,9 +108,9 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { /** - * Return a OutputStream, throws and exception if a printwriter already been returned. + * Return an OutputStream, throws and exception if a printwriter already been returned. * - * @return a OutputStream object + * @return an OutputStream object * * @exception java.io.IOException if the printwriter already been called */ diff --git a/java/org/apache/catalina/ssi/SSIConfig.java b/java/org/apache/catalina/ssi/SSIConfig.java index 874c8e762c..e0331551bb 100644 --- a/java/org/apache/catalina/ssi/SSIConfig.java +++ b/java/org/apache/catalina/ssi/SSIConfig.java @@ -19,6 +19,8 @@ package org.apache.catalina.ssi; import java.io.PrintWriter; +import org.apache.tomcat.util.res.StringManager; + /** * Implements the Server-side #exec command * @@ -28,6 +30,8 @@ import java.io.PrintWriter; * @author David Becker */ public final class SSIConfig implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIConfig.class); + /** * @see SSICommand */ @@ -45,7 +49,7 @@ public final class SSIConfig implements SSICommand { } else if (paramName.equalsIgnoreCase("timefmt")) { ssiMediator.setConfigTimeFmt(substitutedValue); } else { - ssiMediator.log("#config--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); // We need to fetch this value each time, since it may change during the loop String configErrMsg = ssiMediator.getConfigErrMsg(); writer.write(configErrMsg); diff --git a/java/org/apache/catalina/ssi/SSIEcho.java b/java/org/apache/catalina/ssi/SSIEcho.java index 14ebaef767..d4f762ac29 100644 --- a/java/org/apache/catalina/ssi/SSIEcho.java +++ b/java/org/apache/catalina/ssi/SSIEcho.java @@ -19,6 +19,8 @@ package org.apache.catalina.ssi; import java.io.PrintWriter; +import org.apache.tomcat.util.res.StringManager; + /** * Return the result associated with the supplied Server Variable. * @@ -28,6 +30,7 @@ import java.io.PrintWriter; * @author David Becker */ public class SSIEcho implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIEcho.class); protected static final String DEFAULT_ENCODING = SSIMediator.ENCODING_ENTITY; protected static final String MISSING_VARIABLE_VALUE = "(none)"; @@ -50,11 +53,11 @@ public class SSIEcho implements SSICommand { if (isValidEncoding(paramValue)) { encoding = paramValue; } else { - ssiMediator.log("#echo--Invalid encoding: " + paramValue); + ssiMediator.log(sm.getString("ssiEcho.invalidEncoding", paramValue)); writer.write(ssiMediator.encode(errorMessage, SSIMediator.ENCODING_ENTITY)); } } else { - ssiMediator.log("#echo--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); writer.write(ssiMediator.encode(errorMessage, SSIMediator.ENCODING_ENTITY)); } } @@ -73,4 +76,4 @@ public class SSIEcho implements SSICommand { encoding.equalsIgnoreCase(SSIMediator.ENCODING_ENTITY) || encoding.equalsIgnoreCase(SSIMediator.ENCODING_NONE); } -} \ No newline at end of file +} diff --git a/java/org/apache/catalina/ssi/SSIExec.java b/java/org/apache/catalina/ssi/SSIExec.java index 80d8d2a6c6..6c597d1c51 100644 --- a/java/org/apache/catalina/ssi/SSIExec.java +++ b/java/org/apache/catalina/ssi/SSIExec.java @@ -22,6 +22,7 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import org.apache.catalina.util.IOTools; +import org.apache.tomcat.util.res.StringManager; /** * Implements the Server-side #exec command @@ -33,6 +34,7 @@ import org.apache.catalina.util.IOTools; * @author David Becker */ public class SSIExec implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIExec.class); protected final SSIInclude ssiInclude = new SSIInclude(); protected static final int BUFFER_SIZE = 1024; @@ -67,14 +69,14 @@ public class SSIExec implements SSICommand { proc.waitFor(); lastModified = System.currentTimeMillis(); } catch (InterruptedException e) { - ssiMediator.log("Couldn't exec file: " + substitutedValue, e); + ssiMediator.log(sm.getString("ssiExec.executeFailed", substitutedValue), e); writer.write(configErrMsg); } catch (IOException e) { if (!foundProgram) { - // apache doesn't output an error message if it can't find + // Apache doesn't output an error message if it can't find // a program } - ssiMediator.log("Couldn't exec file: " + substitutedValue, e); + ssiMediator.log(sm.getString("ssiExec.executeFailed", substitutedValue), e); } } return lastModified; diff --git a/java/org/apache/catalina/ssi/SSIFilter.java b/java/org/apache/catalina/ssi/SSIFilter.java index 40141c9baf..2b47267ddc 100644 --- a/java/org/apache/catalina/ssi/SSIFilter.java +++ b/java/org/apache/catalina/ssi/SSIFilter.java @@ -140,7 +140,7 @@ public class SSIFilter implements Filter { Matcher shtmlMatcher = shtmlRegEx.matcher(responseIncludeWrapper.getContentType()); if (shtmlMatcher.matches()) { - // Convert shtml mime type to ordinary html mime type but preserve + // Convert SHTML mime type to ordinary HTML mime type but preserve // encoding, if any. String enc = shtmlMatcher.group(1); res.setContentType("text/html" + ((enc != null) ? enc : "")); diff --git a/java/org/apache/catalina/ssi/SSIFlastmod.java b/java/org/apache/catalina/ssi/SSIFlastmod.java index 5d37899608..8947972912 100644 --- a/java/org/apache/catalina/ssi/SSIFlastmod.java +++ b/java/org/apache/catalina/ssi/SSIFlastmod.java @@ -22,6 +22,7 @@ import java.util.Date; import java.util.Locale; import org.apache.catalina.util.Strftime; +import org.apache.tomcat.util.res.StringManager; /** * Implements the Server-side #flastmod command @@ -32,6 +33,8 @@ import org.apache.catalina.util.Strftime; * @author David Becker */ public final class SSIFlastmod implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIFlastmod.class); + /** * @see SSICommand */ @@ -52,11 +55,11 @@ public final class SSIFlastmod implements SSICommand { String configTimeFmt = ssiMediator.getConfigTimeFmt(); writer.write(formatDate(date, configTimeFmt)); } else { - ssiMediator.log("#flastmod--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); writer.write(configErrMsg); } } catch (IOException e) { - ssiMediator.log("#flastmod--Couldn't get last modified for file: " + substitutedValue, e); + ssiMediator.log(sm.getString("ssiFlastmod.noLastModified", substitutedValue), e); writer.write(configErrMsg); } } @@ -68,4 +71,4 @@ public final class SSIFlastmod implements SSICommand { Strftime strftime = new Strftime(configTimeFmt, Locale.US); return strftime.format(date); } -} \ No newline at end of file +} diff --git a/java/org/apache/catalina/ssi/SSIFsize.java b/java/org/apache/catalina/ssi/SSIFsize.java index 6c5042f8ef..adf8dde9ab 100644 --- a/java/org/apache/catalina/ssi/SSIFsize.java +++ b/java/org/apache/catalina/ssi/SSIFsize.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; +import org.apache.tomcat.util.res.StringManager; + /** * Implements the Server-side #fsize command * @@ -30,6 +32,7 @@ import java.text.DecimalFormat; * @author David Becker */ public final class SSIFsize implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIFsize.class); static final int ONE_KIBIBYTE = 1024; static final int ONE_MEBIBYTE = 1024 * 1024; @@ -54,11 +57,11 @@ public final class SSIFsize implements SSICommand { String configSizeFmt = ssiMediator.getConfigSizeFmt(); writer.write(formatSize(size, configSizeFmt)); } else { - ssiMediator.log("#fsize--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); writer.write(configErrMsg); } } catch (IOException e) { - ssiMediator.log("#fsize--Couldn't get size for file: " + substitutedValue, e); + ssiMediator.log(sm.getString("ssiFsize.noSize", substitutedValue), e); writer.write(configErrMsg); } } @@ -68,7 +71,7 @@ public final class SSIFsize implements SSICommand { public String repeat(char aChar, int numChars) { if (numChars < 0) { - throw new IllegalArgumentException("Num chars can't be negative"); + throw new IllegalArgumentException(sm.getString("ssiFsize.invalidNumChars")); } StringBuilder buf = new StringBuilder(); for (int i = 0; i < numChars; i++) { @@ -117,4 +120,4 @@ public final class SSIFsize implements SSICommand { } return retString; } -} \ No newline at end of file +} diff --git a/java/org/apache/catalina/ssi/SSIInclude.java b/java/org/apache/catalina/ssi/SSIInclude.java index b48fb25f46..c1d5fad3f4 100644 --- a/java/org/apache/catalina/ssi/SSIInclude.java +++ b/java/org/apache/catalina/ssi/SSIInclude.java @@ -20,6 +20,8 @@ package org.apache.catalina.ssi; import java.io.IOException; import java.io.PrintWriter; +import org.apache.tomcat.util.res.StringManager; + /** * Implements the Server-side #include command * @@ -29,6 +31,8 @@ import java.io.PrintWriter; * @author David Becker */ public final class SSIInclude implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSIInclude.class); + /** * @see SSICommand */ @@ -48,14 +52,14 @@ public final class SSIInclude implements SSICommand { String text = ssiMediator.getFileText(substitutedValue, virtual); writer.write(text); } else { - ssiMediator.log("#include--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); writer.write(configErrMsg); } } catch (IOException e) { - ssiMediator.log("#include--Couldn't include file: " + substitutedValue, e); + ssiMediator.log(sm.getString("ssiInclude.includeFailed", substitutedValue), e); writer.write(configErrMsg); } } return lastModified; } -} \ No newline at end of file +} diff --git a/java/org/apache/catalina/ssi/SSIMediator.java b/java/org/apache/catalina/ssi/SSIMediator.java index b6ef502fda..680b5669e4 100644 --- a/java/org/apache/catalina/ssi/SSIMediator.java +++ b/java/org/apache/catalina/ssi/SSIMediator.java @@ -28,6 +28,7 @@ import java.util.TimeZone; import org.apache.catalina.util.Strftime; import org.apache.catalina.util.URLEncoder; +import org.apache.tomcat.util.res.StringManager; import org.apache.tomcat.util.security.Escape; /** @@ -40,6 +41,8 @@ import org.apache.tomcat.util.security.Escape; * @author David Becker */ public class SSIMediator { + private static final StringManager sm = StringManager.getManager(SSIMediator.class); + protected static final String ENCODING_NONE = "none"; protected static final String ENCODING_ENTITY = "entity"; protected static final String ENCODING_URL = "url"; @@ -166,9 +169,7 @@ public class SSIMediator { String lowerCaseVariableName = variableName.toLowerCase(Locale.ENGLISH); String variableValue = null; if (!isNameReserved(lowerCaseVariableName)) { - // Try getting it externally first, if it fails, try getting the - // 'built-in' - // value + // Try getting it externally first, if it fails, try getting the 'built-in' value variableValue = ssiExternalResolver.getVariableValue(variableName); if (variableValue == null) { variableName = variableName.toUpperCase(Locale.ENGLISH); @@ -190,8 +191,7 @@ public class SSIMediator { * @return the value after variable substitution */ public String substituteVariables(String val) { - // If it has no references or HTML entities then no work - // need to be done + // If it has no references or HTML entities then no work need to be done if (val.indexOf('$') < 0 && val.indexOf('&') < 0) { return val; } @@ -262,8 +262,7 @@ public class SSIMediator { } // Replace the var name with its value sb.replace(start, end, value); - // Start searching for the next $ after the value - // that was just substituted. + // Start searching for the next $ after the value that was just substituted. i = start + value.length(); } return sb.toString(); @@ -273,9 +272,7 @@ public class SSIMediator { protected String formatDate(Date date, TimeZone timeZone) { String retVal; if (timeZone != null) { - // we temporarily change strftime. Since SSIMediator is inherently - // single-threaded, this - // isn't a problem + // we temporarily change strftime. Since SSIMediator is inherently single-threaded, this isn't a problem TimeZone oldTimeZone = strftime.getTimeZone(); strftime.setTimeZone(timeZone); retVal = strftime.format(date); @@ -297,7 +294,7 @@ public class SSIMediator { retVal = Escape.htmlElementContent(value); } else { // This shouldn't be possible - throw new IllegalArgumentException("Unknown encoding: " + encoding); + throw new IllegalArgumentException(sm.getString("ssiMediator.unknownEncoding", encoding)); } return retVal; } diff --git a/java/org/apache/catalina/ssi/SSIServlet.java b/java/org/apache/catalina/ssi/SSIServlet.java index e767b978b6..fabc3f9c45 100644 --- a/java/org/apache/catalina/ssi/SSIServlet.java +++ b/java/org/apache/catalina/ssi/SSIServlet.java @@ -152,13 +152,11 @@ public class SSIServlet extends HttpServlet { if (path == null || path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF") || path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF")) { res.sendError(HttpServletResponse.SC_NOT_FOUND); - log("Can't serve file: " + path); return; } URL resource = servletContext.getResource(path); if (resource == null) { res.sendError(HttpServletResponse.SC_NOT_FOUND); - log("Can't find file: " + path); return; } String resourceMimeType = servletContext.getMimeType(path); diff --git a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java index 1219713762..cbf2492490 100644 --- a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java +++ b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java @@ -39,6 +39,7 @@ import org.apache.coyote.Constants; import org.apache.tomcat.util.buf.B2CConverter; import org.apache.tomcat.util.buf.UDecoder; import org.apache.tomcat.util.http.RequestUtil; +import org.apache.tomcat.util.res.StringManager; /** * An implementation of SSIExternalResolver that is used with servlets. @@ -47,6 +48,7 @@ import org.apache.tomcat.util.http.RequestUtil; * @author David Becker */ public class SSIServletExternalResolver implements SSIExternalResolver { + private static final StringManager sm = StringManager.getManager(SSIServletExternalResolver.class); protected final String VARIABLE_NAMES[] = { "AUTH_TYPE", "CONTENT_LENGTH", "CONTENT_TYPE", "DOCUMENT_NAME", "DOCUMENT_URI", "GATEWAY_INTERFACE", "HTTP_ACCEPT", "HTTP_ACCEPT_ENCODING", "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION", "HTTP_HOST", "HTTP_REFERER", "HTTP_USER_AGENT", "PATH_INFO", "PATH_TRANSLATED", @@ -363,12 +365,12 @@ public class SSIServletExternalResolver implements SSIExternalResolver { String pathWithoutContext = SSIServletRequestUtil.getRelativePath(req); String prefix = getPathWithoutFileName(pathWithoutContext); if (prefix == null) { - throw new IOException("Couldn't remove filename from path: " + pathWithoutContext); + throw new IOException(sm.getString("ssiServletExternalResolver.removeFilenameError", pathWithoutContext)); } String fullPath = prefix + path; String retVal = RequestUtil.normalize(fullPath); if (retVal == null) { - throw new IOException("Normalization yielded null on path: " + fullPath); + throw new IOException(sm.getString("ssiServletExternalResolver.normalizationError", fullPath)); } return retVal; } @@ -377,10 +379,11 @@ public class SSIServletExternalResolver implements SSIExternalResolver { protected ServletContextAndPath getServletContextAndPathFromNonVirtualPath(String nonVirtualPath) throws IOException { if (nonVirtualPath.startsWith("/") || nonVirtualPath.startsWith("\\")) { - throw new IOException("A non-virtual path can't be absolute: " + nonVirtualPath); + throw new IOException(sm.getString("ssiServletExternalResolver.absoluteNonVirtualPath", nonVirtualPath)); } - if (nonVirtualPath.indexOf("../") >= 0) { - throw new IOException("A non-virtual path can't contain '../' : " + nonVirtualPath); + if (nonVirtualPath.contains("../")) { + throw new IOException( + sm.getString("ssiServletExternalResolver.pathTraversalNonVirtualPath", nonVirtualPath)); } String path = getAbsolutePath(nonVirtualPath); ServletContextAndPath csAndP = new ServletContextAndPath(context, path); @@ -401,7 +404,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { ServletContext normContext = context.getContext(normalized); if (normContext == null) { - throw new IOException("Couldn't get context for path: " + normalized); + throw new IOException(sm.getString("ssiServletExternalResolver.noContext", normalized)); } // If it's the root context, then there is no context element to remove. // ie: '/file1.shtml' vs '/appName1/file1.shtml' @@ -446,7 +449,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { String path = csAndP.getPath(); URL url = context.getResource(path); if (url == null) { - throw new IOException("Context did not contain resource: " + path); + throw new IOException(sm.getString("ssiServletExternalResolver.noResource", path)); } URLConnection urlConnection = url.openConnection(); return urlConnection; @@ -491,7 +494,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { String path = csAndP.getPath(); RequestDispatcher rd = context.getRequestDispatcher(path); if (rd == null) { - throw new IOException("Couldn't get request dispatcher for path: " + path); + throw new IOException(sm.getString("ssiServletExternalResolver.requestDispatcherError", path)); } ByteArrayServletOutputStream basos = new ByteArrayServletOutputStream(); ResponseIncludeWrapper responseIncludeWrapper = new ResponseIncludeWrapper(res, basos); @@ -513,12 +516,11 @@ public class SSIServletExternalResolver implements SSIExternalResolver { * included, but not sure how else to tell. */ if (retVal.equals("") && !req.getMethod().equalsIgnoreCase("HEAD")) { - throw new IOException("Couldn't find file: " + path); + throw new IOException(sm.getString("ssiServletExternalResolver.noFile", path)); } return retVal; } catch (ServletException e) { - throw new IOException( - "Couldn't include file: " + originalPath + " because of ServletException: " + e.getMessage()); + throw new IOException(sm.getString("ssiServletExternalResolver.noIncludeFile", originalPath), e); } } diff --git a/java/org/apache/catalina/ssi/SSISet.java b/java/org/apache/catalina/ssi/SSISet.java index 8af6dc3877..fd30f018ab 100644 --- a/java/org/apache/catalina/ssi/SSISet.java +++ b/java/org/apache/catalina/ssi/SSISet.java @@ -19,6 +19,8 @@ package org.apache.catalina.ssi; import java.io.PrintWriter; +import org.apache.tomcat.util.res.StringManager; + /** * Implements the Server-side #set command * @@ -27,6 +29,8 @@ import java.io.PrintWriter; * @author David Becker */ public class SSISet implements SSICommand { + private static final StringManager sm = StringManager.getManager(SSISet.class); + /** * @see SSICommand */ @@ -47,16 +51,16 @@ public class SSISet implements SSICommand { ssiMediator.setVariableValue(variableName, substitutedValue); lastModified = System.currentTimeMillis(); } else { - ssiMediator.log("#set--no variable specified"); + ssiMediator.log(sm.getString("ssiSet.noVariable")); writer.write(errorMessage); throw new SSIStopProcessingException(); } } else { - ssiMediator.log("#set--Invalid attribute: " + paramName); + ssiMediator.log(sm.getString("ssiCommand.invalidAttribute", paramName)); writer.write(errorMessage); throw new SSIStopProcessingException(); } } return lastModified; } -} \ No newline at end of file +} --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org