You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by sa...@apache.org on 2010/03/29 15:38:14 UTC

svn commit: r928772 [2/2] - in /mina/ftpserver/branches/1.0.x/core/src: main/java/org/apache/ftpserver/config/spring/ main/java/org/apache/ftpserver/ipfilter/ main/java/org/apache/ftpserver/listener/ main/java/org/apache/ftpserver/listener/nio/ main/re...

Modified: mina/ftpserver/branches/1.0.x/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd?rev=928772&r1=928771&r2=928772&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/resources/org/apache/ftpserver/config/spring/ftpserver-1.0.xsd Mon Mar 29 13:38:13 2010
@@ -1,270 +1,289 @@
-<?xml version="1.0" encoding="UTF-8"?>
-	<!--
-		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.
-	-->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-	elementFormDefault="qualified" targetNamespace="http://mina.apache.org/ftpserver/spring/v1"
-	xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:beans="http://www.springframework.org/schema/beans">
-
-	<!-- Import the Spring beans XML schema -->
-	<xs:import namespace="http://www.springframework.org/schema/beans"
-		schemaLocation="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" />
-
-	<!-- The main entry point, used for setting up an entire FTP server -->
-	<xs:element name="server">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element minOccurs="0" name="listeners">
-					<xs:complexType>
-						<xs:choice minOccurs="1" maxOccurs="unbounded">
-							<xs:element ref="nio-listener" />
-							<xs:element ref="listener" />
-						</xs:choice>
-					</xs:complexType>
-				</xs:element>
-				<xs:element minOccurs="0" ref="ftplets" />
-				<xs:choice minOccurs="0" maxOccurs="1">
-					<xs:element minOccurs="0" ref="file-user-manager" />
-					<xs:element minOccurs="0" ref="db-user-manager" />
-					<xs:element minOccurs="0" ref="user-manager" />
-				</xs:choice>
-				<xs:choice minOccurs="0" maxOccurs="1">
-					<xs:element minOccurs="0" ref="native-filesystem" />
-					<xs:element minOccurs="0" ref="filesystem" />
-				</xs:choice>
-				<xs:element minOccurs="0" ref="commands" />
-				<xs:element minOccurs="0" ref="messages" />
-			</xs:sequence>
-			<xs:attribute name="id" type="xs:ID" />
-			<xs:attribute name="max-logins" type="xs:int" />
-			<xs:attribute name="max-anon-logins" type="xs:int" />
-			<xs:attribute name="anon-enabled" type="xs:boolean" />
-			<xs:attribute name="max-login-failures" type="xs:int" />
-			<xs:attribute name="login-failure-delay" type="xs:int" />
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Reusable element for defining SSL properties -->
-	<xs:element name="ssl">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="keystore">
-					<xs:complexType>
-						<xs:attribute name="file" use="required" />
-						<xs:attribute name="password" use="required" />
-						<xs:attribute name="type" />
-						<xs:attribute name="algorithm" />
-						<xs:attribute name="key-alias" />
-						<xs:attribute name="key-password" />
-					</xs:complexType>
-				</xs:element>
-				<xs:element minOccurs="0" name="truststore">
-					<xs:complexType>
-						<xs:attribute name="file" use="required" />
-						<xs:attribute name="password" />
-						<xs:attribute name="type" />
-						<xs:attribute name="algorithm" />
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-			<xs:attribute name="client-authentication">
-				<xs:simpleType>
-					<xs:restriction base="xs:string">
-						<xs:enumeration value="NEED" />
-						<xs:enumeration value="WANT" />
-						<xs:enumeration value="NONE" />
-					</xs:restriction>
-				</xs:simpleType>
-			</xs:attribute>
-			<xs:attribute name="enabled-ciphersuites" type="xs:string" />
-			<xs:attribute name="protocol">
-				<xs:simpleType>
-					<xs:restriction base="xs:string">
-						<xs:enumeration value="SSL" />
-						<xs:enumeration value="TLS" />
-					</xs:restriction>
-				</xs:simpleType>
-			</xs:attribute>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Element used to define the default, NIO based listener -->
-	<xs:element name="nio-listener">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element minOccurs="0" ref="ssl" />
-				<xs:element minOccurs="0" name="data-connection">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element minOccurs="0" ref="ssl" />
-							<xs:element minOccurs="0" name="active">
-								<xs:complexType>
-									<xs:attribute name="enabled" type="xs:boolean" />
-									<xs:attribute name="local-address" />
-									<xs:attribute name="local-port" type="xs:int" />
-									<xs:attribute name="ip-check" type="xs:boolean" />
-								</xs:complexType>
-							</xs:element>
-							<xs:element minOccurs="0" name="passive">
-								<xs:complexType>
-									<xs:attribute name="address" />
-									<xs:attribute name="external-address" />
-									<xs:attribute name="ports" />
-								</xs:complexType>
-							</xs:element>
-						</xs:sequence>
-						<xs:attribute name="idle-timeout" type="xs:int" />
-                        <xs:attribute name="implicit-ssl" type="xs:boolean" />
-					</xs:complexType>
-				</xs:element>
-				<xs:element minOccurs="0" name="blacklist" type="xs:string" />
-			</xs:sequence>
-			<xs:attribute name="name" use="required" type="xs:string" />
-			<xs:attribute name="local-address" />
-			<xs:attribute name="port" type="xs:int" />
-			<xs:attribute name="idle-timeout" type="xs:int" />
-			<xs:attribute name="implicit-ssl" type="xs:boolean" />
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- Extension element used for defining a custom listener -->
-	<xs:element name="listener" type="spring-bean-or-ref-with-name" />
-
-	<!-- Element used to configure Ftplets for used with the server -->
-	<xs:element name="ftplets">
-		<xs:complexType>
-			<xs:choice>
-				<xs:element name="ftplet" maxOccurs="unbounded">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:choice>
-								<xs:element ref="beans:bean" />
-								<xs:element ref="beans:ref" />
-							</xs:choice>
-						</xs:sequence>
-						<xs:attribute name="name" use="required" type="xs:string" />
-					</xs:complexType>
-				</xs:element>
-				<xs:element ref="beans:map" />
-			</xs:choice>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Element used to configure a file based user manager -->
-	<xs:element name="file-user-manager">
-		<xs:complexType>
-			<xs:attribute name="file" type="xs:string" />
-			<xs:attribute name="url" type="xs:string" />
-			<xs:attribute name="encrypt-passwords">
-				<xs:simpleType>
-					<xs:restriction base="xs:string">
-						<xs:enumeration value="clear"></xs:enumeration>
-						<!-- Deprecated, use "clear" -->
-						<xs:enumeration value="false"></xs:enumeration>
-						<xs:enumeration value="md5"></xs:enumeration>
-   						<!-- Deprecated, use "md5" -->
-   						<xs:enumeration value="true"></xs:enumeration>
-						<xs:enumeration value="salted"></xs:enumeration>
-					</xs:restriction>
-				</xs:simpleType>
-			</xs:attribute>
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- Element used to configure a database based user manager -->
-	<xs:element name="db-user-manager">
-		<xs:complexType>
-    		<xs:sequence>
-				<xs:element name="data-source" type="spring-bean-or-ref" />
-				<xs:element name="insert-user" type="xs:string" />
-				<xs:element name="update-user" type="xs:string" />
-				<xs:element name="delete-user" type="xs:string" />
-				<xs:element name="select-user" type="xs:string" />
-				<xs:element name="select-all-users" type="xs:string" />
-				<xs:element name="is-admin" type="xs:string" />
-				<xs:element name="authenticate" type="xs:string" />
-			</xs:sequence>
-            <xs:attribute name="encrypt-passwords">
-                <xs:simpleType>
-                    <xs:restriction base="xs:string">
-                        <xs:enumeration value="clear"></xs:enumeration>
-                        <xs:enumeration value="md5"></xs:enumeration>
-                        <xs:enumeration value="salted"></xs:enumeration>
-                    </xs:restriction>
-                </xs:simpleType>
-            </xs:attribute>
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Extension element used for defining a custom user manager -->
-	<xs:element name="user-manager" type="spring-bean-or-ref" />
-
-	<!-- Element used to configure the default file system -->
-	<xs:element name="native-filesystem">
-		<xs:complexType>
-			<xs:attribute name="case-insensitive" type="xs:boolean" />
-			<xs:attribute name="create-home" type="xs:boolean" />
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Extension element used for defining a custom file system -->
-	<xs:element name="filesystem" type="spring-bean-or-ref" />
-
-	<!-- Element used to provide custom command implementations -->
-	<xs:element name="commands">
-		<xs:complexType>
-			<xs:sequence>
-				<xs:element name="command" maxOccurs="unbounded">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:choice maxOccurs="unbounded">
-								<xs:element ref="beans:bean" />
-								<xs:element ref="beans:ref" />
-							</xs:choice>
-						</xs:sequence>
-						<xs:attribute name="name" use="required" />
-					</xs:complexType>
-				</xs:element>
-			</xs:sequence>
-			<xs:attribute name="use-default" type="xs:boolean" />
-		</xs:complexType>
-	</xs:element>
-	
-	<!-- Element used to configure and localize messages -->
-	<xs:element name="messages">
-		<xs:complexType>
-			<xs:attribute name="languages" />
-			<xs:attribute name="directory" />
-		</xs:complexType>
-	</xs:element>
-
-	<!-- Reusable type used for extension elements -->
-	<xs:complexType name="spring-bean-or-ref">
-		<xs:choice>
-			<xs:element ref="beans:bean" />
-			<xs:element ref="beans:ref" />
-		</xs:choice>
-	</xs:complexType>
-	
-	<!-- Reusable type used for named extension elements -->
-	<xs:complexType name="spring-bean-or-ref-with-name">
-		<xs:sequence>
-			<xs:choice>
-				<xs:element ref="beans:bean" />
-				<xs:element ref="beans:ref" />
-			</xs:choice>
-		</xs:sequence>
-		<xs:attribute name="name" use="required" type="xs:string" />
-	</xs:complexType>
+<?xml version="1.0" encoding="UTF-8"?>
+	<!--
+		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.
+	-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+	elementFormDefault="qualified" targetNamespace="http://mina.apache.org/ftpserver/spring/v1"
+	xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:beans="http://www.springframework.org/schema/beans">
+
+	<!-- Import the Spring beans XML schema -->
+	<xs:import namespace="http://www.springframework.org/schema/beans"
+		schemaLocation="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" />
+
+	<!-- The main entry point, used for setting up an entire FTP server -->
+	<xs:element name="server">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element minOccurs="0" name="listeners">
+					<xs:complexType>
+						<xs:choice minOccurs="1" maxOccurs="unbounded">
+							<xs:element ref="nio-listener" />
+							<xs:element ref="listener" />
+						</xs:choice>
+					</xs:complexType>
+				</xs:element>
+				<xs:element minOccurs="0" ref="ftplets" />
+				<xs:choice minOccurs="0" maxOccurs="1">
+					<xs:element minOccurs="0" ref="file-user-manager" />
+					<xs:element minOccurs="0" ref="db-user-manager" />
+					<xs:element minOccurs="0" ref="user-manager" />
+				</xs:choice>
+				<xs:choice minOccurs="0" maxOccurs="1">
+					<xs:element minOccurs="0" ref="native-filesystem" />
+					<xs:element minOccurs="0" ref="filesystem" />
+				</xs:choice>
+				<xs:element minOccurs="0" ref="commands" />
+				<xs:element minOccurs="0" ref="messages" />
+			</xs:sequence>
+			<xs:attribute name="id" type="xs:ID" />
+			<xs:attribute name="max-logins" type="xs:int" />
+			<xs:attribute name="max-anon-logins" type="xs:int" />
+			<xs:attribute name="anon-enabled" type="xs:boolean" />
+			<xs:attribute name="max-login-failures" type="xs:int" />
+			<xs:attribute name="login-failure-delay" type="xs:int" />
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Reusable element for defining SSL properties -->
+	<xs:element name="ssl">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="keystore">
+					<xs:complexType>
+						<xs:attribute name="file" use="required" />
+						<xs:attribute name="password" use="required" />
+						<xs:attribute name="type" />
+						<xs:attribute name="algorithm" />
+						<xs:attribute name="key-alias" />
+						<xs:attribute name="key-password" />
+					</xs:complexType>
+				</xs:element>
+				<xs:element minOccurs="0" name="truststore">
+					<xs:complexType>
+						<xs:attribute name="file" use="required" />
+						<xs:attribute name="password" />
+						<xs:attribute name="type" />
+						<xs:attribute name="algorithm" />
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:attribute name="client-authentication">
+				<xs:simpleType>
+					<xs:restriction base="xs:string">
+						<xs:enumeration value="NEED" />
+						<xs:enumeration value="WANT" />
+						<xs:enumeration value="NONE" />
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+			<xs:attribute name="enabled-ciphersuites" type="xs:string" />
+			<xs:attribute name="protocol">
+				<xs:simpleType>
+					<xs:restriction base="xs:string">
+						<xs:enumeration value="SSL" />
+						<xs:enumeration value="TLS" />
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Element used to configure the IP Filtering -->
+	<xs:element name="ip-filter">
+		<xs:complexType>
+			<xs:simpleContent>
+				<xs:extension base="xs:string">
+					<xs:attribute name="type">
+						<xs:simpleType>
+							<xs:restriction base="xs:string">
+								<xs:enumeration value="allow" />
+								<xs:enumeration value="deny" />
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:attribute>
+				</xs:extension>
+			</xs:simpleContent>
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Element used to define the default, NIO based listener -->
+	<xs:element name="nio-listener">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element minOccurs="0" ref="ssl" />
+				<xs:element minOccurs="0" name="data-connection">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:element minOccurs="0" ref="ssl" />
+							<xs:element minOccurs="0" name="active">
+								<xs:complexType>
+									<xs:attribute name="enabled" type="xs:boolean" />
+									<xs:attribute name="local-address" />
+									<xs:attribute name="local-port" type="xs:int" />
+									<xs:attribute name="ip-check" type="xs:boolean" />
+								</xs:complexType>
+							</xs:element>
+							<xs:element minOccurs="0" name="passive">
+								<xs:complexType>
+									<xs:attribute name="address" />
+									<xs:attribute name="external-address" />
+									<xs:attribute name="ports" />
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+						<xs:attribute name="idle-timeout" type="xs:int" />
+                        <xs:attribute name="implicit-ssl" type="xs:boolean" />
+					</xs:complexType>
+				</xs:element>
+				<xs:element minOccurs="0" name="blacklist" type="xs:string" />
+				<xs:element ref="ip-filter" minOccurs="0" maxOccurs="1" />
+			</xs:sequence>
+			<xs:attribute name="name" use="required" type="xs:string" />
+			<xs:attribute name="local-address" />
+			<xs:attribute name="port" type="xs:int" />
+			<xs:attribute name="idle-timeout" type="xs:int" />
+			<xs:attribute name="implicit-ssl" type="xs:boolean" />
+		</xs:complexType>
+	</xs:element>
+	
+	<!-- Extension element used for defining a custom listener -->
+	<xs:element name="listener" type="spring-bean-or-ref-with-name" />
+
+	<!-- Element used to configure Ftplets for used with the server -->
+	<xs:element name="ftplets">
+		<xs:complexType>
+			<xs:choice>
+				<xs:element name="ftplet" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:choice>
+								<xs:element ref="beans:bean" />
+								<xs:element ref="beans:ref" />
+							</xs:choice>
+						</xs:sequence>
+						<xs:attribute name="name" use="required" type="xs:string" />
+					</xs:complexType>
+				</xs:element>
+				<xs:element ref="beans:map" />
+			</xs:choice>
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Element used to configure a file based user manager -->
+	<xs:element name="file-user-manager">
+		<xs:complexType>
+			<xs:attribute name="file" type="xs:string" />
+			<xs:attribute name="url" type="xs:string" />
+			<xs:attribute name="encrypt-passwords">
+				<xs:simpleType>
+					<xs:restriction base="xs:string">
+						<xs:enumeration value="clear"></xs:enumeration>
+						<!-- Deprecated, use "clear" -->
+						<xs:enumeration value="false"></xs:enumeration>
+						<xs:enumeration value="md5"></xs:enumeration>
+   						<!-- Deprecated, use "md5" -->
+   						<xs:enumeration value="true"></xs:enumeration>
+						<xs:enumeration value="salted"></xs:enumeration>
+					</xs:restriction>
+				</xs:simpleType>
+			</xs:attribute>
+		</xs:complexType>
+	</xs:element>
+	
+	<!-- Element used to configure a database based user manager -->
+	<xs:element name="db-user-manager">
+		<xs:complexType>
+    		<xs:sequence>
+				<xs:element name="data-source" type="spring-bean-or-ref" />
+				<xs:element name="insert-user" type="xs:string" />
+				<xs:element name="update-user" type="xs:string" />
+				<xs:element name="delete-user" type="xs:string" />
+				<xs:element name="select-user" type="xs:string" />
+				<xs:element name="select-all-users" type="xs:string" />
+				<xs:element name="is-admin" type="xs:string" />
+				<xs:element name="authenticate" type="xs:string" />
+			</xs:sequence>
+            <xs:attribute name="encrypt-passwords">
+                <xs:simpleType>
+                    <xs:restriction base="xs:string">
+                        <xs:enumeration value="clear"></xs:enumeration>
+                        <xs:enumeration value="md5"></xs:enumeration>
+                        <xs:enumeration value="salted"></xs:enumeration>
+                    </xs:restriction>
+                </xs:simpleType>
+            </xs:attribute>
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Extension element used for defining a custom user manager -->
+	<xs:element name="user-manager" type="spring-bean-or-ref" />
+
+	<!-- Element used to configure the default file system -->
+	<xs:element name="native-filesystem">
+		<xs:complexType>
+			<xs:attribute name="case-insensitive" type="xs:boolean" />
+			<xs:attribute name="create-home" type="xs:boolean" />
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Extension element used for defining a custom file system -->
+	<xs:element name="filesystem" type="spring-bean-or-ref" />
+
+	<!-- Element used to provide custom command implementations -->
+	<xs:element name="commands">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="command" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence>
+							<xs:choice maxOccurs="unbounded">
+								<xs:element ref="beans:bean" />
+								<xs:element ref="beans:ref" />
+							</xs:choice>
+						</xs:sequence>
+						<xs:attribute name="name" use="required" />
+					</xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:attribute name="use-default" type="xs:boolean" />
+		</xs:complexType>
+	</xs:element>
+	
+	<!-- Element used to configure and localize messages -->
+	<xs:element name="messages">
+		<xs:complexType>
+			<xs:attribute name="languages" />
+			<xs:attribute name="directory" />
+		</xs:complexType>
+	</xs:element>
+
+	<!-- Reusable type used for extension elements -->
+	<xs:complexType name="spring-bean-or-ref">
+		<xs:choice>
+			<xs:element ref="beans:bean" />
+			<xs:element ref="beans:ref" />
+		</xs:choice>
+	</xs:complexType>
+	
+	<!-- Reusable type used for named extension elements -->
+	<xs:complexType name="spring-bean-or-ref-with-name">
+		<xs:sequence>
+			<xs:choice>
+				<xs:element ref="beans:bean" />
+				<xs:element ref="beans:ref" />
+			</xs:choice>
+		</xs:sequence>
+		<xs:attribute name="name" use="required" type="xs:string" />
+	</xs:complexType>
 </xs:schema>
