Author: rwinston
Date: Fri Aug 25 14:05:56 2006
New Revision: 436949

URL: http://svn.apache.org/viewvc?rev=436949&view=rev
Log:
Add initial FTPS classes

Added:
    
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSClient.java
    
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSSocketFactory.java
    
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSTrustManager.java

Added: 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSClient.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSClient.java?rev=436949&view=auto
==============================================================================
--- 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSClient.java
 (added)
+++ 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSClient.java
 Fri Aug 25 14:05:56 2006
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2001-2005 The Apache Software Foundation
+ *
+ * Licensed 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.commons.net.ftp;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.SocketException;
+import java.security.KeyStore;
+
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.TrustManager;
+
+public class FTPSClient extends FTPClient
+{
+       private static final String PASSWORD = "password";
+       
+       private SSLContext context;
+       
+       public FTPSClient()
+       {
+               try
+               {
+                       KeyStore keyStore = KeyStore.getInstance("JCEKS");
+                       keyStore.load(null, PASSWORD.toCharArray());
+
+                       KeyManagerFactory keyManagerFactory = 
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+                       keyManagerFactory.init(keyStore, 
PASSWORD.toCharArray());
+
+                       this.context = SSLContext.getInstance("TLS");
+                       this.context.init(keyManagerFactory.getKeyManagers(), 
new TrustManager[] { new FTPSTrustManager() }, null);
+               }
+               catch (Exception e)
+               {
+                       e.printStackTrace();
+               }
+       }
+       
+       /**
+        * @see 
org.apache.commons.net.SocketClient#connect(java.net.InetAddress, int, 
java.net.InetAddress, int)
+        */
+       public void connect(InetAddress address, int port, InetAddress 
localAddress, int localPort) throws SocketException, IOException
+       {
+               super.connect(address, port, localAddress, localPort);
+               
+               this.secure();
+       }
+
+       /**
+        * @see 
org.apache.commons.net.SocketClient#connect(java.net.InetAddress, int)
+        */
+       public void connect(InetAddress address, int port) throws 
SocketException, IOException
+       {
+               super.connect(address, port);
+               
+               this.secure();
+       }
+
+       /**
+        * @see org.apache.commons.net.SocketClient#connect(java.lang.String, 
int, java.net.InetAddress, int)
+        */
+       public void connect(String address, int port, InetAddress localAddress, 
int localPort) throws SocketException, IOException
+       {
+               super.connect(address, port, localAddress, localPort);
+               
+               this.secure();
+       }
+
+       /**
+        * @see org.apache.commons.net.SocketClient#connect(java.lang.String, 
int)
+        */
+       public void connect(String address, int port) throws SocketException, 
IOException
+       {
+               super.connect(address, port);
+               
+               this.secure();
+       }
+       
+       public void secure() throws IOException
+       {
+               this.sendCommand("AUTH", "TLS");
+               
+               SSLSocket socket = (SSLSocket) 
this.context.getSocketFactory().createSocket(this._socket_, 
this.getRemoteAddress().getHostAddress(), this.getRemotePort(), true);
+               
+               socket.startHandshake();
+               
+               this._socket_ = socket;
+               this._controlInput_ = new BufferedReader(new 
InputStreamReader(socket.getInputStream(), getControlEncoding()));
+               this._controlOutput_ = new BufferedWriter(new 
OutputStreamWriter(socket.getOutputStream(), getControlEncoding()));
+
+               this.setSocketFactory(new FTPSSocketFactory(this.context));
+               
+               this.sendCommand("PBSZ", "0");
+               this.sendCommand("PROT", "P");
+       }
+
+       /**
+        * @see org.apache.commons.net.ftp.FTPClient#_openDataConnection_(int, 
java.lang.String)
+        */
+       protected Socket _openDataConnection_(int command, String arg) throws 
IOException
+       {
+               Socket socket = super._openDataConnection_(command, arg);
+               
+               if (socket != null)
+               {
+                       ((SSLSocket) socket).startHandshake();
+               }
+               
+               return socket;
+       }
+}

Added: 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSSocketFactory.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSSocketFactory.java?rev=436949&view=auto
==============================================================================
--- 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSSocketFactory.java
 (added)
+++ 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSSocketFactory.java
 Fri Aug 25 14:05:56 2006
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2001-2005 The Apache Software Foundation
+ *
+ * Licensed 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.commons.net.ftp;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLSocket;
+
+import org.apache.commons.net.SocketFactory;
+
+public class FTPSSocketFactory implements SocketFactory
+{
+       private SSLContext context;
+       
+       public FTPSSocketFactory(SSLContext context)
+       {
+               this.context = context;
+       }
+       
+       public Socket createSocket(String address, int port) throws 
UnknownHostException, IOException
+       {
+               return 
this.init(this.context.getSocketFactory().createSocket(address, port));
+       }
+
+       public Socket createSocket(InetAddress address, int port) throws 
IOException
+       {
+               return 
this.init(this.context.getSocketFactory().createSocket(address, port));
+       }
+
+       public Socket createSocket(String address, int port, InetAddress 
localAddress, int localPort) throws UnknownHostException, IOException
+       {
+               return 
this.init(this.context.getSocketFactory().createSocket(address, port, 
localAddress, localPort));
+       }
+
+       public Socket createSocket(InetAddress address, int port, InetAddress 
localAddress, int localPort) throws IOException
+       {
+               return 
this.init(this.context.getSocketFactory().createSocket(address, port, 
localAddress, localPort));
+       }
+       
+       public ServerSocket createServerSocket(int port) throws IOException
+       {
+               return 
this.init(this.context.getServerSocketFactory().createServerSocket(port));
+       }
+
+       public ServerSocket createServerSocket(int port, int backlog) throws 
IOException
+       {
+               return 
this.init(this.context.getServerSocketFactory().createServerSocket(port, 
backlog));
+       }
+
+       public ServerSocket createServerSocket(int port, int backlog, 
InetAddress ifAddress) throws IOException
+       {
+               return 
this.init(this.context.getServerSocketFactory().createServerSocket(port, 
backlog, ifAddress));
+       }
+       
+       public Socket init(Socket socket) throws IOException
+       {
+               ((SSLSocket) socket).startHandshake();
+               
+               return socket;
+       }
+       
+       public ServerSocket init(ServerSocket socket) throws IOException
+       {
+               ((SSLServerSocket) socket).setUseClientMode(true);
+               
+               return socket;
+       }
+}

Added: 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSTrustManager.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSTrustManager.java?rev=436949&view=auto
==============================================================================
--- 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSTrustManager.java
 (added)
+++ 
jakarta/commons/proper/net/branches/JDK_1_5_BRANCH/src/java/org/apache/commons/net/ftp/FTPSTrustManager.java
 Fri Aug 25 14:05:56 2006
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2001-2005 The Apache Software Foundation
+ *
+ * Licensed 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.commons.net.ftp;
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.X509TrustManager;
+
+public class FTPSTrustManager implements X509TrustManager
+{
+       public void checkClientTrusted(X509Certificate[] certificates, String 
authType)
+       {
+               return;
+       }
+
+       public void checkServerTrusted(X509Certificate[] certificates, String 
authType) throws CertificateException
+       {
+               for (int i = 0; i < certificates.length; ++i)
+               {
+                       certificates[i].checkValidity();
+               }
+       }
+
+       public X509Certificate[] getAcceptedIssuers()
+       {
+               return null;
+       }
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to