Skip to content

Commit 7696897

Browse files
author
Andy Herrick
committedDec 2, 2021
8276837: [macos]: Error when signing the additional launcher
Reviewed-by: asemenyuk, almatvee
1 parent 3d98ec1 commit 7696897

File tree

3 files changed

+47
-31
lines changed

3 files changed

+47
-31
lines changed
 

‎src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacAppImageBuilder.java

+23-24
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,6 @@ public static void addNewKeychain(Map<String, ? super Object> params)
593593
Log.error(I18N.getString("message.keychain.error"));
594594
return;
595595
}
596-
597596
boolean contains = keychainList.stream().anyMatch(
598597
str -> str.trim().equals("\""+keyChainPath.trim()+"\""));
599598
if (contains) {
@@ -608,7 +607,9 @@ public static void addNewKeychain(Map<String, ? super Object> params)
608607
if (path.startsWith("\"") && path.endsWith("\"")) {
609608
path = path.substring(1, path.length()-1);
610609
}
611-
keyChains.add(path);
610+
if (!keyChains.contains(path)) {
611+
keyChains.add(path);
612+
}
612613
});
613614

614615
List<String> args = new ArrayList<>();
@@ -682,27 +683,23 @@ static void signAppBundle(
682683
Log.verbose(MessageFormat.format(I18N.getString(
683684
"message.ignoring.symlink"), p.toString()));
684685
} else {
685-
List<String> args;
686-
// runtime and Framework files will be signed below
687-
// but they need to be unsigned first here
688-
if ((p.toString().contains("/Contents/runtime")) ||
689-
(p.toString().contains("/Contents/Frameworks"))) {
690-
691-
args = new ArrayList<>();
692-
args.addAll(Arrays.asList("/usr/bin/codesign",
693-
"--remove-signature", p.toString()));
694-
try {
695-
Set<PosixFilePermission> oldPermissions =
696-
Files.getPosixFilePermissions(p);
697-
p.toFile().setWritable(true, true);
698-
ProcessBuilder pb = new ProcessBuilder(args);
699-
IOUtils.exec(pb);
700-
Files.setPosixFilePermissions(p,oldPermissions);
701-
} catch (IOException ioe) {
702-
Log.verbose(ioe);
703-
toThrow.set(ioe);
704-
return;
705-
}
686+
// unsign everything before signing
687+
List<String> args = new ArrayList<>();
688+
args.addAll(Arrays.asList("/usr/bin/codesign",
689+
"--remove-signature", p.toString()));
690+
try {
691+
Set<PosixFilePermission> oldPermissions =
692+
Files.getPosixFilePermissions(p);
693+
p.toFile().setWritable(true, true);
694+
ProcessBuilder pb = new ProcessBuilder(args);
695+
// run quietly
696+
IOUtils.exec(pb, false, null, false,
697+
Executor.INFINITE_TIMEOUT, true);
698+
Files.setPosixFilePermissions(p,oldPermissions);
699+
} catch (IOException ioe) {
700+
Log.verbose(ioe);
701+
toThrow.set(ioe);
702+
return;
706703
}
707704
args = new ArrayList<>();
708705
args.addAll(Arrays.asList("/usr/bin/codesign",
@@ -727,7 +724,9 @@ static void signAppBundle(
727724
Files.getPosixFilePermissions(p);
728725
p.toFile().setWritable(true, true);
729726
ProcessBuilder pb = new ProcessBuilder(args);
730-
IOUtils.exec(pb);
727+
// run quietly
728+
IOUtils.exec(pb, false, null, false,
729+
Executor.INFINITE_TIMEOUT, true);
731730
Files.setPosixFilePermissions(p, oldPermissions);
732731
} catch (IOException ioe) {
733732
toThrow.set(ioe);

‎src/jdk.jpackage/share/classes/jdk/jpackage/internal/IOUtils.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,24 @@ static void exec(ProcessBuilder pb, boolean testForPresenceOnly,
190190
static void exec(ProcessBuilder pb, boolean testForPresenceOnly,
191191
PrintStream consumer, boolean writeOutputToFile, long timeout)
192192
throws IOException {
193+
exec(pb, testForPresenceOnly, consumer, writeOutputToFile,
194+
Executor.INFINITE_TIMEOUT, false);
195+
}
196+
197+
static void exec(ProcessBuilder pb, boolean testForPresenceOnly,
198+
PrintStream consumer, boolean writeOutputToFile,
199+
long timeout, boolean quiet) throws IOException {
193200
List<String> output = new ArrayList<>();
194-
Executor exec = Executor.of(pb).setWriteOutputToFile(writeOutputToFile)
195-
.setTimeout(timeout).setOutputConsumer(lines -> {
196-
lines.forEach(output::add);
197-
if (consumer != null) {
198-
output.forEach(consumer::println);
199-
}
200-
});
201+
Executor exec = Executor.of(pb)
202+
.setWriteOutputToFile(writeOutputToFile)
203+
.setTimeout(timeout)
204+
.setQuiet(quiet)
205+
.setOutputConsumer(lines -> {
206+
lines.forEach(output::add);
207+
if (consumer != null) {
208+
output.forEach(consumer::println);
209+
}
210+
});
201211

202212
if (testForPresenceOnly) {
203213
exec.execute();

‎test/jdk/tools/jpackage/macosx/SigningAppImageTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.nio.file.Path;
2525
import jdk.jpackage.test.JPackageCommand;
2626
import jdk.jpackage.test.Annotations.Test;
27+
import jdk.jpackage.test.AdditionalLauncher;
2728

2829
/**
2930
* Tests generation of app image with --mac-sign and related arguments. Test will
@@ -65,11 +66,17 @@ public static void test() throws Exception {
6566
cmd.addArguments("--mac-sign", "--mac-signing-key-user-name",
6667
SigningBase.DEV_NAME, "--mac-signing-keychain",
6768
SigningBase.KEYCHAIN);
69+
70+
AdditionalLauncher testAL = new AdditionalLauncher("testAL");
71+
testAL.applyTo(cmd);
6872
cmd.executeAndAssertHelloAppImageCreated();
6973

7074
Path launcherPath = cmd.appLauncherPath();
7175
SigningBase.verifyCodesign(launcherPath, true);
7276

77+
Path testALPath = launcherPath.getParent().resolve("testAL");
78+
SigningBase.verifyCodesign(testALPath, true);
79+
7380
Path appImage = cmd.outputBundle();
7481
SigningBase.verifyCodesign(appImage, true);
7582
SigningBase.verifySpctl(appImage, "exec");

0 commit comments

Comments
 (0)
Failed to load comments.