Author: dantran
Date: Fri Jan 2 15:35:51 2009
New Revision: 730869
URL: http://svn.apache.org/viewvc?rev=730869&view=rev
Log:
WAGON-254: rewritten known_hosts file only if its contents are changed
Added:
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/
org/apache/maven/wagon/providers/ssh/knownhost/
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProviderTest.java
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts_same
Modified:
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
AbstractKnownHostsProvider.java
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProvider.java
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
StreamKnownHostsProvider.java
Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/
main/java/org/apache/maven/wagon/providers/ssh/knownhost/
AbstractKnownHostsProvider.java
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
AbstractKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
AbstractKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -20,6 +20,8 @@
*/
import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
/**
* Common base for known hosts providers.
@@ -41,6 +43,8 @@
* the known hosts, in the openssh format
*/
protected String contents;
+
+ protected Set knownHosts = new HashSet();
public void setHostKeyChecking( String hostKeyChecking )
{
@@ -56,14 +60,11 @@
{
return contents;
}
-
- public void setContents( String contents )
- {
- this.contents = contents;
- }
public void storeKnownHosts( String contents )
throws IOException
{
}
+
+
}
Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/
main/java/org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProvider.java
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -19,13 +19,14 @@
* under the License.
*/
-import org.codehaus.plexus.util.FileUtils;
-
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Set;
+
+import org.codehaus.plexus.util.FileUtils;
/**
* Provides known hosts from a file
@@ -70,10 +71,16 @@
public void storeKnownHosts( String contents )
throws IOException
{
- file.getParentFile().mkdirs();
- FileUtils.fileWrite( file.getAbsolutePath(), contents );
+ Set hosts = this.loadKnownHosts( contents );
+
+ if ( ! this.knownHosts.equals( hosts ) )
+ {
+ file.getParentFile().mkdirs();
+ FileUtils.fileWrite( file.getAbsolutePath(), contents );
+ this.knownHosts = hosts;
+ }
}
-
+
public File getFile()
{
return file;
Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/
java/org/apache/maven/wagon/providers/ssh/knownhost/
KnownHostEntry.java
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java?rev=730869&view=auto
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java
(added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java
Fri Jan 2 15:35:51 2009
@@ -0,0 +1,97 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+public class KnownHostEntry
+{
+
+ private String hostName;
+
+ private String keyType;
+
+ private String keyValue;
+
+ public KnownHostEntry()
+ {
+
+ }
+
+ public KnownHostEntry( String hostName, String keyType, String
keyValue )
+ {
+ this.hostName = hostName;
+ this.keyType = keyType;
+ this.keyValue = keyValue;
+ }
+
+ public String getHostName()
+ {
+ return hostName;
+ }
+
+ public void setHostName( String hostName )
+ {
+ this.hostName = hostName;
+ }
+
+ public String getKeyType()
+ {
+ return keyType;
+ }
+
+ public void setKeyType( String keyType )
+ {
+ this.keyType = keyType;
+ }
+
+ public String getKeyValue()
+ {
+ return keyValue;
+ }
+
+ public void setKeyValue( String keyValue )
+ {
+ this.keyValue = keyValue;
+ }
+
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( ( hostName == null ) ? 0 :
hostName.hashCode() );
+ result = prime * result + ( ( keyType == null ) ? 0 :
keyType.hashCode() );
+ result = prime * result + ( ( keyValue == null ) ? 0 :
keyValue.hashCode() );
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ return true;
+ if ( obj == null )
+ return false;
+ if ( getClass() != obj.getClass() )
+ return false;
+ KnownHostEntry other = (KnownHostEntry) obj;
+ if ( hostName == null )
+ {
+ if ( other.hostName != null )
+ return false;
+ }
+ else if ( !hostName.equals( other.hostName ) )
+ return false;
+ if ( keyType == null )
+ {
+ if ( other.keyType != null )
+ return false;
+ }
+ else if ( !keyType.equals( other.keyType ) )
+ return false;
+ if ( keyValue == null )
+ {
+ if ( other.keyValue != null )
+ return false;
+ }
+ else if ( !keyValue.equals( other.keyValue ) )
+ return false;
+ return true;
+ }
+
+}
Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/
main/java/org/apache/maven/wagon/providers/ssh/knownhost/
StreamKnownHostsProvider.java
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
StreamKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/
org/apache/maven/wagon/providers/ssh/knownhost/
StreamKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -19,11 +19,16 @@
* under the License.
*/
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringOutputStream;
-
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringReader;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringOutputStream;
+import org.codehaus.plexus.util.StringUtils;
/**
* Provides known hosts from a file
@@ -43,10 +48,38 @@
StringOutputStream stringOutputStream = new
StringOutputStream();
IOUtil.copy( stream, stringOutputStream );
this.contents = stringOutputStream.toString();
+
+ this.knownHosts = this.loadKnownHosts( this.contents );
}
finally
{
IOUtil.close( stream );
}
}
+
+ protected Set loadKnownHosts( String contents )
+ throws IOException
+ {
+ Set hosts = new HashSet();
+
+ BufferedReader br = new BufferedReader( new
StringReader( contents ) );
+
+ String line = null;
+
+ do
+ {
+ line = br.readLine();
+ if ( line != null )
+ {
+ String tokens[] = StringUtils.split( line );
+ if ( tokens.length == 3 )
+ {
+ hosts.add( new KnownHostEntry( tokens[0],
tokens[1], tokens[2] ) );
+ }
+ }
+
+ }while ( line != null );
+
+ return hosts;
+ }
}
Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
java/org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProviderTest.java
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProviderTest.java?rev=730869&view=auto
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProviderTest.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/
org/apache/maven/wagon/providers/ssh/knownhost/
FileKnownHostsProviderTest.java Fri Jan 2 15:35:51 2009
@@ -0,0 +1,57 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+import java.io.File;
+
+import org.codehaus.plexus.util.FileUtils;
+
+import junit.framework.TestCase;
+
+public class FileKnownHostsProviderTest
+ extends TestCase
+{
+ private File basedir = new File( System.getProperty( "basedir",
"." ) );
+
+ private File testKnownHostsFile;
+
+
+ private FileKnownHostsProvider provider;
+
+ public void setUp()
+ throws Exception
+ {
+ File readonlyKnownHostFile = new File( basedir, "src/test/
resources/known_hosts" );
+ testKnownHostsFile = new File( basedir, "target/
known_hosts" );
+ testKnownHostsFile.delete();
+ FileUtils.copyFile( readonlyKnownHostFile,
testKnownHostsFile );
+
+ provider = new FileKnownHostsProvider( testKnownHostsFile );
+
+ }
+
+ public void testStoreKnownHostsNoChange()
+ throws Exception
+ {
+ long timestamp = this.testKnownHostsFile.lastModified();
+ //file with the same contents, but with entries swapped
+ File sameKnownHostFile = new File( basedir, "src/test/
resources/known_hosts_same" );
+ String contents = FileUtils.fileRead( sameKnownHostFile );
+
+ Thread.sleep( 50 );
+ provider.storeKnownHosts( contents );
+ assertEquals( "known_hosts file is rewritten", timestamp,
testKnownHostsFile.lastModified() );
+ }
+
+ public void testStoreKnownHostsWithChange()
+ throws Exception
+ {
+ long timestamp = this.testKnownHostsFile.lastModified();
+ File sameKnownHostFile = new File( basedir, "src/test/
resources/known_hosts_same" );
+ String contents = FileUtils.fileRead( sameKnownHostFile );
+ contents += "1 2 3";
+
+ Thread.sleep( 50 );
+ provider.storeKnownHosts( contents );
+ assertTrue( "known_hosts file is not rewritten", timestamp !
= testKnownHostsFile.lastModified() );
+ }
+
+}
Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/resources/known_hosts?rev=730869&view=auto
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts Fri Jan 2 15:35:51 2009
@@ -0,0 +1,2 @@
+server,192.168.0.10 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/
WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/
ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/
68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/
MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh
+
58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw
==
+192.168.0.11 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/
WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/
ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/
68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/
MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh
+
58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw
==
Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts_same
URL:
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/resources/known_hosts_same?rev=730869&view=auto
=
=
=
=
=
=
=
=
======================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts_same (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/
resources/known_hosts_same Fri Jan 2 15:35:51 2009
@@ -0,0 +1,2 @@
+192.168.0.11 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/
WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/
ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/
68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/
MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh
+
58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw
==
+server,192.168.0.10 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/
WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/
ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/
68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/
MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh
+
58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw
==
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]