This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 98371
Collapse All | Expand All

(-)apisupport/harness/release/README (+4 lines)
Lines 833-838 Link Here
833
  If you want to change the default to something else please define the value
833
  If you want to change the default to something else please define the value
834
  of the property.
834
  of the property.
835
835
836
jnlp.sign.jars [since 6.0] - defaults to true. If set to false the jars 
837
  will not be signed, only the main (startup) jar. This should allow for 
838
  faster startup but might compromise JNLP security. Use with extreme care.
839
836
[XXX some of the above should be listed in "Suite Properties"]
840
[XXX some of the above should be listed in "Suite Properties"]
837
841
838
842
(-)apisupport/harness/release/jnlp.xml (-2 / +17 lines)
Lines 42-47 Link Here
42
  </information>
42
  </information>
43
  <security><all-permissions/></security>
43
  <security><all-permissions/></security>
44
  <resources>
44
  <resources>
45
    <!-- Uncomment the following line if you use the jnlp.sign.jars=false: -->
46
    <!--<property name="netbeans.jnlp.fixPolicy" value="true"/> -->
45
<!-- The following line will be replaced with an automatically generated list of resources: -->    
47
<!-- The following line will be replaced with an automatically generated list of resources: -->    
46
<!--$${jnlp.resources}-->
48
<!--$${jnlp.resources}-->
47
  </resources>
49
  </resources>
Lines 105-111 Link Here
105
107
106
    <target name="jnlp-generate-platform" depends="jnlp-generate-platform-repository,jnlp-generate-platform-master"/>
108
    <target name="jnlp-generate-platform" depends="jnlp-generate-platform-repository,jnlp-generate-platform-master"/>
107
    
109
    
108
    <target name="jnlp-generate-platform-repository" depends="jnlp-generate-keystore,jnlp-init" unless="jnlp.platform.codebase">
110
    <target name="jnlp-generate-platform-repository" depends="jnlp-generate-keystore,jnlp-init,set-all-permissions,set-empty-permissions" unless="jnlp.platform.codebase">
109
        <condition property="jnlp.platform.codebase.own" value="${jnlp.codebase}netbeans/" >
111
        <condition property="jnlp.platform.codebase.own" value="${jnlp.codebase}netbeans/" >
110
            <not>
112
            <not>
111
                <equals arg1="${jnlp.codebase}" arg2="$$$$codebase" />
113
                <equals arg1="${jnlp.codebase}" arg2="$$$$codebase" />
Lines 113-119 Link Here
113
        </condition>
115
        </condition>
114
        <property name="jnlp.platform.codebase.own" value="$$$$codebase"/>
116
        <property name="jnlp.platform.codebase.own" value="$$$$codebase"/>
115
        <property name="jnlp.platform.codebase" value="netbeans/"/>
117
        <property name="jnlp.platform.codebase" value="netbeans/"/>
116
        <property name="jnlp.permissions" value="&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;"/>
117
        
118
        
118
        <mkdir dir="${jnlp.dest.dir}/netbeans"/>
119
        <mkdir dir="${jnlp.dest.dir}/netbeans"/>
119
        
120
        
Lines 126-134 Link Here
126
            verify="true"
127
            verify="true"
127
            verifyexcludes="lib/nbexec.cmd,lib/nbexec,lib/nbexec.exe,core/ide.ks,LICENSE.txt,DISTRIBUTION.txt,THIRDPARTYLICENSEREADME.txt,docs/swing-layout-1.0-doc.zip,docs/swing-layout-1.0.1-doc.zip,docs/html40.zip,core/org-netbeans-modules-utilities-cli.jar,docs/org/netbeans/modules/usersguide/ide.css"
128
            verifyexcludes="lib/nbexec.cmd,lib/nbexec,lib/nbexec.exe,core/ide.ks,LICENSE.txt,DISTRIBUTION.txt,THIRDPARTYLICENSEREADME.txt,docs/swing-layout-1.0-doc.zip,docs/swing-layout-1.0.1-doc.zip,docs/html40.zip,core/org-netbeans-modules-utilities-cli.jar,docs/org/netbeans/modules/usersguide/ide.css"
128
            permissions="${jnlp.permissions}"
129
            permissions="${jnlp.permissions}"
130
            signjars="${jnlp.sign.jars}"
129
        >
131
        >
130
            <modules refid="jnlp.included.modules"/>
132
            <modules refid="jnlp.included.modules"/>
131
        </makejnlp>
