Author: saces
Date: 2008-07-28 15:12:52 +0000 (Mon, 28 Jul 2008)
New Revision: 21449
Modified:
trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
add sha1 test for downloaded plugin
Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoader.java
2008-07-28 15:12:52 UTC (rev 21449)
@@ -29,5 +29,7 @@
abstract T checkSource(String source) throws PluginNotFoundException;
abstract String getPluginName(String source) throws
PluginNotFoundException;
+
+ abstract String getSHA1sum() throws PluginNotFoundException;
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFile.java
2008-07-28 15:12:52 UTC (rev 21449)
@@ -24,4 +24,9 @@
return source.substring(source.lastIndexOf('/') + 1);
}
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderFreenet.java
2008-07-28 15:12:52 UTC (rev 21449)
@@ -46,4 +46,9 @@
return source.substring(source.lastIndexOf('/') + 1);
}
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderOfficial.java
2008-07-28 15:12:52 UTC (rev 21449)
@@ -8,7 +8,9 @@
public class PluginDownLoaderOfficial extends PluginDownLoaderURL {
public URL checkSource(String source) throws PluginNotFoundException {
+ // FIXME use the new uri
return
super.checkSource("http://downloads.freenetproject.org/alpha/plugins/" + source
+ ".jar.url");
+ // return
super.checkSource("https://checksums.freenetproject.org/latest/" + source +
".jar.url");
}
@Override
@@ -16,4 +18,9 @@
return source;
}
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
2008-07-28 15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginDownLoaderURL.java
2008-07-28 15:12:52 UTC (rev 21449)
@@ -40,4 +40,9 @@
return name;
}
+ @Override
+ String getSHA1sum() throws PluginNotFoundException {
+ return null;
+ }
+
}
Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2008-07-28
15:02:32 UTC (rev 21448)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java 2008-07-28
15:12:52 UTC (rev 21449)
@@ -3,7 +3,10 @@
* http://www.gnu.org/ for further details of the GPL. */
package freenet.pluginmanager;
+import java.io.BufferedInputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -11,6 +14,8 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -35,6 +40,7 @@
import freenet.node.Ticker;
import freenet.node.useralerts.SimpleUserAlert;
import freenet.node.useralerts.UserAlert;
+import freenet.support.HexUtil;
import freenet.support.JarClassLoader;
import freenet.support.Logger;
import freenet.support.api.HTTPRequest;
@@ -629,6 +635,16 @@
Logger.error(this,
"could not rename temp file to plugin file");
throw new
PluginNotFoundException("could not rename temp file to plugin file");
}
+
+ String digest =
pdl.getSHA1sum();
+ if (digest != null) {
+ String testsum =
getFileSHA1(pluginFile);
+ if
(!(digest.equalsIgnoreCase(testsum))) {
+
Logger.error(this, "Checksum verification failed, should be " +digest+ " but
was " + testsum);
+ throw new
PluginNotFoundException("Checksum verification failed, should be " +digest+ "
but was " + testsum);
+ }
+ }
+
} catch (IOException ioe1) {
Logger.error(this, "could not
load plugin", ioe1);
if (tempPluginFile != null) {
@@ -724,6 +740,32 @@
}
}
+ private String getFileSHA1(File file) throws PluginNotFoundException {
+ final int BUFFERSIZE = 4096;
+ MessageDigest hash = null;
+ FileInputStream fis = null;
+ BufferedInputStream bis = null;
+
+ try {
+ hash = MessageDigest.getInstance("SHA-1");
+ // We compute the hash
+ //
http://java.sun.com/developer/TechTips/1998/tt0915.html#tip2
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
+ int len = 0;
+ byte[] buffer = new byte[BUFFERSIZE];
+ while((len = bis.read(buffer)) > -1) {
+ hash.update(buffer, 0, len);
+ }
+ } catch (Exception e) {
+ throw new PluginNotFoundException("Error while
computing sha1 hash of the downloaded plugin: "+e, e);
+ } finally {
+ Closer.close(bis);
+ Closer.close(fis);
+ }
+ return HexUtil.bytesToHex(hash.digest());
+ }
+
Ticker getTicker() {
return node.getTicker();
}