\ No newline at end of file

Added: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/IpFilterTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/IpFilterTest.java?rev=928772&view=auto
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/IpFilterTest.java (added)
+++ mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/IpFilterTest.java Mon Mar 29 13:38:13 2010
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+package org.apache.ftpserver.clienttests;
+
+import java.net.InetAddress;
+
+import org.apache.commons.net.ftp.FTPConnectionClosedException;
+import org.apache.ftpserver.FtpServerFactory;
+import org.apache.ftpserver.ipfilter.DefaultIpFilter;
+import org.apache.ftpserver.ipfilter.IpFilterType;
+import org.apache.ftpserver.listener.ListenerFactory;
+import org.apache.mina.filter.firewall.Subnet;
+import org.springframework.context.annotation.FilterType;
+
+/**
+*
+* @author <a href="http://mina.apache.org">Apache MINA Project</a>
+*
+*/
+public class IpFilterTest extends ClientTestTemplate {
+	
+	private DefaultIpFilter filter = new DefaultIpFilter(IpFilterType.DENY);
+	
+    protected FtpServerFactory createServer() throws Exception {
+        FtpServerFactory server = super.createServer();
+
+        ListenerFactory factory = new ListenerFactory(server.getListener("default"));
+
+        factory.setIpFilter(filter);
+        server.addListener("default", factory.createListener());
+        
+        return server;
+    }
+
+    protected boolean isConnectClient() {
+        return false;
+    }
+
+    public void testDenyBlackList() throws Exception {
+    	filter.clear();
+    	filter.setType(IpFilterType.DENY);
+        filter.add(new Subnet(InetAddress.getByName("localhost"), 32));
+        try {
+            client.connect("localhost", getListenerPort());
+            fail("Must throw");
+        } catch (FTPConnectionClosedException e) {
+            // OK
+        }
+    }
+
+    public void testDenyEmptyWhiteList() throws Exception {
+    	filter.clear();
+    	filter.setType(IpFilterType.ALLOW);
+        try {
+            client.connect("localhost", getListenerPort());
+            fail("Must throw");
+        } catch (FTPConnectionClosedException e) {
+            // OK
+        }
+    }
+
+    public void testWhiteList() throws Exception {
+    	filter.clear();
+    	filter.setType(IpFilterType.ALLOW);
+        filter.add(new Subnet(InetAddress.getByName("localhost"), 32));
+        client.connect("localhost", getListenerPort());
+    }
+}

