Mercurial > hg > release > icedtea-web-1.4
changeset 670:e6055625cbbf
Added dialogue to allow setting of custom JRE
author | Jiri Vanek <jvanek@redhat.com> |
---|---|
date | Fri, 12 Apr 2013 13:31:49 +0200 |
parents | 50863f01bf84 |
children | a94822453711 |
files | ChangeLog NEWS launcher/itweb-settings.in launcher/javaws.in netx/net/sourceforge/jnlp/config/Defaults.java netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java netx/net/sourceforge/jnlp/resources/Messages.properties netx/net/sourceforge/jnlp/util/FileUtils.java netx/net/sourceforge/jnlp/util/StreamUtils.java |
diffstat | 11 files changed, 400 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Apr 11 15:37:32 2013 -0400 +++ b/ChangeLog Fri Apr 12 13:31:49 2013 +0200 @@ -1,3 +1,23 @@ +2013-04-12 Jiri Vanek <jvanek@redhat.com> + + Added dialogue to allow setting of custom JRE + * launcher/itweb-settings.in: and + * launcher/javaws.in: check for custom jre less strict + * netx/net/sourceforge/jnlp/config/Defaults.java:made aware of + deployment.jre.dir constant + * netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java: added\ + KEY_JRE_DIR= "deployment.jre.dir" constant, user file occurrences extracted + to USER_DEPLOYMENT_PROPERTIES_FILE. + * netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java: used validation + of jdk when saving properties + * netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java: added text-field + to set JVM directory, friendly with logic and validation. + * netx/net/sourceforge/jnlp/resources/Messages.properties: added messages + to JVM selection and validation. + * netx/net/sourceforge/jnlp/util/StreamUtils.java: (readStreamAsString) + new utility method. + * NEWS: mentioned select-able JVM + 2013-04-11 Adam Domurad <adomurad@redhat.com> Remove legacy support for the old version of NPAPI.
--- a/NEWS Thu Apr 11 15:37:32 2013 -0400 +++ b/NEWS Fri Apr 12 13:31:49 2013 +0200 @@ -9,11 +9,13 @@ CVE-XXXX-YYYY: http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY New in release 1.4 (2012-XX-XX): -* Added cs_CZ localisation -* Added de localisation +* Added cs_CZ localization +* Added de localization * Splash screen for javaws and plugin +* Better error reporting for plugin via Error-splash-screen * All IcedTea-Web dialogues are centered to middle of active screen * Download indicator made compact for more then one jar +* User can select its own JVM via itw-settings and deploy.properties. * Security updates - CVE-2012-3422, RH840592: Potential read from an uninitialized memory location - CVE-2012-3423, RH841345: Incorrect handling of not 0-terminated strings
--- a/launcher/itweb-settings.in Thu Apr 11 15:37:32 2013 -0400 +++ b/launcher/itweb-settings.in Fri Apr 12 13:31:49 2013 +0200 @@ -14,7 +14,7 @@ CUSTOM_JRE=`grep "$CUSTOM_JRE_REGEX" /etc/.java/.deploy/deployment.properties 2>/dev/null | sed "s/$CUSTOM_JRE_REGEX//g"` fi; if [ "x$CUSTOM_JRE" != "x" ] ; then - if [ -d "$CUSTOM_JRE" -a -f "$CUSTOM_JRE/bin/java" ] ; then + if [ -e "$CUSTOM_JRE" -a -e "$CUSTOM_JRE/bin/java" ] ; then JAVA=$CUSTOM_JRE/bin/java else echo "Your custom JRE $CUSTOM_JRE read from deployment.properties under key $PROPERTY_NAME as $CUSTOM_JRE is not valid. Using default ($JAVA) in attempt to start. Please fix this."
--- a/launcher/javaws.in Thu Apr 11 15:37:32 2013 -0400 +++ b/launcher/javaws.in Fri Apr 12 13:31:49 2013 +0200 @@ -16,7 +16,7 @@ CUSTOM_JRE=`grep "$CUSTOM_JRE_REGEX" /etc/.java/.deploy/deployment.properties 2>/dev/null | sed "s/$CUSTOM_JRE_REGEX//g"` fi; if [ "x$CUSTOM_JRE" != "x" ] ; then - if [ -d "$CUSTOM_JRE" -a -f "$CUSTOM_JRE/bin/java" -a -f "$CUSTOM_JRE/lib/rt.jar" ] ; then + if [ -e "$CUSTOM_JRE" -a -e "$CUSTOM_JRE/bin/java" -a -e "$CUSTOM_JRE/lib/rt.jar" ] ; then JAVA=$CUSTOM_JRE/bin/java CP=$CUSTOM_JRE/lib/rt.jar else
--- a/netx/net/sourceforge/jnlp/config/Defaults.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/config/Defaults.java Fri Apr 12 13:31:49 2013 +0200 @@ -391,6 +391,12 @@ DeploymentConfiguration.KEY_SECURITY_LEVEL, new SecurityValueValidator(), null + }, + //JVM executable for itw + { + DeploymentConfiguration.KEY_JRE_DIR, + null, + null } };
--- a/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/config/DeploymentConfiguration.java Fri Apr 12 13:31:49 2013 +0200 @@ -166,6 +166,7 @@ * JVM arguments for plugin */ public static final String KEY_PLUGIN_JVM_ARGUMENTS= "deployment.plugin.jvm.arguments"; + public static final String KEY_JRE_DIR= "deployment.jre.dir"; public enum ConfigType { System, User @@ -178,6 +179,10 @@ private File systemPropertiesFile = null; /** The user's deployment.config file */ private File userPropertiesFile = null; + + /*default user file*/ + public static final File USER_DEPLOYMENT_PROPERTIES_FILE = new File(System.getProperty("user.home") + File.separator + DEPLOYMENT_DIR + + File.separator + DEPLOYMENT_PROPERTIES); /** the current deployment properties */ private Map<String, Setting<String>> currentConfiguration; @@ -221,8 +226,7 @@ */ public void load(boolean fixIssues) throws ConfigurationException { // make sure no state leaks if security check fails later on - File userFile = new File(System.getProperty("user.home") + File.separator + DEPLOYMENT_DIR - + File.separator + DEPLOYMENT_PROPERTIES); + File userFile = new File(USER_DEPLOYMENT_PROPERTIES_FILE.getAbsolutePath()); SecurityManager sm = System.getSecurityManager(); if (sm != null) { @@ -415,8 +419,25 @@ return etcFile; } - File jreFile = new File(System.getProperty("java.home") + File.separator + "lib" - + File.separator + DEPLOYMENT_CONFIG); + String jrePath = null; + try { + Map<String, Setting<String>> tmpProperties = parsePropertiesFile(USER_DEPLOYMENT_PROPERTIES_FILE); + Setting<String> jreSetting = tmpProperties.get(KEY_JRE_DIR); + if (jreSetting != null) { + jrePath = jreSetting.getValue(); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + File jreFile; + if (jrePath != null) { + jreFile = new File(jrePath + File.separator + "lib" + + File.separator + DEPLOYMENT_CONFIG); + } else { + jreFile = new File(System.getProperty("java.home") + File.separator + "lib" + + File.separator + DEPLOYMENT_CONFIG); + } if (jreFile.isFile()) { return jreFile; }
--- a/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/controlpanel/ControlPanel.java Fri Apr 12 13:31:49 2013 +0200 @@ -53,6 +53,7 @@ import javax.swing.event.ListSelectionListener; import net.sourceforge.jnlp.config.DeploymentConfiguration; +import net.sourceforge.jnlp.controlpanel.JVMPanel.JvmValidationResult; import net.sourceforge.jnlp.runtime.Translator; import net.sourceforge.jnlp.security.KeyStores; import net.sourceforge.jnlp.security.viewer.CertificatePane; @@ -66,6 +67,7 @@ * */ public class ControlPanel extends JFrame { + private JVMPanel jvmPanel; /** * Class for keeping track of the panels and their associated text. @@ -157,6 +159,21 @@ topPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); return topPanel; } + + private int validateJdk() { + String s = ControlPanel.this.config.getProperty(DeploymentConfiguration.KEY_JRE_DIR); + JvmValidationResult validationResult = JVMPanel.validateJvm(s); + if (validationResult.id == JvmValidationResult.STATE.NOT_DIR + || validationResult.id == JvmValidationResult.STATE.NOT_VALID_DIR + || validationResult.id == JvmValidationResult.STATE.NOT_VALID_JDK) { + return JOptionPane.showConfirmDialog(ControlPanel.this, + "<html>"+Translator.R("CPJVMNotokMessage1", s)+"<br>" + + validationResult.formattedText+"<br>" + + Translator.R("CPJVMNotokMessage2", DeploymentConfiguration.KEY_JRE_DIR, DeploymentConfiguration.USER_DEPLOYMENT_PROPERTIES_FILE)+"</html>", + Translator.R("CPJVMconfirmInvalidJdkTitle"),JOptionPane.OK_CANCEL_OPTION); + } + return JOptionPane.OK_OPTION; + } /** * Creates the "ok" "apply" and "cancel" buttons. @@ -173,6 +190,10 @@ @Override public void actionPerformed(ActionEvent e) { ControlPanel.this.saveConfiguration(); + int validationResult = validateJdk(); + if (validationResult!= JOptionPane.OK_OPTION){ + return; + } ControlPanel.this.dispose(); } }); @@ -183,6 +204,15 @@ @Override public void actionPerformed(ActionEvent e) { ControlPanel.this.saveConfiguration(); + int validationResult = validateJdk(); + if (validationResult != JOptionPane.OK_OPTION) { + int i = JOptionPane.showConfirmDialog(ControlPanel.this, + Translator.R("CPJVMconfirmReset"), + Translator.R("CPJVMconfirmReset"), JOptionPane.OK_CANCEL_OPTION); + if (i == JOptionPane.OK_OPTION) { + jvmPanel.resetTestFieldArgumentsExec(); + } + } } }); buttons.add(applyButton); @@ -219,7 +249,7 @@ * @return A panel with all the components in place. */ private JPanel createMainSettingsPanel() { - + jvmPanel = (JVMPanel) createJVMSettingsPanel(); SettingsPanel[] panels = new SettingsPanel[] { new SettingsPanel(Translator.R("CPTabAbout"), createAboutPanel()), new SettingsPanel(Translator.R("CPTabCache"), createCacheSettingsPanel()), new SettingsPanel(Translator.R("CPTabCertificate"), createCertificatesSettingsPanel()), @@ -227,7 +257,7 @@ // new SettingsPanel(Translator.R("CPTabClassLoader"), createClassLoaderSettingsPanel()), new SettingsPanel(Translator.R("CPTabDebugging"), createDebugSettingsPanel()), new SettingsPanel(Translator.R("CPTabDesktopIntegration"), createDesktopSettingsPanel()), - new SettingsPanel(Translator.R("CPTabJVMSettings"), createJVMSettingsPanel()), + new SettingsPanel(Translator.R("CPTabJVMSettings"),jvmPanel), new SettingsPanel(Translator.R("CPTabNetwork"), createNetworkSettingsPanel()), // TODO: This is commented out since this is not implemented yet // new SettingsPanel(Translator.R("CPTabRuntimes"), createRuntimesSettingsPanel()),
--- a/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/controlpanel/JVMPanel.java Fri Apr 12 13:31:49 2013 +0200 @@ -40,17 +40,43 @@ import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; - +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; import javax.swing.Box; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JTextField; - +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.Document; import net.sourceforge.jnlp.config.DeploymentConfiguration; import net.sourceforge.jnlp.runtime.Translator; +import net.sourceforge.jnlp.util.StreamUtils; @SuppressWarnings("serial") public class JVMPanel extends NamedBorderPanel { + + public static class JvmValidationResult { + + public static enum STATE { + + EMPTY, NOT_DIR, NOT_VALID_DIR, NOT_VALID_JDK, VALID_JDK; + } + public final String formattedText; + public final STATE id; + + public JvmValidationResult(String formattedText, STATE id) { + this.id = id; + this.formattedText = formattedText; + } + } private DeploymentConfiguration config; + private File lastPath = new File("/usr/lib/jvm/java/jre/"); + JTextField testFieldArgumentsExec; JVMPanel(DeploymentConfiguration config) { super(Translator.R("CPHeadJVMSettings"), new GridBagLayout()); @@ -58,23 +84,125 @@ addComponents(); } + + void resetTestFieldArgumentsExec(){ + testFieldArgumentsExec.setText(""); + } private void addComponents() { - JLabel description = new JLabel("<html>" + Translator.R("CPJVMPluginArguments") + "<hr /></html>"); - JTextField testFieldArguments = new JTextField(25); + final JLabel description = new JLabel("<html>" + Translator.R("CPJVMPluginArguments") + "<hr /></html>"); + final JTextField testFieldArguments = new JTextField(25); testFieldArguments.getDocument().addDocumentListener(new DocumentAdapter(config, DeploymentConfiguration.KEY_PLUGIN_JVM_ARGUMENTS)); testFieldArguments.setText(config.getProperty(DeploymentConfiguration.KEY_PLUGIN_JVM_ARGUMENTS)); + + final JLabel descriptionExec = new JLabel("<html>" + Translator.R("CPJVMitwExec") + "<hr /></html>"); + testFieldArgumentsExec = new JTextField(100); + final JLabel validationResult = new JLabel(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + final JCheckBox allowTypoTimeValidation = new JCheckBox(Translator.R("CPJVMPluginAllowTTValidation"), true); + allowTypoTimeValidation.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + } + }); + testFieldArgumentsExec.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + + @Override + public void removeUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + + @Override + public void changedUpdate(DocumentEvent e) { + if (allowTypoTimeValidation.isSelected()) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + } + } + }); + + testFieldArgumentsExec.getDocument().addDocumentListener(new DocumentAdapter(config, DeploymentConfiguration.KEY_JRE_DIR)); + testFieldArgumentsExec.setText(config.getProperty(DeploymentConfiguration.KEY_JRE_DIR)); + + final JButton selectJvm = new JButton(Translator.R("CPJVMPluginSelectExec")); + selectJvm.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfch; + if (lastPath != null && lastPath.exists()) { + jfch = new JFileChooser(lastPath); + } else { + jfch = new JFileChooser(); + } + jfch.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int i = jfch.showOpenDialog(JVMPanel.this); + if (i == JFileChooser.APPROVE_OPTION && jfch.getSelectedFile() != null) { + lastPath = jfch.getSelectedFile().getParentFile(); + String nws = jfch.getSelectedFile().getAbsolutePath(); + String olds = testFieldArgumentsExec.getText(); + if (!nws.equals(olds)) { + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), "", "CPJVMnone")); + } + testFieldArgumentsExec.setText(nws); + } + + } + }); + final JButton validateJvm = new JButton(Translator.R("CPJVMitwExecValidation")); + validateJvm.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JvmValidationResult s = validateJvm(testFieldArgumentsExec.getText()); + validationResult.setText(resetValidationResult(testFieldArgumentsExec.getText(), s.formattedText, "CPJVMvalidated")); + + } + }); + // Filler to pack the bottom of the panel. GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1; + c.gridwidth = 4; c.gridx = 0; c.gridy = 0; + c.insets = new Insets(2, 2, 4, 4); this.add(description, c); c.gridy++; this.add(testFieldArguments, c); + c.gridy++; + this.add(descriptionExec, c); + c.gridy++; + this.add(testFieldArgumentsExec, c); + c.gridy++; + GridBagConstraints cb1 = (GridBagConstraints) c.clone(); + cb1.fill = GridBagConstraints.NONE; + cb1.gridwidth = 1; + this.add(selectJvm, cb1); + GridBagConstraints cb3 = (GridBagConstraints) c.clone(); + cb3.fill = GridBagConstraints.NONE; + cb3.gridx = 2; + cb3.gridwidth = 1; + this.add(allowTypoTimeValidation, cb3); + GridBagConstraints cb2 = (GridBagConstraints) c.clone(); + cb2.fill = GridBagConstraints.NONE; + cb2.gridx = 3; + cb2.gridwidth = 1; + this.add(validateJvm, cb2); + c.gridy++; + this.add(validationResult, c); // This is to keep it from expanding vertically if resized. Component filler = Box.createRigidArea(new Dimension(1, 1)); @@ -82,4 +210,104 @@ c.weighty++; this.add(filler, c); } + + public static JvmValidationResult validateJvm(String cmd) { + if (cmd == null || cmd.trim().equals("")) { + return new JvmValidationResult("<span color=\"orange\">" + Translator.R("CPJVMvalueNotSet") + "</span>", + JvmValidationResult.STATE.EMPTY); + } + String validationResult = ""; + File jreDirFile = new File(cmd); + JvmValidationResult.STATE latestOne = JvmValidationResult.STATE.EMPTY; + if (jreDirFile.isDirectory()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMisDir") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnotDir") + "</span><br />"; + latestOne = JvmValidationResult.STATE.NOT_DIR; + } + File javaFile = new File(cmd + File.separator + "bin" + File.separator + "java"); + if (javaFile.isFile()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMjava") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoJava") + "</span><br />"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + } + File rtFile = new File(cmd + File.separator + "lib" + File.separator + "rt.jar"); + if (rtFile.isFile()) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMrtJar") + "</span><br />"; + } else { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoRtJar") + "</span><br />"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + } + ProcessBuilder sb = new ProcessBuilder(javaFile.getAbsolutePath(), "-version"); + Process p = null; + String processErrorStream = ""; + String processStdOutStream = ""; + Integer r = null; + try { + p = sb.start(); + p.waitFor(); + processErrorStream = StreamUtils.readStreamAsString(p.getErrorStream()); + processStdOutStream = StreamUtils.readStreamAsString(p.getInputStream()); + r = p.exitValue(); + System.err.println(processErrorStream); + System.out.println(processStdOutStream); + processErrorStream = processErrorStream.toLowerCase(); + processStdOutStream = processStdOutStream.toLowerCase(); + } catch (Exception ex) {; + ex.printStackTrace(); + + } + if (r == null) { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnotLaunched") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (r.intValue() != 0) { + validationResult += "<span color=\"red\">" + Translator.R("CPJVMnoSuccess") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("openjdk") || processStdOutStream.contains("openjdk")) { + validationResult += "<span color=\"#00EE00\">" + Translator.R("CPJVMopenJdkFound") + "</span>"; + return new JvmValidationResult(validationResult, JvmValidationResult.STATE.VALID_JDK); + } + if (processErrorStream.contains("ibm") || processStdOutStream.contains("ibm")) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMibmFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("gij") || processStdOutStream.contains("gij")) { + validationResult += "<span color=\"orange\">" + Translator.R("CPJVMgijFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + if (processErrorStream.contains("oracle") || processStdOutStream.contains("oracle") + || processErrorStream.contains("java(tm)") || processStdOutStream.contains("java(tm)")) { + validationResult += "<span color=\"green\">" + Translator.R("CPJVMoracleFound") + "</span>"; + if (latestOne != JvmValidationResult.STATE.NOT_DIR) { + latestOne = JvmValidationResult.STATE.NOT_VALID_JDK; + } + return new JvmValidationResult(validationResult, latestOne); + } + validationResult += "<span color=\"orange\">" + Translator.R("CPJVMstrangeProcess") + "</span>"; + return new JvmValidationResult(validationResult, JvmValidationResult.STATE.NOT_VALID_JDK); + + } + + private String resetValidationResult(final String value, String result, String headerKey) { + return "<html>" + Translator.R(headerKey) + ": <br />" + value + " <br />" + result + "<hr /></html>"; + } }
--- a/netx/net/sourceforge/jnlp/resources/Messages.properties Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/resources/Messages.properties Fri Apr 12 13:31:49 2013 +0200 @@ -312,6 +312,30 @@ CPDebuggingDescription=Enable options here to help with debugging CPDesktopIntegrationDescription=Set whether or not to allow creation of desktop shortcut. CPJVMPluginArguments=Set JVM arguments for plugin. +CPJVMitwExec=Set JVM for icedtea-web - working best with OpenJDK +CPJVMitwExecValidation=Validate JVM for icedtea-web +CPJVMPluginSelectExec=Select JVM for icedtea-web +CPJVMnone=No validation result for +CPJVMvalidated=Validation result for +CPJVMvalueNotSet=Value is not set. Hardcoded JVM will be used. +CPJVMnotLaunched=Error, process was not launched, see console output for more info. +CPJVMnoSuccess=Error, process have not ended successfully, see output for details, but your java is not set correctly. +CPJVMopenJdkFound=Excellent, OpenJDK detected +CPJVMoracleFound=Great, Oracle java detected +CPJVMibmFound=Good, IBM java detected +CPJVMgijFound=Warning, gij detected +CPJVMstrangeProcess=Your path had an executable process, but it was not recognized. Verify the Java version in the console output. +CPJVMnotDir=Error, The path you chose is not a directory. +CPJVMisDir=Ok, the path you chose is a directory. +CPJVMnoJava=Error, the directory you chose does not contain bin/java. +CPJVMjava=Ok, the directory you chose contains bin/java. +CPJVMnoRtJar=Error, the directory you chose does not contain lib/rt.jar +CPJVMrtJar=Ok, the directory you chose contains lib/rt.jar. +CPJVMPluginAllowTTValidation=Allow type-time validation +CPJVMNotokMessage1=You have entered invalid JDK value <u>({0})</u> with following error message: +CPJVMNotokMessage2=You might be seeing this message because: <blockquote> * Some validation has not been passed<br> * Non-OpenJDK is detected</blockquote>With invalid JDK IcedTea-Web will probably not be able to start.<br>You will have to modify or remove <u>{0}</u> property in your configuration file <u>{1}</u>. <br>You should try to search for OpenJDK in your system or be sure you know what you are doing. +CPJVMconfirmInvalidJdkTitle=Confirm invalid JDK +CPJVMconfirmReset=Reset to default? # Control Panel - Buttons CPButAbout=About...
--- a/netx/net/sourceforge/jnlp/util/FileUtils.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/util/FileUtils.java Fri Apr 12 13:31:49 2013 +0200 @@ -176,6 +176,39 @@ } } + if (JNLPRuntime.isWindows()) { + // remove all permissions + if (!tempFile.setExecutable(false, false)) { + System.err.println(R("RRemoveXPermFailed", tempFile)); + } + if (!tempFile.setReadable(false, false)) { + System.err.println(R("RRemoveRPermFailed", tempFile)); + } + if (!tempFile.setWritable(false, false)) { + System.err.println(R("RRemoveWPermFailed", tempFile)); + } + + // allow owner to read + if (!tempFile.setReadable(true, true)) { + System.err.println(R("RGetRPermFailed", tempFile)); + } + + // allow owner to write + if (writableByOwner && !tempFile.setWritable(true, true)) { + System.err.println(R("RGetWPermFailed", tempFile)); + } + + // allow owner to enter directories + if (isDir && !tempFile.setExecutable(true, true)) { + System.err.println(R("RGetXPermFailed", tempFile)); + } + // rename this file. Unless the file is moved/renamed, any program that + // opened the file right after it was created might still be able to + // read the data. + if (!tempFile.renameTo(file)) { + System.err.println(R("RCantRename", tempFile, file)); + } + } else { // remove all permissions if (!tempFile.setExecutable(false, false)) { throw new IOException(R("RRemoveXPermFailed", tempFile)); @@ -201,13 +234,15 @@ if (isDir && !tempFile.setExecutable(true, true)) { throw new IOException(R("RGetXPermFailed", tempFile)); } - + // rename this file. Unless the file is moved/renamed, any program that // opened the file right after it was created might still be able to // read the data. if (!tempFile.renameTo(file)) { throw new IOException(R("RCantRename", tempFile, file)); } + } + }
--- a/netx/net/sourceforge/jnlp/util/StreamUtils.java Thu Apr 11 15:37:32 2013 -0400 +++ b/netx/net/sourceforge/jnlp/util/StreamUtils.java Fri Apr 12 13:31:49 2013 +0200 @@ -37,9 +37,11 @@ package net.sourceforge.jnlp.util; +import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; public class StreamUtils { @@ -71,4 +73,21 @@ } } } + + + public static String readStreamAsString(InputStream stream) throws IOException { + InputStreamReader is = new InputStreamReader(stream); + StringBuilder sb = new StringBuilder(); + BufferedReader br = new BufferedReader(is); + while (true) { + String read = br.readLine(); + if (read == null) { + break; + } + sb.append(read); + + } + + return sb.toString(); + } }