commit 7fe318bdf0ef6e658c3e410a591e7acbf2464a0b Author: James Antill Date: Mon Feb 27 13:42:27 2023 -0500 Import rpm: c8s diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..278ba3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SOURCES/icedtea-web-1.8.4.tar.gz +/icedtea-web-1.8.4.tar.gz diff --git a/altjava.patch b/altjava.patch new file mode 100644 index 0000000..017b592 --- /dev/null +++ b/altjava.patch @@ -0,0 +1,40 @@ +--- IcedTea-Web-icedtea-web-1.8.4/shell-launcher/launchers.sh.in ++++ iIcedTea-Web-cedtea-web-1.8.4/shell-launcher/launchers.sh.in +@@ -193,6 +193,12 @@ + shift + done + ++java_dir="`dirname ${JAVA}`" ++alt_java="alt-java" ++if [ -e "$java_dir/$alt_java" ] ; then ++ JAVA="`dirname ${JAVA}`/$alt_java" ++fi ++ + # TODO: inline args without using COMMAND[array] to unify linux/windows scripts + k=0 + COMMAND[k]="${JAVA}" +--- IcedTea-Web-icedtea-web-1.8.4/rust-launcher/src/os_access.rs ++++ IcedTea-Web-icedtea-web-1.8.4/rust-launcher/src/os_access.rs +@@ -5,9 +5,19 @@ + use log_helper; + + pub fn create_java_cmd(os: &Os,jre_dir: &std::path::PathBuf, args: &Vec) -> std::process::Command { +- let mut bin_java = jre_dir.clone(); +- bin_java.push("bin"); +- bin_java.push("java"); ++ let mut alt_bin_java = jre_dir.clone(); ++ alt_bin_java.push("bin"); ++ alt_bin_java.push("alt-java"); ++ let mut bin_java; ++ if alt_bin_java.exists() { ++ os.log("itw-rust-debug: alt-java found"); ++ bin_java = alt_bin_java; ++ } else { ++ os.log("itw-rust-debug: alt-java NOT found"); ++ bin_java = jre_dir.clone(); ++ bin_java.push("bin"); ++ bin_java.push("java"); ++ } + let mut cmd = std::process::Command::new(&bin_java); + for ar in args.into_iter() { + cmd.arg(ar); diff --git a/fed2f5b-22402bb.patch b/fed2f5b-22402bb.patch new file mode 100644 index 0000000..c2bcfa3 --- /dev/null +++ b/fed2f5b-22402bb.patch @@ -0,0 +1,735 @@ +diff --git a/Makefile.am b/Makefile.am +index 3f73cff7..1112bf49 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -956,10 +956,10 @@ if ENABLE_NATIVE_LAUNCHERS + # there is curently harecoded sh, so it can somehow basically work + # see the DESKTOP_SUFFIX for final tuning + launcher.build/$(javaws) launcher.build/$(itweb_settings) launcher.build/$(policyeditor): rust-launcher/src/main.rs rust-launcher/Cargo.toml +- export ITW_TMP_REPLACEMENT=$(TESTS_DIR)/rust_tests_tmp ; \ +- mkdir -p $$ITW_TMP_REPLACEMENT; \ + filename=`basename $@` ; \ + type=$${filename%.*} ; \ ++ export ITW_TMP_REPLACEMENT=$(TESTS_DIR)/rust_tests_tmp/$$type ; \ ++ mkdir -p $$ITW_TMP_REPLACEMENT; \ + srcs=$(TOP_SRC_DIR)/rust-launcher ; \ + outs=$(TOP_BUILD_DIR)/launcher.in.$$type ; \ + mkdir -p launcher.build ; \ +diff --git a/configure.ac b/configure.ac +index 5bcb1046..03796e39 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -71,7 +71,7 @@ AM_CONDITIONAL([ENABLE_NATIVE_LAUNCHERS], [test ! x"$RUSTC" = x -a ! x"$CARGO" = + build_linux=no + build_windows=no + case "${host_os}" in +- linux*) ++ linux*|freebsd*) + build_linux=yes + ;; + cygwin*) +diff --git a/netx/net/sourceforge/jnlp/Launcher.java b/netx/net/sourceforge/jnlp/Launcher.java +index bcfd7b34..1ff42421 100644 +--- a/netx/net/sourceforge/jnlp/Launcher.java ++++ b/netx/net/sourceforge/jnlp/Launcher.java +@@ -552,7 +552,7 @@ public class Launcher { + } + + OutputController.getLogger().log(OutputController.Level.ERROR_ALL, "Starting application [" + mainName + "] ..."); +- ++ + Class mainClass = app.getClassLoader().loadClass(mainName); + + Method main = mainClass.getMethod("main", new Class[] { String[].class }); +@@ -572,6 +572,7 @@ public class Launcher { + + main.setAccessible(true); + ++ JNLPRuntime.addStartupTrackingEntry("invoking main()"); + OutputController.getLogger().log("Invoking main() with args: " + Arrays.toString(args)); + main.invoke(null, new Object[] { args }); + +diff --git a/netx/net/sourceforge/jnlp/OptionsDefinitions.java b/netx/net/sourceforge/jnlp/OptionsDefinitions.java +index c87b4a79..16ef46d3 100644 +--- a/netx/net/sourceforge/jnlp/OptionsDefinitions.java ++++ b/netx/net/sourceforge/jnlp/OptionsDefinitions.java +@@ -78,6 +78,7 @@ public class OptionsDefinitions { + JNLP("-jnlp","BOJnlp", NumberOfArguments.ONE), + HTML("-html","BOHtml", NumberOfArguments.ONE_OR_MORE), + BROWSER("-browser", "BrowserArg", NumberOfArguments.ONE_OR_MORE), ++ STARTUP_TRACKER("-startuptracker","BOStartupTracker"), + //itweb settings + LIST("-list", "IBOList"), + GET("-get", "name", "IBOGet", NumberOfArguments.ONE_OR_MORE), +@@ -222,7 +223,8 @@ public class OptionsDefinitions { + OPTIONS.TRUSTNONE, + OPTIONS.JNLP, + OPTIONS.HTML, +- OPTIONS.BROWSER ++ OPTIONS.BROWSER, ++ OPTIONS.STARTUP_TRACKER + }); + } + +diff --git a/netx/net/sourceforge/jnlp/cache/CacheEntry.java b/netx/net/sourceforge/jnlp/cache/CacheEntry.java +index 3a241acb..c5f1f329 100644 +--- a/netx/net/sourceforge/jnlp/cache/CacheEntry.java ++++ b/netx/net/sourceforge/jnlp/cache/CacheEntry.java +@@ -47,6 +47,8 @@ public class CacheEntry { + /** info about the cached file */ + private final PropertiesFile properties; + ++ private File localFile; ++ + /** + * Create a CacheEntry for the resources specified as a remote + * URL. +@@ -58,8 +60,8 @@ public class CacheEntry { + this.location = location; + this.version = version; + +- File infoFile = CacheUtil.getCacheFile(location, version); +- infoFile = new File(infoFile.getPath() + CacheDirectory.INFO_SUFFIX); // replace with something that can't be clobbered ++ this.localFile = CacheUtil.getCacheFile(location, version); ++ File infoFile = new File(localFile.getPath() + CacheDirectory.INFO_SUFFIX); // replace with something that can't be clobbered + + properties = new PropertiesFile(infoFile, R("CAutoGen")); + } +@@ -130,7 +132,11 @@ public class CacheEntry { + * @return whether the cache contains the version + */ + public boolean isCurrent(long lastModified) { +- boolean cached = isCached(); ++ return isCurrent(lastModified, null); ++ } ++ ++ public boolean isCurrent(long lastModified, File cachedFile) { ++ boolean cached = isCached(cachedFile); + OutputController.getLogger().log("isCurrent:isCached " + cached); + + if (!cached) { +@@ -153,7 +159,16 @@ public class CacheEntry { + * @return true if the resource is in the cache + */ + public boolean isCached() { +- File localFile = getCacheFile(); ++ return isCached(null); ++ } ++ ++ public boolean isCached(File cachedFile) { ++ final File localFile; ++ if (null == version && null != cachedFile) { ++ localFile = cachedFile; ++ } else { ++ localFile = getCacheFile(); ++ } + if (!localFile.exists()) + return false; + +@@ -224,4 +239,7 @@ public class CacheEntry { + return properties.isHeldByCurrentThread(); + } + ++ public File getLocalFile() { ++ return localFile; ++ } + } +diff --git a/netx/net/sourceforge/jnlp/cache/CacheUtil.java b/netx/net/sourceforge/jnlp/cache/CacheUtil.java +index 486421b9..d298d203 100644 +--- a/netx/net/sourceforge/jnlp/cache/CacheUtil.java ++++ b/netx/net/sourceforge/jnlp/cache/CacheUtil.java +@@ -422,14 +422,13 @@ public class CacheUtil { + * @return whether the cache contains the version + * @throws IllegalArgumentException if the source is not cacheable + */ +- public static boolean isCurrent(URL source, Version version, long lastModifed) { ++ public static boolean isCurrent(URL source, Version version, long lastModifed, CacheEntry entry, File cachedFile) { + + if (!isCacheable(source, version)) + throw new IllegalArgumentException(R("CNotCacheable", source)); + + try { +- CacheEntry entry = new CacheEntry(source, version); // could pool this +- boolean result = entry.isCurrent(lastModifed); ++ boolean result = entry.isCurrent(lastModifed, cachedFile); + + OutputController.getLogger().log("isCurrent: " + source + " = " + result); + +@@ -796,6 +795,8 @@ public class CacheUtil { + } + URL undownloaded[] = urlList.toArray(new URL[urlList.size()]); + ++ final int maxUrls = Integer.parseInt(JNLPRuntime.getConfiguration().getProperty(DeploymentConfiguration.KEY_MAX_URLS_DOWNLOAD_INDICATOR)); ++ + listener = indicator.getListener(app, title, undownloaded); + + do { +@@ -810,20 +811,30 @@ public class CacheUtil { + + int percent = (int) ((100 * read) / Math.max(1, total)); + ++ int urlCounter = 0; + for (URL url : undownloaded) { ++ if (urlCounter > maxUrls) { ++ break; ++ } + listener.progress(url, "version", + tracker.getAmountRead(url), + tracker.getTotalSize(url), + percent); ++ urlCounter += 1; + } + } while (!tracker.waitForResources(resources, indicator.getUpdateRate())); + + // make sure they read 100% until indicator closes ++ int urlCounter = 0; + for (URL url : undownloaded) { ++ if (urlCounter > maxUrls) { ++ break; ++ } + listener.progress(url, "version", + tracker.getTotalSize(url), + tracker.getTotalSize(url), + 100); ++ urlCounter += 1; + } + } catch (InterruptedException ex) { + OutputController.getLogger().log(ex); +diff --git a/netx/net/sourceforge/jnlp/cache/CachedDaemonThreadPoolProvider.java b/netx/net/sourceforge/jnlp/cache/CachedDaemonThreadPoolProvider.java +index 1cd4df23..ff48662d 100644 +--- a/netx/net/sourceforge/jnlp/cache/CachedDaemonThreadPoolProvider.java ++++ b/netx/net/sourceforge/jnlp/cache/CachedDaemonThreadPoolProvider.java +@@ -36,9 +36,14 @@ + exception statement from your version. */ + package net.sourceforge.jnlp.cache; + ++import net.sourceforge.jnlp.config.DeploymentConfiguration; ++import net.sourceforge.jnlp.runtime.JNLPRuntime; ++ + import java.util.concurrent.ExecutorService; +-import java.util.concurrent.Executors; ++import java.util.concurrent.LinkedBlockingQueue; + import java.util.concurrent.ThreadFactory; ++import java.util.concurrent.ThreadPoolExecutor; ++import java.util.concurrent.TimeUnit; + import java.util.concurrent.atomic.AtomicInteger; + + public class CachedDaemonThreadPoolProvider { +@@ -81,6 +86,19 @@ public class CachedDaemonThreadPoolProvider { + } + } + +- public static final ExecutorService DAEMON_THREAD_POOL = Executors.newCachedThreadPool(new DaemonThreadFactory()); ++ public static synchronized ExecutorService getThreadPool() { ++ if (null == DAEMON_THREAD_POOL) { ++ final int nThreads = Integer.parseInt(JNLPRuntime.getConfiguration().getProperty(DeploymentConfiguration.KEY_BACKGROUND_THREADS_COUNT)); ++ ThreadPoolExecutor pool = new ThreadPoolExecutor(nThreads, nThreads, ++ 60L, TimeUnit.SECONDS, ++ new LinkedBlockingQueue(), ++ new DaemonThreadFactory()); ++ pool.allowCoreThreadTimeOut(true); ++ DAEMON_THREAD_POOL = pool; ++ } ++ return DAEMON_THREAD_POOL; ++ } ++ ++ private static ExecutorService DAEMON_THREAD_POOL = null; + + } +diff --git a/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java b/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java +index 643b46fd..e0a123bb 100644 +--- a/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java ++++ b/netx/net/sourceforge/jnlp/cache/ResourceDownloader.java +@@ -153,7 +153,12 @@ public class ResourceDownloader implements Runnable { + URLConnection connection = ConnectionFactory.getConnectionFactory().openConnection(location.URL); // this won't change so should be okay not-synchronized + connection.addRequestProperty("Accept-Encoding", "pack200-gzip, gzip"); + +- File localFile = CacheUtil.getCacheFile(resource.getLocation(), resource.getDownloadVersion()); ++ File localFile = null; ++ if (resource.getRequestVersion() == resource.getDownloadVersion()) { ++ localFile = entry.getLocalFile(); ++ } else { ++ localFile = CacheUtil.getCacheFile(resource.getLocation(), resource.getDownloadVersion()); ++ } + Long size = location.length; + if (size == null) { + size = connection.getContentLengthLong(); +@@ -162,7 +167,7 @@ public class ResourceDownloader implements Runnable { + if (lm == null) { + lm = connection.getLastModified(); + } +- boolean current = CacheUtil.isCurrent(resource.getLocation(), resource.getRequestVersion(), lm) && resource.getUpdatePolicy() != UpdatePolicy.FORCE; ++ boolean current = CacheUtil.isCurrent(resource.getLocation(), resource.getRequestVersion(), lm, entry, localFile) && resource.getUpdatePolicy() != UpdatePolicy.FORCE; + if (!current) { + if (entry.isCached()) { + entry.markForDelete(); +diff --git a/netx/net/sourceforge/jnlp/cache/ResourceTracker.java b/netx/net/sourceforge/jnlp/cache/ResourceTracker.java +index f4ad69be..972a10cf 100644 +--- a/netx/net/sourceforge/jnlp/cache/ResourceTracker.java ++++ b/netx/net/sourceforge/jnlp/cache/ResourceTracker.java +@@ -28,10 +28,7 @@ import static net.sourceforge.jnlp.cache.Resource.Status.PROCESSING; + import java.io.File; + import java.net.MalformedURLException; + import java.net.URL; +-import java.util.ArrayList; +-import java.util.Collection; +-import java.util.EnumSet; +-import java.util.List; ++import java.util.*; + + import net.sourceforge.jnlp.DownloadOptions; + import net.sourceforge.jnlp.Version; +@@ -105,6 +102,7 @@ public class ResourceTracker { + + /** the resources known about by this resource tracker */ + private final List resources = new ArrayList<>(); ++ private final HashMap resourcesMap = new HashMap<>(); + + /** download listeners for this tracker */ + private final List listeners = new ArrayList<>(); +@@ -155,6 +153,7 @@ public class ResourceTracker { + return; + resource.addTracker(this); + resources.add(resource); ++ resourcesMap.put(location.toString(), resource); + } + + if (options == null) { +@@ -190,6 +189,7 @@ public class ResourceTracker { + + if (resource != null) { + resources.remove(resource); ++ resourcesMap.remove(location.toString()); + resource.removeTracker(this); + } + +@@ -508,7 +508,7 @@ public class ResourceTracker { + * @param resource resource to be download + */ + protected void startDownloadThread(Resource resource) { +- CachedDaemonThreadPoolProvider.DAEMON_THREAD_POOL.execute(new ResourceDownloader(resource, lock)); ++ CachedDaemonThreadPoolProvider.getThreadPool().execute(new ResourceDownloader(resource, lock)); + } + + static Resource selectByFilter(Collection source, Filter filter) { +@@ -569,6 +569,12 @@ public class ResourceTracker { + */ + private Resource getResource(URL location) { + synchronized (resources) { ++ if (null != location) { ++ Resource res = resourcesMap.get(location.toString()); ++ if (null != res && UrlUtils.urlEquals(res.getLocation(), location)) { ++ return res; ++ } ++ } + for (Resource resource : resources) { + if (UrlUtils.urlEquals(resource.getLocation(), location)) + return resource; +diff --git a/netx/net/sourceforge/jnlp/config/Defaults.java b/netx/net/sourceforge/jnlp/config/Defaults.java +index 8e316e4f..78f9b3e6 100644 +--- a/netx/net/sourceforge/jnlp/config/Defaults.java ++++ b/netx/net/sourceforge/jnlp/config/Defaults.java +@@ -466,6 +466,21 @@ public class Defaults { + BasicValueValidators.getRangedIntegerValidator(0, 1000), + String.valueOf(10)// treshold when applet is considered as too small + }, ++ { ++ DeploymentConfiguration.KEY_ENABLE_CACHE_FSYNC, ++ BasicValueValidators.getBooleanValidator(), ++ String.valueOf(false) ++ }, ++ { ++ DeploymentConfiguration.KEY_BACKGROUND_THREADS_COUNT, ++ BasicValueValidators.getRangedIntegerValidator(1, 16), ++ String.valueOf(3) ++ }, ++ { ++ DeploymentConfiguration.KEY_MAX_URLS_DOWNLOAD_INDICATOR, ++ BasicValueValidators.getRangedIntegerValidator(1, 1024), ++ String.valueOf(16) ++ }, + //************** + //* Native (rust) only - beggin + //************** +diff --git a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java +index de7425e3..84f77075 100644 +--- a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java ++++ b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java +@@ -250,7 +250,10 @@ public final class DeploymentConfiguration { + public static final String KEY_SMALL_SIZE_OVERRIDE_TRESHOLD = "deployment.small.size.treshold"; + public static final String KEY_SMALL_SIZE_OVERRIDE_WIDTH = "deployment.small.size.override.width"; + public static final String KEY_SMALL_SIZE_OVERRIDE_HEIGHT = "deployment.small.size.override.height"; +- ++ public static final String KEY_ENABLE_CACHE_FSYNC = "deployment.enable.cache.fsync"; ++ public static final String KEY_BACKGROUND_THREADS_COUNT = "deployment.background.threads.count"; ++ public static final String KEY_MAX_URLS_DOWNLOAD_INDICATOR = "deployment.max.urls.download.indicator"; ++ + public static final String TRANSFER_TITLE = "Legacy configuration and cache found. Those will be now transported to new locations"; + + private ConfigurationException loadingException = null; +diff --git a/netx/net/sourceforge/jnlp/resources/Messages.properties b/netx/net/sourceforge/jnlp/resources/Messages.properties +index 773f134b..0e87bce3 100644 +--- a/netx/net/sourceforge/jnlp/resources/Messages.properties ++++ b/netx/net/sourceforge/jnlp/resources/Messages.properties +@@ -357,6 +357,7 @@ BXoffline = Prevent ITW network connection. Only cache will be used. Applicati + BOHelp1 = Prints out information about supported command and basic usage. + BOHelp2 = Prints out information about supported command and basic usage. Can also take an parameter, and then it prints detailed help for this command. + BOTrustnone = Instead of asking user, will foretold all answers as no. ++BOStartupTracker = Enable startup time tracker + + # Itweb-settings boot commands + IBOList=Shows a list of all the IcedTea-Web settings and their current values. +diff --git a/netx/net/sourceforge/jnlp/runtime/Boot.java b/netx/net/sourceforge/jnlp/runtime/Boot.java +index 7317b989..a9990909 100644 +--- a/netx/net/sourceforge/jnlp/runtime/Boot.java ++++ b/netx/net/sourceforge/jnlp/runtime/Boot.java +@@ -107,6 +107,10 @@ public final class Boot implements PrivilegedAction { + + optionParser = new OptionParser(argsIn, OptionsDefinitions.getJavaWsOptions()); + ++ if (optionParser.hasOption(OptionsDefinitions.OPTIONS.STARTUP_TRACKER)) { ++ JNLPRuntime.initStartupTracker(); ++ } ++ + if (optionParser.hasOption(OptionsDefinitions.OPTIONS.VERBOSE)) { + JNLPRuntime.setDebug(true); + } +diff --git a/netx/net/sourceforge/jnlp/runtime/CachedJarFileCallback.java b/netx/net/sourceforge/jnlp/runtime/CachedJarFileCallback.java +index 9746f5d0..811d132e 100644 +--- a/netx/net/sourceforge/jnlp/runtime/CachedJarFileCallback.java ++++ b/netx/net/sourceforge/jnlp/runtime/CachedJarFileCallback.java +@@ -43,6 +43,7 @@ import java.io.FileOutputStream; + import java.io.IOException; + import java.io.InputStream; + import java.io.OutputStream; ++import java.net.URISyntaxException; + import java.net.URL; + import java.net.URLConnection; + import java.security.AccessController; +@@ -103,9 +104,11 @@ final class CachedJarFileCallback implements URLJarFileCallBack { + + if (UrlUtils.isLocalFile(localUrl)) { + // if it is known to us, just return the cached file +- JarFile returnFile = new JarFile(localUrl.getPath()); ++ JarFile returnFile=null; + + try { ++ localUrl.toURI().getPath(); ++ returnFile = new JarFile(localUrl.toURI().getPath()); + + // Blank out the class-path because: + // 1) Web Start does not support it +@@ -117,6 +120,8 @@ final class CachedJarFileCallback implements URLJarFileCallBack { + + } catch (NullPointerException npe) { + // Discard NPE here. Maybe there was no manifest, maybe there were no attributes, etc. ++ } catch (URISyntaxException e) { ++ // should not happen as localUrl was built using localFile.toURI().toURL(), see JNLPClassLoader.activateJars(List) + } + + return returnFile; +diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java b/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java +index 3785707a..77576fdd 100644 +--- a/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java ++++ b/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java +@@ -709,7 +709,9 @@ public class JNLPClassLoader extends URLClassLoader { + fillInPartJars(initialJars); // add in each initial part's lazy jars + } + ++ JNLPRuntime.addStartupTrackingEntry("JARs download enter"); + waitForJars(initialJars); //download the jars first. ++ JNLPRuntime.addStartupTrackingEntry("JARs download complete"); + + //A ZipException will propagate later on if the jar is invalid and not checked here + if (shouldFilterInvalidJars()) { +diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java +index 295744db..919f78fd 100644 +--- a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java ++++ b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java +@@ -170,6 +170,7 @@ public class JNLPRuntime { + + private static Boolean onlineDetected = null; + ++ private static long startupTrackerMoment = 0; + + /** + * Header is not checked and so eg +@@ -891,6 +892,19 @@ public class JNLPRuntime { + JNLPRuntime.ignoreHeaders = ignoreHeaders; + } + ++ // may only be called from Boot ++ public static void initStartupTracker() { ++ startupTrackerMoment = System.currentTimeMillis(); ++ } ++ ++ public static void addStartupTrackingEntry(String message) { ++ if (startupTrackerMoment > 0) { ++ long time = (System.currentTimeMillis() - startupTrackerMoment)/1000; ++ String msg = "Startup tracker: seconds elapsed: [" + time + "], message: [" + message + "]"; ++ OutputController.getLogger().log(OutputController.Level.ERROR_ALL, msg); ++ } ++ } ++ + private static boolean isPluginDebug() { + if (pluginDebug == null) { + try { +diff --git a/netx/net/sourceforge/jnlp/tools/JarCertVerifier.java b/netx/net/sourceforge/jnlp/tools/JarCertVerifier.java +index eb26dc69..7fd5d92f 100644 +--- a/netx/net/sourceforge/jnlp/tools/JarCertVerifier.java ++++ b/netx/net/sourceforge/jnlp/tools/JarCertVerifier.java +@@ -39,15 +39,18 @@ import java.util.Enumeration; + import java.util.HashMap; + import java.util.List; + import java.util.Map; +-import java.util.Vector; ++import java.util.concurrent.Callable; ++import java.util.concurrent.Future; + import java.util.jar.JarEntry; + import java.util.regex.Pattern; + + import net.sourceforge.jnlp.JARDesc; + import net.sourceforge.jnlp.JNLPFile; + import net.sourceforge.jnlp.LaunchException; ++import net.sourceforge.jnlp.cache.CachedDaemonThreadPoolProvider; + import net.sourceforge.jnlp.cache.ResourceTracker; + import net.sourceforge.jnlp.runtime.JNLPClassLoader.SecurityDelegate; ++import net.sourceforge.jnlp.runtime.JNLPRuntime; + import net.sourceforge.jnlp.security.AppVerifier; + import net.sourceforge.jnlp.security.CertVerifier; + import net.sourceforge.jnlp.security.CertificateUtils; +@@ -226,37 +229,36 @@ public class JarCertVerifier implements CertVerifier { + private void verifyJars(List jars, ResourceTracker tracker) + throws Exception { + ++ List filesToVerify = new ArrayList<>(); + for (JARDesc jar : jars) { ++ File jarFile = tracker.getCacheFile(jar.getLocation()); + +- try { +- +- File jarFile = tracker.getCacheFile(jar.getLocation()); +- +- // some sort of resource download/cache error. Nothing to add +- // in that case ... but don't fail here +- if (jarFile == null) { +- continue; +- } ++ // some sort of resource download/cache error. Nothing to add ++ // in that case ... but don't fail here ++ if (jarFile == null) { ++ continue; ++ } + +- String localFile = jarFile.getAbsolutePath(); +- if (verifiedJars.contains(localFile) +- || unverifiedJars.contains(localFile)) { +- continue; +- } ++ String localFile = jarFile.getAbsolutePath(); ++ if (verifiedJars.contains(localFile) ++ || unverifiedJars.contains(localFile)) { ++ continue; ++ } + +- VerifyResult result = verifyJar(localFile); ++ filesToVerify.add(localFile); ++ } + +- if (result == VerifyResult.UNSIGNED) { +- unverifiedJars.add(localFile); +- } else if (result == VerifyResult.SIGNED_NOT_OK) { +- verifiedJars.add(localFile); +- } else if (result == VerifyResult.SIGNED_OK) { +- verifiedJars.add(localFile); +- } +- } catch (Exception e) { +- // We may catch exceptions from using verifyJar() +- // or from checkTrustedCerts +- throw e; ++ List verified = verifyJarsParallel(filesToVerify); ++ ++ for (VerifiedJarFile vjf : verified) { ++ VerifyResult result = verifyJarEntryCerts(vjf.file, vjf.hasManifest, vjf.entriesVec); ++ String localFile = vjf.file; ++ if (result == VerifyResult.UNSIGNED) { ++ unverifiedJars.add(localFile); ++ } else if (result == VerifyResult.SIGNED_NOT_OK) { ++ verifiedJars.add(localFile); ++ } else if (result == VerifyResult.SIGNED_OK) { ++ verifiedJars.add(localFile); + } + } + +@@ -264,6 +266,31 @@ public class JarCertVerifier implements CertVerifier { + checkTrustedCerts(certPath); + } + ++ private List verifyJarsParallel(List files) throws Exception { ++ JNLPRuntime.addStartupTrackingEntry("JARs verification enter"); ++ List> callables = new ArrayList<>(files.size()); ++ for (final String fi : files) { ++ callables.add(new Callable() { ++ @Override ++ public VerifiedJarFile call() throws Exception { ++ return verifyJar(fi); ++ } ++ }); ++ } ++ List> futures = CachedDaemonThreadPoolProvider.getThreadPool().invokeAll(callables); ++ List results = new ArrayList<>(files.size()); ++ try { ++ for (Future fu : futures) { ++ results.add(fu.get()); ++ } ++ } catch (Exception e) { ++ OutputController.getLogger().log(OutputController.Level.ERROR_ALL, e); ++ throw e; ++ } ++ JNLPRuntime.addStartupTrackingEntry("JARs verification complete"); ++ return results; ++ } ++ + /** + * Checks through all the jar entries of jarName for signers, storing all the common ones in the certs hash map. + * +@@ -273,15 +300,15 @@ public class JarCertVerifier implements CertVerifier { + * @throws Exception + * Will be thrown if there are any problems with the jar. + */ +- private VerifyResult verifyJar(String jarName) throws Exception { ++ private VerifiedJarFile verifyJar(String jarName) throws Exception { + try (JarFile jarFile = new JarFile(jarName, true)) { +- Vector entriesVec = new Vector(); ++ List entriesVec = new ArrayList<>(); + byte[] buffer = new byte[8192]; + + Enumeration entries = jarFile.entries(); + while (entries.hasMoreElements()) { + JarEntry je = entries.nextElement(); +- entriesVec.addElement(je); ++ entriesVec.add(je); + + InputStream is = jarFile.getInputStream(je); + try { +@@ -295,8 +322,7 @@ public class JarCertVerifier implements CertVerifier { + } + } + } +- return verifyJarEntryCerts(jarName, jarFile.getManifest() != null, +- entriesVec); ++ return new VerifiedJarFile(jarName, null != jarFile.getManifest(), entriesVec); + + } catch (Exception e) { + OutputController.getLogger().log(OutputController.Level.ERROR_ALL, e); +@@ -318,7 +344,7 @@ public class JarCertVerifier implements CertVerifier { + * Will be thrown if there are issues with entries. + */ + VerifyResult verifyJarEntryCerts(String jarName, boolean jarHasManifest, +- Vector entries) throws Exception { ++ List entries) throws Exception { + // Contains number of entries the cert with this CertPath has signed. + Map jarSignCount = new HashMap<>(); + int numSignableEntriesInJar = 0; +@@ -629,4 +655,16 @@ public class JarCertVerifier implements CertVerifier { + } + return sum; + } ++ ++ private static class VerifiedJarFile { ++ final String file; ++ final boolean hasManifest; ++ private final List entriesVec; ++ ++ private VerifiedJarFile(String file, boolean hasManifest, List entriesVec) { ++ this.file = file; ++ this.hasManifest = hasManifest; ++ this.entriesVec = entriesVec; ++ } ++ } + } +diff --git a/netx/net/sourceforge/jnlp/util/PropertiesFile.java b/netx/net/sourceforge/jnlp/util/PropertiesFile.java +index 2f0918f6..c399ef20 100644 +--- a/netx/net/sourceforge/jnlp/util/PropertiesFile.java ++++ b/netx/net/sourceforge/jnlp/util/PropertiesFile.java +@@ -23,6 +23,8 @@ import java.io.IOException; + import java.io.InputStream; + import java.util.Properties; + ++import net.sourceforge.jnlp.config.DeploymentConfiguration; ++import net.sourceforge.jnlp.runtime.JNLPRuntime; + import net.sourceforge.jnlp.util.lockingfile.LockedFile; + import net.sourceforge.jnlp.util.logging.OutputController; + +@@ -168,7 +170,9 @@ public class PropertiesFile extends Properties { + store(s, header); + + // fsync() +- s.getChannel().force(true); ++ if (Boolean.parseBoolean(JNLPRuntime.getConfiguration().getProperty(DeploymentConfiguration.KEY_ENABLE_CACHE_FSYNC))) { ++ s.getChannel().force(true); ++ } + lastStore = file.lastModified(); + } finally { + if (s != null) s.close(); +diff --git a/tests/netx/unit/net/sourceforge/jnlp/runtime/CachedJarFileCallbackTest.java b/tests/netx/unit/net/sourceforge/jnlp/runtime/CachedJarFileCallbackTest.java +new file mode 100644 +index 00000000..bc564db5 +--- /dev/null ++++ b/tests/netx/unit/net/sourceforge/jnlp/runtime/CachedJarFileCallbackTest.java +@@ -0,0 +1,55 @@ ++package net.sourceforge.jnlp.runtime; ++ ++import java.io.File; ++import java.io.IOException; ++import java.net.URL; ++import java.net.URLEncoder; ++import java.nio.charset.StandardCharsets; ++import java.util.Arrays; ++import java.util.List; ++import java.util.jar.JarFile; ++ ++import org.junit.After; ++import org.junit.Before; ++import org.junit.Test; ++ ++import net.sourceforge.jnlp.util.FileTestUtils; ++import net.sourceforge.jnlp.util.FileUtils; ++ ++public class CachedJarFileCallbackTest { ++ private File tempDirectory; ++ ++ @Before ++ public void before() throws IOException { ++ tempDirectory = FileTestUtils.createTempDirectory(); ++ } ++ ++ @After ++ public void after() throws IOException { ++ FileUtils.recursiveDelete(tempDirectory, tempDirectory.getParentFile()); ++ } ++ ++ @Test ++ public void testRetrieve() throws Exception { ++ List names = Arrays.asList("test1.0.jar", "test@1.0.jar"); ++ ++ for (String name: names) { ++ // URL-encode the filename ++ name = URLEncoder.encode(name, StandardCharsets.UTF_8.name()); ++ // create temp jar file ++ File jarFile = new File(tempDirectory, name); ++ FileTestUtils.createJarWithContents(jarFile /* no contents */); ++ ++ // JNLPClassLoader.activateJars uses toUri().toURL() to get the local file URL ++ URL localUrl = jarFile.toURI().toURL(); ++ URL remoteUrl = new URL("http://localhost/" + name); ++ // add jar to cache ++ CachedJarFileCallback cachedJarFileCallback = CachedJarFileCallback.getInstance(); ++ cachedJarFileCallback.addMapping(remoteUrl, localUrl); ++ // retrieve from cache (throws exception if file not found) ++ try (JarFile fromCacheJarFile = cachedJarFileCallback.retrieve(remoteUrl)) { ++ // nothing to do, we just wanted to make sure that the local file existed ++ } ++ } ++ } ++} diff --git a/icedtea-web.spec b/icedtea-web.spec new file mode 100644 index 0000000..aba8b81 --- /dev/null +++ b/icedtea-web.spec @@ -0,0 +1,665 @@ +#can rust have debuginfo? Verify and fix! Likely issue in Makefile of itw. +%global debug_package %{nil} + +# Version of java +%define javaver 1.8.0 + +# Alternatives priority +%define priority 18000 +# jnlp prorocol gnome registry keys +%define gurlhandler /desktop/gnome/url-handlers +%define jnlphandler %{gurlhandler}/jnlp +%define jnlpshandler %{gurlhandler}/jnlps + +%define javadir %{_jvmdir}/java-%{javaver}-openjdk +%define jredir %{_jvmdir}/jre-%{javaver}-openjdk + +%define binsuffix .itweb + +%define preffered_java java-%{javaver}-openjdk + +Name: icedtea-web +Version: 1.8.4 +Release: 4%{?dist} +Summary: Additional Java components for OpenJDK - Java browser plug-in and Web Start implementation + +Group: Applications/Internet +License: LGPLv2+ and GPLv2 with exceptions +URL: http://icedtea.classpath.org/wiki/IcedTea-Web +Source0: http://icedtea.classpath.org/download/source/%{name}-%{version}.tar.gz +Patch0: patchOutDunce.patch +Patch1: altjava.patch +Patch2: fed2f5b-22402bb.patch + +BuildRequires: javapackages-tools +#for deprecated add_maven_depmap, see https://www.spinics.net/lists/fedora-devel/msg233211.html +BuildRequires: javapackages-local +BuildRequires: %{preffered_java}-devel +BuildRequires: desktop-file-utils +BuildRequires: glib2-devel +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: cargo +BuildRequires: junit +BuildRequires: hamcrest +BuildRequires: libappstream-glib +# new in 1.5 to have clean up for malformed XMLs +BuildRequires: tagsoup +# to apply binary tests for CVEs +BuildRequires: git + +# For functionality and the OpenJDK dirs +Requires: %{preffered_java} +Requires: javapackages-tools +Recommends: bash-completion +#maven fragments +Requires(post): javapackages-tools +Requires(postun): javapackages-tools + +# When itw builds against it, it have to be also in runtime +Requires: tagsoup + +# Post requires alternatives to install tool alternatives. +Requires(post): %{_sbindir}/alternatives +# jnlp protocols support +Requires(post): GConf2 +# Postun requires alternatives to uninstall tool alternatives. +Requires(postun): %{_sbindir}/alternatives +# jnlp protocols support +Requires(postun): GConf2 + +# Standard JPackage plugin provides. +Provides: java-plugin = 1:%{javaver} +Provides: javaws = 1:%{javaver} +Provides: %{preffered_java}-javaws = 1:%{version} + +Provides: %{preffered_java}-plugin = 1:%{version} + +%description +The IcedTea-Web project provides a an implementation of Java Web Start +(originally based on the Netx project) and a settings tool to +manage deployment settings for the aforementioned plugin and Web Start +implementations. + +%package javadoc +Summary: API documentation for IcedTea-Web +Group: Documentation +Requires: %{name} = %{version}-%{release} +BuildArch: noarch + +%description javadoc +This package contains Javadocs for the IcedTea-Web project. + + +%package devel +Summary: pure sources for debugging IcedTea-Web +Group: devel +Requires: %{name} = %{version}-%{release} +BuildArch: noarch + +%description devel +This package contains ziped sources of the IcedTea-Web project. + +%package nativelaunchers +Summary: native launchers of icedtea-web +Group: Applications/Internet +Requires: %{name} = %{version}-%{release} + +%description nativelaunchers +This package contains native launchers for faster starup + +%prep +%setup -q -n IcedTea-Web-%{name}-%{version} +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 + +%build +autoreconf -vfi +CXXFLAGS="$RPM_OPT_FLAGS $RPM_LD_FLAGS" \ +%configure \ + --with-pkgversion=fedora-%{release}-%{_arch} \ + --docdir=%{_datadir}/javadoc/%{name} \ + --with-jdk-home=%{javadir} \ + --with-jre-home=%{jredir} \ + --libdir=%{_libdir} \ + --program-suffix=%{binsuffix} \ + --disable-native-plugin \ + --with-itw-libs=DISTRIBUTION \ + --with-modularjdk-file=%{_sysconfdir}/java/%{name} \ + --enable-shell-launchers \ + --prefix=%{_prefix} + +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT + +# icedteaweb-completion is currently not handled by make nor make install +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d/ +mv completion/policyeditor.bash $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d/ +mv completion/javaws.bash $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d/ +mv completion/itweb-settings.bash $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d/ + +# Move javaws man page to a more specific name +mv $RPM_BUILD_ROOT/%{_mandir}/man1/javaws.1 $RPM_BUILD_ROOT/%{_mandir}/man1/javaws.itweb.1 + +# Install desktop files. +install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/{applications,pixmaps} + +# patch desktops to use the legacy sh laucnhers +sed "s/.itweb /.itweb.sh /" -i javaws.desktop #there is javaws... %u +sed "s/.itweb$/.itweb.sh/" -i itweb-settings.desktop +sed "s/.itweb$/.itweb.sh/" -i policyeditor.desktop + +desktop-file-install --vendor ''\ + --dir $RPM_BUILD_ROOT%{_datadir}/applications javaws.desktop +desktop-file-install --vendor ''\ + --dir $RPM_BUILD_ROOT%{_datadir}/applications itweb-settings.desktop +desktop-file-install --vendor ''\ + --dir $RPM_BUILD_ROOT%{_datadir}/applications policyeditor.desktop + +# install MetaInfo file for firefox +DESTDIR=%{buildroot} appstream-util install metadata/%{name}.metainfo.xml +# install MetaInfo file for javaws +DESTDIR=%{buildroot} appstream-util install metadata/%{name}-javaws.appdata.xml + +# maven fragments generation +mkdir -p $RPM_BUILD_ROOT%{_javadir} +pushd $RPM_BUILD_ROOT%{_javadir} +ln -s ../%{name}/javaws.jar ../%{name}/netx.jar # backward copatinlity needed? +ln -s ../%{name}/javaws.jar %{name}.jar +ln -s ../%{name}/plugin.jar %{name}-plugin.jar +popd +mkdir -p $RPM_BUILD_ROOT/%{_mavenpomdir} +cp metadata/%{name}.pom $RPM_BUILD_ROOT/%{_mavenpomdir}/%{name}.pom +cp metadata/%{name}-plugin.pom $RPM_BUILD_ROOT/%{_mavenpomdir}/%{name}-plugin.pom + +%add_maven_depmap %{name}.pom %{name}.jar +%add_maven_depmap %{name}-plugin.pom %{name}-plugin.jar + +cp netx.build/lib/src.zip $RPM_BUILD_ROOT%{_datadir}/%{name}/netx.src.zip # backward copatinlity needed? +cp netx.build/lib/src.zip $RPM_BUILD_ROOT%{_datadir}/%{name}/javaws.src.zip +cp liveconnect/lib/src.zip $RPM_BUILD_ROOT%{_datadir}/%{name}/plugin.src.zip + +%find_lang %{name} --all-name --with-man + +%check +#make check +#appstream-util validate $RPM_BUILD_ROOT/%{_datadir}/appdata/*.xml || : + +%post nativelaunchers +PRIORITY=%{priority} +let PRIORITY=PRIORITY-1 +alternatives \ + --install %{_bindir}/javaws javaws.%{_arch} %{_prefix}/bin/javaws%{binsuffix} $PRIORITY --family %{preffered_java}.%{_arch} \ + --slave %{_bindir}/itweb-settings itweb-settings %{_prefix}/bin/itweb-settings%{binsuffix} \ + --slave %{_bindir}/policyeditor policyeditor %{_prefix}/bin/policyeditor%{binsuffix} \ + --slave %{_bindir}/ControlPanel ControlPanel %{_prefix}/bin/itweb-settings%{binsuffix} \ + --slave %{_mandir}/man1/javaws.1.gz javaws.1.gz %{_mandir}/man1/javaws%{binsuffix}.1.gz \ + --slave %{_mandir}/man1/ControlPanel.1.gz ControlPanel.1.gz %{_mandir}/man1/itweb-settings.1.gz +%post +PRIORITY=%{priority} +alternatives \ + --install %{_bindir}/javaws javaws.%{_arch} %{_prefix}/bin/javaws%{binsuffix}.sh $PRIORITY --family %{preffered_java}.%{_arch} \ + --slave %{_bindir}/itweb-settings itweb-settings %{_prefix}/bin/itweb-settings%{binsuffix}.sh \ + --slave %{_bindir}/policyeditor policyeditor %{_prefix}/bin/policyeditor%{binsuffix}.sh \ + --slave %{_bindir}/ControlPanel ControlPanel %{_prefix}/bin/itweb-settings%{binsuffix}.sh \ + --slave %{_mandir}/man1/javaws.1.gz javaws.1.gz %{_mandir}/man1/javaws%{binsuffix}.1.gz \ + --slave %{_mandir}/man1/ControlPanel.1.gz ControlPanel.1.gz %{_mandir}/man1/itweb-settings.1.gz + +gconftool-2 -s %{jnlphandler}/command '%{_bindir}/javaws %s' --type String &> /dev/null || : +gconftool-2 -s %{jnlphandler}/enabled --type Boolean true &> /dev/null || : +gconftool-2 -s %{jnlpshandler}/command '%{_bindir}/javaws %s' --type String &> /dev/null || : +gconftool-2 -s %{jnlpshandler}/enabled --type Boolean true &> /dev/null || : + +%posttrans +update-desktop-database &> /dev/null || : +exit 0 + +%postun nativelaunchers +if [ $1 -eq 0 ] +then + alternatives --remove javaws.%{_arch} %{_prefix}/bin/javaws%{binsuffix} +fi +exit 0 + +%postun +update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ] +then + alternatives --remove javaws.%{_arch} %{_prefix}/bin/javaws%{binsuffix}.sh + gconftool-2 -u %{jnlphandler}/command &> /dev/null || : + gconftool-2 -u %{jnlphandler}/enabled &> /dev/null || : + gconftool-2 -u %{jnlpshandler}/command &> /dev/null || : + gconftool-2 -u %{jnlpshandler}/enabled &> /dev/null || : +fi +exit 0 + +%files nativelaunchers +%{_prefix}/bin/javaws.itweb +%{_prefix}/bin/itweb-settings.itweb +%{_prefix}/bin/policyeditor.itweb +%license COPYING + +%files -f .mfiles -f %{name}.lang +%{_sysconfdir}/bash_completion.d/* +%config(noreplace) %{_sysconfdir}/java/%{name}/itw-modularjdk.args +%{_prefix}/bin/javaws.itweb.sh +%{_prefix}/bin/itweb-settings.itweb.sh +%{_prefix}/bin/policyeditor.itweb.sh +%{_datadir}/applications/* +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/*.jar +%{_datadir}/%{name}/*.png +%{_datadir}/man/man1/* +%{_datadir}/pixmaps/* +%{_datadir}/appdata/*.xml +%doc NEWS README +%license COPYING + +%files javadoc +%{_datadir}/javadoc/%{name} +%license COPYING + +%files devel +%{_datadir}/%{name}/*.zip +%license COPYING + +%changelog +* Mon Nov 30 2020 - Jiri Vanek -1.8.4-4 +- added patch2, fed2f5b-22402bb.patch containing important fixes from future 1.8.5 +- Resolves: rhbz#1900043 + +* Fri Nov 27 2020 - Jiri Vanek -1.8.4-2 +- added native launchers, via separate subpackage, but efectively changed main package to arched one +- removed policyeditor man page, it was link to itself +- Resolves: rhbz#1900043 + +* Fri Nov 27 2020 - Jiri Vanek -1.8.4-1 +- rebased to itw 1.8, ommiting native launchers +- Resolves: rhbz#1900043 + +* Fri Nov 20 2020 Jiri Vanek 1.7.1-18 +- patched to use alt-java if available +- Added Patch6, altjava.patch +- Resolves: rhbz#1888633 + +* Thu Jul 18 2019 Jiri Vanek 1.7.1-16 +- Added Patch5, testTuning.patch to make tests pass inclean envirnment +- Resolves: rhbz#1724958 + +* Thu Jul 18 2019 Jiri Vanek 1.7.1-16 +- added patch1, patch4 and patch11 to fix CVE-2019-10182 +- added patch2 to fix CVE-2019-10181 +- added patch3 and patch33 to fix CVE-2019-10185 +- Resolves: rhbz#1724958 +- Resolves: rhbz#1725928 +- Resolves: rhbz#1724989 + +* Fri Mar 22 2019 - Jiri Vanek -1.7.1-10 +- added gating + +* Mon Jul 16 2018 - Jiri Vanek -1.7.1-8 +- removed rhino + +* Thu May 24 2018 - Jiri Vanek -1.7.1-6 +- removed clang + +* Mon May 14 2018 - Jiri Vanek -1.7.1-6 +- added an applied patch1, oracleForms.patch to make oracle forms working + +* Fri Mar 02 2018 - Jiri Vanek -1.7.1-5 +- added 1473-1480.patch +- added support for javafx-desc and so allwong run of pure-javafx only applications +- --nosecurity enhanced for possibility to skip invalid signatures +- enhanced to allow resources to be read also from j2se/java element (OmegaT) + +* Tue Feb 20 2018 - Jiri Vanek -1.7.1-3 +- added buildrequires on gcc/gcc-c++ +- to follow new packaging guidelines which no longer automatically pulls gcc/c++ to build root + +* Wed Feb 07 2018 Fedora Release Engineering - 1.7.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Dec 18 2017 Jiri Vanek 1.7.1-1 +* bump to 1.7.1 + +* Fri Nov 03 2017 Jiri Vanek 1.7-6 +- javaws specific manpage renmed from -suffix to .suffix + +* Wed Oct 18 2017 Jiri Vanek 1.7-5 +- gathered various patches from usptream + +* Wed Aug 23 2017 Jiri Vanek 1.7-4 +- removed natie plugin, no longer can build (removed xullruner and gecko devel packages) +- added forgotten slaves of itweb-settings policyeditor +- Own %%{_datadir}/%%{name} dir +- Mark non-English man pages with %%lang +- Install COPYING as %%license +- last three by Ville Skytta via 1481270 +- added BuildRequires: javapackages-local to introduce deprecated add_maven_depmap macro + +* Wed Aug 02 2017 Fedora Release Engineering - 1.7-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 19 2017 Jiri Vanek 1.7-1 +- updated to itw 1.7 + +* Wed Jul 19 2017 Jiri Vanek 1.7-0.5 +- updated to RC7 + +* Mon May 15 2017 Fedora Release Engineering - 1.7-0.4.pre06 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Fri May 12 2017 Jiri Vanek 1.7-0.3.pre06 +- updated to RC6 +- split bash-copletion +- added sources (to align with upstream binary release) + +* Tue May 02 2017 Jiri Vanek 1.7-0.3.pre05 +- gconf calls silenced by "&> /dev/null || :" +- see rhbz1446932 + +* Fri Apr 28 2017 Jiri Vanek 1.7-0.2.pre05 +- updated to rc5 +- added support for jnlp://, jnlps:// and jnlp: protocols + +* Fri Feb 10 2017 Fedora Release Engineering - 1.7-0.2.pre04 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Jiri Vanek 1.7-0.1.pre04 +- updated to rc4 +- fixed RHBZ#1412544 + +* Wed Jan 11 2017 Jiri Vanek 1.7-0.1.pre03 +- updated ro RC3 of 1.7 + +* Wed Jan 04 2017 Jiri Vanek 1.7-0.1.pre01 +- updated ro RC1 of 1.7 +- added recommends on vash completion + +* Wed Jul 13 2016 Jiri Vanek 1.6.2-3 +- minor fix to javadir and jre dir + +* Wed Jul 13 2016 Jiri Vanek 1.6.2-2 +- added --family to make it part of javas alternatives alignment +- java-javaver-openjdk collected into preffered_java + +* Wed Feb 03 2016 Jiri Vanek 1.6.2-1 +- updated to 1.6.2 +- fixed also rhbz#1303437 - package owns /etc/bash_completion.d but it should not own it + +* Thu Jan 28 2016 Jiri Vanek 1.6.1-66 +- moved to 1.6.2pre + +* Tue Dec 22 2015 Jiri Vanek 1.6.1-5 +- generated maven metadata + +* Thu Nov 19 2015 Jiri Vanek 1.6.1-4 +- installed also javaws metadata + +* Wed Oct 14 2015 Jiri Vanek 1.6.1-3 +- added and applied three patches scheduled for 1.6.2 +- patch2 fileLogInitializationError-1.6.patch to prevent consequences 1268909 +- patch1 donLogToFileBeforeFileLogsInitiate.patch +- patch0 javadocFixes.patch + +* Mon Sep 21 2015 Jiri Vanek 1.6.1-2 +- added and applied patch0 javadocFixes.patch + +* Fri Sep 11 2015 Jiri Vanek 1.6.1-1 +- updated to upstream release 1.6.1 +- metadata xml files enhanced for javaws + +* Mon Jun 22 2015 Omair Majid - 1.6-5 +- Comply with newer java packaging guidelines +- Require javapackages-tools in main package +- Don't require jpackage-utils in -javadoc subpackage, since subpackage + requires the main package + +* Wed Jun 17 2015 Fedora Release Engineering - 1.6-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon May 04 2015 Jiri Vanek 1.6-3 +- added depndence on hamcrest - no longer part of junit + +* Wed Apr 29 2015 Jiri Vanek 1.6-2 +- enabled check + +* Tue Apr 28 2015 Jiri Vanek 1.6-1 +- updated to limited audience final release + +* Fri Apr 24 2015 Jiri Vanek 1.6-0.1.pre05 +- updated to pre06 +- handled "Add Tab Completion for icedtea-web" change +- this release contains numers, not yet upstreamed, but going to release features: +- summary: Fixed resource test to pass for CZ localization +- summary: Added Czech translation for 1.6. +- summary: Messages from TextsProvider moved to properties +- summary: various improvements to default set of properties +- summary: Added MultipleDeploymentPropertiesModifier improvement to testsuite + +* Fri Apr 17 2015 Jiri Vanek 1.6-0.1.pre05 +- updated to pre05 + +* Tue Apr 14 2015 Jiri Vanek 1.6-0.1.pre04 +- updated to pre04 + +* Mon Mar 16 2015 Jiri Vanek 1.6-0.1.pre03 +- updated to pre03 +- removed cp javaws.png. Handled by upstream now + +* Mon Dec 22 2014 Jiri Vanek 1.6-0.1.pre02 +- updated to pre02 +- upstreamed patch1, quoteDocsPaths.patch +- temprarily disabled unittests +- fixed nlp apps shortcut + +* Mon Dec 22 2014 Jiri Vanek 1.6-0.1.pre01 +- update future 1.6 alpha pre01 +- added localised man pages +- removed link to icedtea-web man page (now provided by upstream) + +* Thu Nov 27 2014 Jiri Vanek 1.5.2-0 +- update to upstream 1.5.2 + +* Sat Aug 16 2014 Fedora Release Engineering - 1.5.1-1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Jiri Vanek 1.5.1-0 +- update to upstream 1.5.1 +- removed all patches (all upstreamed) + +* Thu Aug 14 2014 Richard Hughes - 1.5-4 +- Add MetaInfo file to show an addon in GNOME Software. +- See http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1907 for upstream. + +* Mon Jun 09 2014 Omair Majid - 1.5-3 +- Require junit instead of juni4 +- Build against OpenJDK 7 explicitly + +* Sat Jun 07 2014 Fedora Release Engineering - 1.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 07 2014 Jiri Vanek 1.5-2 +- add not yet upstreamed DE localisation of 1.5 + - patch0 DElocalizationforIcedTea-Web1.5-0001.patch +- autoreconf gog -vfi, see RH1077898 +- ./configure changed to %%configure,see RH1077287 + +* Mon Apr 07 2014 Jiri Vanek 1.5-1 +- updated to icedtea-web-1.5 + +* Mon Mar 10 2014 Jiri Vanek 1.5-0.8.pre05 +- updated to pre05 + - based on revision 925 + +* Mon Mar 10 2014 Jiri Vanek 1.5-0.4.pre04 +- updated to pre04 + - based on revision 917 + +* Wed Mar 05 2014 Jiri Vanek 1.5-0.3.pre03 +- updated to pre03 + - based on revision 910:0a36108ce4b9 + +* Wed Feb 26 2014 Jiri Vanek 1.5-0.2.pre02 +- added supported tagsoup dependence + +* Wed Feb 26 2014 Jiri Vanek 1.5-0.1.pre02 +- updated to bleeding edge as tracker before 1.5 actual release + - based on revision 899 +- added policyeditor.desktop +- removed -std=c++11 flag + +* Wed Feb 12 2014 Jiri Vanek 1.5-0.1.pre01 +- updated to bleeding edge as tracker before 1.5 actual release +- named by https://fedoraproject.org/wiki/Packaging:NamingGuidelines#Pre-Release_packages + - see commented original source0 line and setup line reusing versions +- the source tarball is based on revision 892 + +* Tue Feb 04 2014 Jiri Vanek 1.4.2-0 +- updated to 1.4.2 +- removed upstreamed patches +- added std=c++11 flag to CXXFLAGS (thanx omajid!) +- removed autoreconf + +* Tue Dec 17 2013 Jiri Vanek 1.4.1-1 +- added and applied patch0, christmasSplash3.diff. Will be upstreamed +- Christmas release for Fedora !-) + +* Tue Sep 17 2013 Jiri Vanek 1.4.1-0 +- updated to 1.4.1 +- add icedtea-web man page +- removed upstreamed patch1 b25-appContextFix.patch +- removed upstreamed patch2 rhino-pac-permissions.patch +- make check enabled again +- should be build for non-standart archs !-) +- removed unused multilib arches (yupii!) + +* Sat Aug 03 2013 Fedora Release Engineering - 1.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 23 2013 Omair Majid 1.4.0-3 +- Added upstream fix for RH982558 + +* Wed Jun 19 2013 Jiri Vanek 1.4.0-2 +- added patch1 b25-appContextFix.patch to make it run with future openjdk + +* Fri Jun 07 2013 Jiri Vanek 1.4-1 +- Adapted to latest openjdk changes +- added build requires for autoconf and automake +- minor clean up +- Updated to 1.4 +- See announcement for detail + - http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2013-May/023195.html +- commented out check - some junit4 incompatibility + +* Wed Apr 17 2013 Jiri Vanek 1.3.2-0 +- Updated to latest ustream release of 1.3 branch - 1.3.2 + - Security Updates + - CVE-2013-1927, RH884705: fixed gifar vulnerability + - CVE-2013-1926, RH916774: Class-loader incorrectly shared for applets with same relative-path. + - Common + - Added new option in itw-settings which allows users to set JVM arguments when plugin is initialized. + - NetX + - PR580: http://www.horaoficial.cl/ loads improperly + - Plugin + PR1260: IcedTea-Web should not rely on GTK + PR1157: Applets can hang browser after fatal exception +- Removed upstreamed patch to remove GTK dependency + - icedtea-web-pr1260-remove-gtk-dep.patch + +* Wed Feb 20 2013 Ville Skyttä - 1.3.1-5 +- Resolves: rhbz#875496 +- Build with $RPM_LD_FLAGS and %%{_smp_mflags}. +- Run unit tests during build. + +* Thu Feb 14 2013 Fedora Release Engineering - 1.3.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Jan 16 2013 Deepak Bhole 1.3.1-3 +- Resolves: rhbz#889644, rhbz#895197 +- Added patch to remove GTK dependency + +* Thu Dec 20 2012 Jiri Vanek 1.3.1-2 +- Moved to be build with GTK3 + +* Wed Nov 07 2012 Deepak Bhole 1.3.1-1 +- Resolves: RH869040/CVE-2012-4540 + +* Mon Sep 17 2012 Deepak Bhole 1.3-1 +- Updated to 1.3 +- Resolves: rhbz#720836: Epiphany fails to execute Java applets + +* Tue Jul 31 2012 Deepak Bhole 1.2.1-1 +- Updated to 1.2.1 +- Resolves: RH840592/CVE-2012-3422 +- Resolves: RH841345/CVE-2012-3423 + +* Thu Jul 19 2012 Fedora Release Engineering - 1.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu May 03 2012 Deepak Bhole 1.2-4 +- Resolves rhbz#814585 +- Fixed java-plugin provides and added one for javaws + +* Tue Apr 17 2012 Deepak Bhole 1.2-3 +- Updated summary +- Fixed virtual provide + +* Tue Mar 13 2012 Peter Robinson - 1.2-2 +- Enable building on ARM platforms + +* Mon Mar 05 2012 Deepak Bhole 1.2-1 +- Updated to 1.2 + +* Fri Jan 13 2012 Fedora Release Engineering - 1.1.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Nov 25 2011 Deepak Bhole 1.1.4-3 +- Resolves rhbz#757191 +- Bumped min_openjdk_version to -60 (latest) + +* Thu Nov 24 2011 Deepak Bhole 1.1.4-2 +- Resolves: rhbz#742887. Do not own directories not created by the package. + +* Tue Nov 08 2011 Deepak Bhole 1.1.4-1 +- Updated to 1.1.4 +- Added npapi-fix patch so that the plug-in compiles with xulrunner 8 + +* Thu Sep 01 2011 Deepak Bhole 1.1.2-1 +- Updated to 1.1.2 +- Removed all patches (now upstream) +- Resolves: rhbz# 734890 + +* Tue Aug 23 2011 Deepak Bhole 1.1.1-3 +- Added patch to allow install to jre dir +- Fixed requirement for java-1.7.0-openjdk + +* Tue Aug 09 2011 Deepak Bhole 1.1.1-2 +- Fixed file ownership so that debuginfo is not in main package + +* Wed Aug 03 2011 Deepak Bhole 1.1.1-1 +- Bump to 1.1.1 +- Added patch for PR768 and PR769 + +* Wed Jul 20 2011 Deepak Bhole 1.0.4-1 +- Bump to 1.0.4 +- Fixed rhbz#718164: Home directory path disclosure to untrusted applications +- Fixed rhbz#718170: Java Web Start security warning dialog manipulation + +* Mon Jun 13 2011 Deepak Bhole 1.0.3-1 +- Update to 1.0.3 +- Resolves: rhbz#691259 + +* Mon Apr 04 2011 Deepak Bhole 1.0.2-2 +- Fixed incorrect macro value for min_openjdk_version +- Use posttrans instead of post, so that upgrade from old plugin works + +* Mon Apr 04 2011 Deepak Bhole 1.0.2-1 +- Initial build diff --git a/patchOutDunce.patch b/patchOutDunce.patch new file mode 100644 index 0000000..a35c3f6 --- /dev/null +++ b/patchOutDunce.patch @@ -0,0 +1,11 @@ +--- a/rust-launcher/cc.toml ++++ b/rust-launcher/Cargo.toml +@@ -2,7 +2,3 @@ + name = "launcher" + version = "1.8.0" + authors = ["https://icedtea.classpath.org/wiki/IcedTea-Web"] +- +-[dependencies] +-[target.'cfg(windows)'.dependencies] +-dunce = "0.1.1" + diff --git a/sources b/sources new file mode 100644 index 0000000..37eca95 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (icedtea-web-1.8.4.tar.gz) = d155ec6ed9a007b2c59fd09fed9f4005a79640016ae62287eab7076c05b5ddd56d07b0ff86babf732f1bb82653fc0f7cf434550eabdaac8d666e64feabe4f890