133
        </makejnlp>
134
    </target>
135
136
    <target name="set-all-permissions" depends="check-signjars" if="unsign-the-jars">
137
        <property name="jnlp.permissions" value="&lt;security/&gt;"/>
138
    </target>
139
    <target name="set-empty-permissions" depends="check-signjars" unless="unsign-the-jars">
140
        <property name="jnlp.permissions" value="&lt;security&gt;&lt;all-permissions/&gt;&lt;/security&gt;"/>
141
    </target>
142
    
143
    <target name="check-signjars">
144
        <condition property="unsign-the-jars">
145
            <isfalse value="jnlp.sign.jars"/>
146
        </condition>
132
    </target>
147
    </target>
133
    
148
    
134
    <target name="jnlp-generate-platform-master" depends="jnlp-generate-platform-repository">
149
    <target name="jnlp-generate-platform-master" depends="jnlp-generate-platform-repository">
(-)nbbuild/antsrc/org/netbeans/nbbuild/MakeJNLP.java (-11 / +39 lines)
Lines 134-139 Link Here
134
        indirectJars = fs;
134
        indirectJars = fs;
135
    }
135
    }
136
    
136
    
137
    private boolean signJars = true;
138
    /**
139
     * Whether the final jars should be signed or not. Deafults to true
140
     * (if not supplied).
141
     */
142
    public void setSignJars(boolean s) {
143
        this.signJars = s;
144
    }
145
    
137
    public void execute() throws BuildException {
146
    public void execute() throws BuildException {
138
        if (target == null) throw new BuildException("Output dir must be provided");
147
        if (target == null) throw new BuildException("Output dir must be provided");
139
        if (files == null) throw new BuildException("modules must be provided");
148
        if (files == null) throw new BuildException("modules must be provided");
Lines 239-248 Link Here
239
                        }
248
                        }
240
                        File t = new File(new File(target, dashcnb), name);
249
                        File t = new File(new File(target, dashcnb), name);
241
                        
250
                        
242
                        getSignTask().setJar(n);
251
                        if (signJars) {
243
                        getSignTask().setSignedjar(t);
252
                            getSignTask().setJar(n);
244
                        getSignTask().execute();
253
                            getSignTask().setSignedjar(t);
245
                        
254
                            getSignTask().execute();
255
                        } else {
256
                            Copy copy = (Copy)getProject().createTask("copy");
257
                            copy.setFile(n);
258
                            copy.setTofile(t);
259
                            copy.execute();
260
                        }
246
                        writeJNLP.write("    <jar href='" + dashcnb + '/' + name + "'/>\n");
261
                        writeJNLP.write("    <jar href='" + dashcnb + '/' + name + "'/>\n");
247
                    }
262
                    }
248
263
Lines 259-268 Link Here
259
            w.write(writeJNLP.toString());
274
            w.write(writeJNLP.toString());
260
            w.close();
275
            w.close();
261
276
262
            getSignTask().setJar(jar);
277
            if (signJars) {
263
            getSignTask().setSignedjar(signed);
278
                getSignTask().setJar(jar);
264
            getSignTask().execute();
279
                getSignTask().setSignedjar(signed);
265
                
280
                getSignTask().execute();
281
            } else {
282
                Copy copy = (Copy)getProject().createTask("copy");
283
                copy.setFile(jar);
284
                copy.setTofile(signed);
285
                copy.execute();
286
            }
266
                
287
                
267
            theJar.close();
288
            theJar.close();
268
        }
289
        }
Lines 446-454 Link Here
446
                
467
                
447
                fileWriter.write("    <jar href='" + dashcnb + '/' + ext.getName() + "'/>\n");
468
                fileWriter.write("    <jar href='" + dashcnb + '/' + ext.getName() + "'/>\n");
448
469
449
                getSignTask().setJar(e);
470
                if (signJars) {
450
                getSignTask().setSignedjar(ext);
471
                    getSignTask().setJar(e);
451
                getSignTask().execute();
472
                    getSignTask().setSignedjar(ext);
473
                    getSignTask().execute();
474
                } else {
475
                    Copy copy = (Copy)getProject().createTask("copy");
476
                    copy.setFile(e);
477
                    copy.setTofile(ext);
478
                    copy.execute();
479
                }
452
            }
480
            }
453
        }
481
        }
454
    }
482
    }
(-)nbbuild/test/unit/src/org/netbeans/nbbuild/MakeJNLPTest.java (+153 lines)
Lines 125-130 Link Here
125
            fail ("File does not seem to be signed: " + jar);
