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());
+ }
+}