Propchange: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/clienttests/IpFilterTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java?rev=928772&r1=928771&r2=928772&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/MyCustomListener.java Mon Mar 29 13:38:13 2010
@@ -1,106 +1,111 @@
-/*
- * 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.
- */
-
-package org.apache.ftpserver.config.spring;
-
-import java.net.InetAddress;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.ftpserver.DataConnectionConfiguration;
-import org.apache.ftpserver.impl.FtpIoSession;
-import org.apache.ftpserver.impl.FtpServerContext;
-import org.apache.ftpserver.listener.Listener;
-import org.apache.ftpserver.ssl.SslConfiguration;
-import org.apache.mina.filter.firewall.Subnet;
-
-/**
- * Used for testing creation of custom listeners from Spring config
- *
- * @author <a href="http://mina.apache.org">Apache MINA Project</a> *
- */
-public class MyCustomListener implements Listener {
-
-    private int port;
-    
-    public void setPort(int port) {
-        this.port = port;
-    }
-
-    public Set<FtpIoSession> getActiveSessions() {
-        return null;
-    }
-
-    public DataConnectionConfiguration getDataConnectionConfiguration() {
-        return null;
-    }
-
-    public int getIdleTimeout() {
-        return 0;
-    }
-
-    public int getPort() {
-        return port;
-    }
-
-    public String getServerAddress() {
-        return null;
-    }
-
-    public SslConfiguration getSslConfiguration() {
-        return null;
-    }
-
-    public boolean isImplicitSsl() {
-        return false;
-    }
-
-    public boolean isStopped() {
-        return false;
-    }
-
-    public boolean isSuspended() {
-        return false;
-    }
-
-    public void resume() {
-        
-    }
-
-    public void start(FtpServerContext serverContext) {
-        
-    }
-
-    public void stop() {
-        
-    }
-
-    public void suspend() {
-        
-    }
-
-    public List<InetAddress> getBlockedAddresses() {
-        return null;
-    }
-
-    public List<Subnet> getBlockedSubnets() {
-        return null;
-    }
-
-}
+/*
+ * 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.
+ */
+
+package org.apache.ftpserver.config.spring;
+
+import java.net.InetAddress;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.ftpserver.DataConnectionConfiguration;
+import org.apache.ftpserver.impl.FtpIoSession;
+import org.apache.ftpserver.impl.FtpServerContext;
+import org.apache.ftpserver.ipfilter.IpFilter;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.ssl.SslConfiguration;
+import org.apache.mina.filter.firewall.Subnet;
+
+/**
+ * Used for testing creation of custom listeners from Spring config
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a> *
+ */
+public class MyCustomListener implements Listener {
+
+    private int port;
+    
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public Set<FtpIoSession> getActiveSessions() {
+        return null;
+    }
+
+    public DataConnectionConfiguration getDataConnectionConfiguration() {
+        return null;
+    }
+
+    public int getIdleTimeout() {
+        return 0;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getServerAddress() {
+        return null;
+    }
+
+    public SslConfiguration getSslConfiguration() {
+        return null;
+    }
+
+    public boolean isImplicitSsl() {
+        return false;
+    }
+
+    public boolean isStopped() {
+        return false;
+    }
+
+    public boolean isSuspended() {
+        return false;
+    }
+
+    public void resume() {
+        
+    }
+
+    public void start(FtpServerContext serverContext) {
+        
+    }
+
+    public void stop() {
+        
+    }
+
+    public void suspend() {
+        
+    }
+
+    public List<InetAddress> getBlockedAddresses() {
+        return null;
+    }
+
+    public List<Subnet> getBlockedSubnets() {
+        return null;
+    }
+
+	public IpFilter getIpFilter() {
+		return null;
+	}
+
+}

Modified: mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java?rev=928772&r1=928771&r2=928772&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/test/java/org/apache/ftpserver/config/spring/SpringConfigTest.java Mon Mar 29 13:38:13 2010
@@ -1,118 +1,115 @@
-/*
- * 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.
- */
-
-package org.apache.ftpserver.config.spring;
-
-import java.net.InetAddress;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.apache.ftpserver.command.CommandFactory;
-import org.apache.ftpserver.command.impl.HELP;
-import org.apache.ftpserver.command.impl.STAT;
-import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
-import org.apache.ftpserver.impl.DefaultFtpServer;
-import org.apache.ftpserver.listener.Listener;
-import org.apache.ftpserver.listener.nio.NioListener;
-import org.apache.mina.filter.firewall.Subnet;
-import org.springframework.beans.factory.xml.XmlBeanFactory;
-import org.springframework.core.io.FileSystemResource;
-
-/**
-*
-* @author <a href="http://mina.apache.org">Apache MINA Project</a>*
-*/
-public class SpringConfigTest extends TestCase {
-
-    public void test() throws Throwable {
-        XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
-                "src/test/resources/spring-config/config-spring-1.xml"));
-
-        DefaultFtpServer server = (DefaultFtpServer) factory.getBean("server");
-
-        assertEquals(500, server.getConnectionConfig().getMaxLogins());
-        assertEquals(false, server.getConnectionConfig()
-                .isAnonymousLoginEnabled());
-        assertEquals(123, server.getConnectionConfig().getMaxAnonymousLogins());
-        assertEquals(124, server.getConnectionConfig().getMaxLoginFailures());
-        assertEquals(125, server.getConnectionConfig().getLoginFailureDelay());
-
-        Map<String, Listener> listeners = server.getServerContext()
-                .getListeners();
-        assertEquals(3, listeners.size());
-
-        Listener listener = listeners.get("listener0");
-        assertNotNull(listener);
-        assertTrue(listener instanceof NioListener);
-        assertEquals(2222, ((NioListener) listener).getPort());
-        assertEquals(InetAddress.getByName("1.2.3.4"), InetAddress.getByName(((NioListener) listener)
-                .getServerAddress()));
-        assertEquals(100, ((NioListener) listener)
-                .getDataConnectionConfiguration().getIdleTime());
-        assertTrue(((NioListener) listener)
-                .getDataConnectionConfiguration().isActiveEnabled());
-        assertTrue(((NioListener) listener)
-                .getDataConnectionConfiguration().isImplicitSsl());
-        
-        assertEquals(InetAddress.getByName("1.2.3.4"), InetAddress.getByName(((NioListener) listener)
-        		.getDataConnectionConfiguration().getActiveLocalAddress()) );
-        assertEquals("123-125", ((NioListener) listener)
-                .getDataConnectionConfiguration().getPassivePorts());
-
-        List<Subnet> subnets = ((NioListener) listener).getBlockedSubnets();
-        assertEquals(3, subnets.size());
-        assertEquals(new Subnet(InetAddress.getByName("1.2.3.0"), 16), subnets
-                .get(0));
-        assertEquals(new Subnet(InetAddress.getByName("1.2.4.0"), 16), subnets
-                .get(1));
-        assertEquals(new Subnet(InetAddress.getByName("1.2.3.4"), 32), subnets
-                .get(2));
-
-        listener = listeners.get("listener1");
-        assertNotNull(listener);
-        assertTrue(listener instanceof MyCustomListener);
-        assertEquals(2223, listener.getPort());
-
-        listener = listeners.get("listener2");
-        assertNotNull(listener);
-        assertTrue(listener instanceof MyCustomListener);
-        assertEquals(2224, listener.getPort());
-
-        CommandFactory cf = server.getCommandFactory();
-        assertTrue(cf.getCommand("FOO") instanceof HELP);
-        assertTrue(cf.getCommand("FOO2") instanceof STAT);
-
-        List<String> languages = server.getServerContext().getMessageResource()
-                .getAvailableLanguages();
-
-        assertEquals(2, languages.size());
-        assertEquals("en", languages.get(0));
-        assertEquals("zh-tw", languages.get(1));
-        
-        NativeFileSystemFactory fs = (NativeFileSystemFactory) server.getFileSystem();
-        assertTrue(fs.isCreateHome());
-        assertTrue(fs.isCaseInsensitive());
-        
-        assertEquals(2, server.getFtplets().size());
-        assertEquals(123, ((TestFtplet)server.getFtplets().get("ftplet1")).getFoo());
-        assertEquals(223, ((TestFtplet)server.getFtplets().get("ftplet2")).getFoo());
-    }
-}
+/*
+ * 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.
+ */
+
+package org.apache.ftpserver.config.spring;
+
+import java.net.InetAddress;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.apache.ftpserver.command.CommandFactory;
+import org.apache.ftpserver.command.impl.HELP;
+import org.apache.ftpserver.command.impl.STAT;
+import org.apache.ftpserver.filesystem.nativefs.NativeFileSystemFactory;
+import org.apache.ftpserver.impl.DefaultFtpServer;
+import org.apache.ftpserver.ipfilter.DefaultIpFilter;
+import org.apache.ftpserver.listener.Listener;
+import org.apache.ftpserver.listener.nio.NioListener;
+import org.apache.mina.filter.firewall.Subnet;
+import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.core.io.FileSystemResource;
+
+/**
+*
+* @author <a href="http://mina.apache.org">Apache MINA Project</a>
+*/
+public class SpringConfigTest extends TestCase {
+
+    public void test() throws Throwable {
+        XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
+                "src/test/resources/spring-config/config-spring-1.xml"));
+
+        DefaultFtpServer server = (DefaultFtpServer) factory.getBean("server");
+
+        assertEquals(500, server.getConnectionConfig().getMaxLogins());
+        assertEquals(false, server.getConnectionConfig()
+                .isAnonymousLoginEnabled());
+        assertEquals(123, server.getConnectionConfig().getMaxAnonymousLogins());
+        assertEquals(124, server.getConnectionConfig().getMaxLoginFailures());
+        assertEquals(125, server.getConnectionConfig().getLoginFailureDelay());
+
+        Map<String, Listener> listeners = server.getServerContext()
+                .getListeners();
+        assertEquals(3, listeners.size());
+
+        Listener listener = listeners.get("listener0");
+        assertNotNull(listener);
+        assertTrue(listener instanceof NioListener);
+        assertEquals(2222, ((NioListener) listener).getPort());
+        assertEquals(InetAddress.getByName("1.2.3.4"), InetAddress.getByName(((NioListener) listener)
+                .getServerAddress()));
+        assertEquals(100, ((NioListener) listener)
+                .getDataConnectionConfiguration().getIdleTime());
+        assertTrue(((NioListener) listener)
+                .getDataConnectionConfiguration().isActiveEnabled());
+        assertTrue(((NioListener) listener)
+                .getDataConnectionConfiguration().isImplicitSsl());
+        
+        assertEquals(InetAddress.getByName("1.2.3.4"), InetAddress.getByName(((NioListener) listener)
+        		.getDataConnectionConfiguration().getActiveLocalAddress()) );
+        assertEquals("123-125", ((NioListener) listener)
+                .getDataConnectionConfiguration().getPassivePorts());
+
+        DefaultIpFilter filter = (DefaultIpFilter) listener.getIpFilter();
+        assertEquals(3, filter.size());
+        assertTrue(filter.contains(new Subnet(InetAddress.getByName("1.2.3.0"), 16)));
+        assertTrue(filter.contains(new Subnet(InetAddress.getByName("1.2.4.0"), 16)));
+        assertTrue(filter.contains(new Subnet(InetAddress.getByName("1.2.3.4"), 32)));
+        listener = listeners.get("listener1");
+        assertNotNull(listener);
+        assertTrue(listener instanceof MyCustomListener);
+        assertEquals(2223, listener.getPort());
+
+        listener = listeners.get("listener2");
+        assertNotNull(listener);
+        assertTrue(listener instanceof MyCustomListener);
+        assertEquals(2224, listener.getPort());
+
+        CommandFactory cf = server.getCommandFactory();
+        assertTrue(cf.getCommand("FOO") instanceof HELP);
+        assertTrue(cf.getCommand("FOO2") instanceof STAT);
+
+        List<String> languages = server.getServerContext().getMessageResource()
+                .getAvailableLanguages();
+
+        assertEquals(2, languages.size());
+        assertEquals("en", languages.get(0));
+        assertEquals("zh-tw", languages.get(1));
+        
+        NativeFileSystemFactory fs = (NativeFileSystemFactory) server.getFileSystem();
+        assertTrue(fs.isCreateHome());
+        assertTrue(fs.isCaseInsensitive());
+        
+        assertEquals(2, server.getFtplets().size());
+        assertEquals(123, ((TestFtplet)server.getFtplets().get("ftplet1")).getFoo());
+        assertEquals(223, ((TestFtplet)server.getFtplets().get("ftplet2")).getFoo());
+    }
+}