125
            fail ("File does not seem to be signed: " + jar);
126
        }
126
        }
127
    }
127
    }
128
129
    public void testGenerateJNLPAndUnSignedJarForSimpleModule() throws Exception {
130
        Manifest m;
131
        
132
        m = ModuleDependenciesTest.createManifest ();
133
        m.getMainAttributes ().putValue ("OpenIDE-Module", "org.my.module/3");
134
        File simpleJar = generateJar (new String[0], m);
135
136
        File parent = simpleJar.getParentFile ();
137
        File output = new File(parent, "output");
138
        File ks = generateKeystore("jnlp", "netbeans-test");
139
        
140
        java.io.File f = PublicPackagesInProjectizedXMLTest.extractString (
141
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
142
            "<project name=\"Test Arch\" basedir=\".\" default=\"all\" >" +
143
            "  <taskdef name=\"jnlp\" classname=\"org.netbeans.nbbuild.MakeJNLP\" classpath=\"${nb_all}/nbbuild/nbantext.jar\"/>" +
144
            "<target name=\"all\" >" +
145
            "  <mkdir dir='" + output + "' />" + 
146
            "  <jnlp dir='" + output + "' alias='jnlp' storepass='netbeans-test' keystore='" + ks + "' signjars='false' >" +
147
            "    <modules dir='" + parent + "' >" +
148
            "      <include name='" + simpleJar.getName() + "' />" +
149
            "    </modules>" +
150
            "  </jnlp>" +
151
            "</target>" +
152
            "</project>"
153
        );
154
        PublicPackagesInProjectizedXMLTest.execute (f, new String[] { "-verbose" });
155
        
156
        assertFilenames(output, "org-my-module.jnlp", "org-my-module/s0.jar");
157
        
158
        File jnlp = new File(output, "org-my-module.jnlp");
159
        String res = ModuleDependenciesTest.readFile (jnlp);
160
        
161
        assertTrue ("Component JNLP type: " + res, res.indexOf ("<component-desc/>") >= 0);
162
        assertTrue ("We support all permitions by default: " + res, res.indexOf ("<all-permissions/>") >= 0);
163
        
164
        Matcher match = Pattern.compile(".*codebase=['\\\"]([^'\\\"]*)['\\\"]").matcher(res);
165
        assertTrue("codebase is there", match.find());
166
        assertEquals("one group found", 1, match.groupCount());
167
        String base = match.group(1);
168
        
169
        assertEquals("By default the dest directory is $$codebase: ", "$$codebase", base);
170
171
        File jar = new File(output, "org-my-module/s0.jar");
172
        JarFile signed = new JarFile(jar);
173
        Enumeration it = signed.entries();
174
        while (it.hasMoreElements()) {
175
            JarEntry entry = (JarEntry)it.nextElement();
176
            if (entry.getName().endsWith(".SF")) {
177
                fail ("File should not be signed: " + jar);
178
            }
179
        }
180
        
181
    }
128
    
182
    
129
    public void testTheLocalizedAutoupdateProblem() throws Exception {
183
    public void testTheLocalizedAutoupdateProblem() throws Exception {
130
        String UTfile =   
184
        String UTfile =   
Lines 338-343 Link Here
338
                }
392
                }
339
            }
393
            }
340
            fail ("File does not seem to be signed: " + jar);
394
            fail ("File does not seem to be signed: " + jar);
395
        }
396
    }
397
    
398
    public void testGenerateJNLPAndUnSignedJarForSimpleLocalizedModule() throws Exception {
399
        Manifest m;
400
        
401
        m = ModuleDependenciesTest.createManifest ();
402
        m.getMainAttributes ().putValue ("OpenIDE-Module", "org.my.module/3");
403
        File simpleJar = generateJar ("modules/", new String[0], m, null);
404
405
        File parent = simpleJar.getParentFile ();
406
        File localizedJarCZ = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
407
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarCZ.getName());
408
        assertTrue("Successful rename", localizedJarCZ.renameTo(new File(localizedJarCZ.getParent(), "0_cs.jar")));
409
        
410
        File localizedJarZH = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
411
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarZH.getName());
412
        assertTrue("Successful rename", localizedJarZH.renameTo(new File(localizedJarCZ.getParent(), "0_zh_CN.jar")));
413
        
414
        File localizedJarJA = generateJar("modules/locale/", new String[0], ModuleDependenciesTest.createManifest(), null);
415
        assertEquals("There need to have the same name", simpleJar.getName(), localizedJarJA.getName());
416
        assertTrue("Successful rename", localizedJarJA.renameTo(new File(localizedJarCZ.getParent(), "0_ja.jar")));
417
418
        File updateTracking = new File(getWorkDir(), "update_tracking");
419
        updateTracking.mkdirs();
420
        assertTrue("Created", updateTracking.isDirectory());
421
        
422
        File trackingFile = new File(updateTracking, "org-my-module.xml");
423
        FileWriter w = new FileWriter(trackingFile);
424
        w.write(
425
"<?xml version='1.0' encoding='UTF-8'?>\n" +
426
"<module codename='org.my.module/3'>\n" +
427
    "<module_version specification_version='3.22' origin='installer' last='true' install_time='1124194231878'>\n" +
428
        "<file name='modules/" + simpleJar.getName() + "' crc='3245456472'/>\n" +
429
        "<file name='config/Modules/org-my-module.xml' crc='43434' />\n" +
430
        "<file name='modules/locale/0_cs.jar' crc='454244' />\n" +
431
        "<file name='modules/locale/0_ja.jar' crc='779831' />\n" +
432
        "<file name='modules/locale/0_zh_CN.jar' crc='475345' />\n" +
433
"    </module_version>\n" +
434
"</module>\n"
435
        );
436
        w.close();
437
        
438
        
439
        File output = new File(parent, "output");
440
        File ks = generateKeystore("jnlp", "netbeans-test");
441
        
442
        java.io.File f = PublicPackagesInProjectizedXMLTest.extractString (
443
            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
444
            "<project name=\"Test Arch\" basedir=\".\" default=\"all\" >" +
445
            "  <taskdef name=\"jnlp\" classname=\"org.netbeans.nbbuild.MakeJNLP\" classpath=\"${nb_all}/nbbuild/nbantext.jar\"/>" +
446
            "<target name=\"all\" >" +
447
            "  <mkdir dir='" + output + "' />" + 
448
            "  <jnlp dir='" + output + "' alias='jnlp' storepass='netbeans-test' keystore='" + ks + "' verify='true' signjars='false' >" +
449
            "    <modules dir='" + parent + "' >" +
450
            "      <include name='" + simpleJar.getName() + "' />" +
451
            "    </modules>" +
452
            "  </jnlp>" +
453
            "</target>" +
454
            "</project>"
455
        );
456
        PublicPackagesInProjectizedXMLTest.execute (f, new String[] { "-verbose" });
457
458
        assertFilenames(output, "org-my-module.jnlp",
459
                "org-my-module/0.jar",
460
                "org-my-module/locale-0_cs.jar",
461
                "org-my-module/locale-0_zh_CN.jar",
462
                "org-my-module/locale-0_ja.jar");
463
464
        File jnlp = new File(output, "org-my-module.jnlp");
465
        String res = ModuleDependenciesTest.readFile (jnlp);
466
        
467
        assertTrue ("Component JNLP type: " + res, res.indexOf ("<component-desc/>") >= 0);
468
        assertTrue ("We support all permissions by default: " + res, res.indexOf ("<all-permissions/>") >= 0);
469
        
470
        Matcher match = Pattern.compile(".*codebase=['\\\"]([^'\\\"]*)['\\\"]").matcher(res);
471
        assertTrue("codebase is there", match.find());
472
        assertEquals("one group found", 1, match.groupCount());
473
        String base = match.group(1);
474
        
475
        assertEquals("By default the dest directory is $$codebase: ", "$$codebase", base);
476
        
477
        assertResource(res, "cs", "org-my-module/locale-0_cs.jar");
478
        assertResource(res, "ja", "org-my-module/locale-0_ja.jar");
479
        assertResource(res, "zh_CN", "org-my-module/locale-0_zh_CN.jar");
480
481
        for (File jar : new File(output, "org-my-module").listFiles()) {
482
            if (!jar.getName().endsWith(".jar")) {
483
                continue;
484
            }
485
            
486
            JarFile signed = new JarFile(jar);
487
            Enumeration it = signed.entries();
488
            while (it.hasMoreElements()) {
489
                JarEntry entry = (JarEntry)it.nextElement();
490
                if (entry.getName().endsWith(".SF")) {
491
                    fail ("File does not seem to be signed: " + jar);
492
                }
493
            }
341
        }
494
        }
342
    }
495
    }
343
    
496
    

Return to bug 98371