Skip to content

Commit c79a485

Browse files
author
Daniel D. Daugherty
committedNov 19, 2021
8277494: [BACKOUT] JDK-8276150 Quarantined jpackage apps are labeled as "damaged"
Reviewed-by: asemenyuk, tschatzl
1 parent 2ab43ec commit c79a485

File tree

2 files changed

+33
-80
lines changed

2 files changed

+33
-80
lines changed
 

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

+26-55
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,7 @@ public void prepareApplicationFiles(Map<String, ? super Object> params)
329329
}
330330

331331
copyRuntimeFiles(params);
332-
333-
doSigning(params);
332+
sign(params);
334333
}
335334

336335
private void copyRuntimeFiles(Map<String, ? super Object> params)
@@ -356,12 +355,7 @@ private void copyRuntimeFiles(Map<String, ? super Object> params)
356355
}
357356
}
358357

359-
private void doSigning(Map<String, ? super Object> params)
360-
throws IOException {
361-
362-
// signing or not, unsign first ...
363-
unsignAppBundle(params, root);
364-
358+
private void sign(Map<String, ? super Object> params) throws IOException {
365359
if (Optional.ofNullable(
366360
SIGN_BUNDLE.fetchFrom(params)).orElse(Boolean.TRUE)) {
367361
try {
@@ -653,52 +647,7 @@ public static void restoreKeychainList(Map<String, ? super Object> params)
653647
IOUtils.exec(pb);
654648
}
655649

656-
private static void unsignAppBundle(Map<String, ? super Object> params,
657-
Path appLocation) throws IOException {
658-
659-
// unsign all dylibs and executables
660-
try (Stream<Path> stream = Files.walk(appLocation)) {
661-
stream.peek(path -> { // fix permissions
662-
try {
663-
Set<PosixFilePermission> pfp =
664-
Files.getPosixFilePermissions(path);
665-
if (!pfp.contains(PosixFilePermission.OWNER_WRITE)) {
666-
pfp = EnumSet.copyOf(pfp);
667-
pfp.add(PosixFilePermission.OWNER_WRITE);
668-
Files.setPosixFilePermissions(path, pfp);
669-
}
670-
} catch (IOException e) {
671-
Log.verbose(e);
672-
}
673-
}).filter(p -> Files.isRegularFile(p) &&
674-
(Files.isExecutable(p) || p.toString().endsWith(".dylib"))
675-
&& !(p.toString().contains("dylib.dSYM/Contents"))
676-
).forEach(p -> {
677-
// If p is a symlink then skip.
678-
if (Files.isSymbolicLink(p)) {
679-
Log.verbose(MessageFormat.format(I18N.getString(
680-
"message.ignoring.symlink"), p.toString()));
681-
} else {
682-
List<String> args = new ArrayList<>();
683-
args.addAll(Arrays.asList("/usr/bin/codesign",
684-
"--remove-signature", p.toString()));
685-
try {
686-
Set<PosixFilePermission> oldPermissions =
687-
Files.getPosixFilePermissions(p);
688-
p.toFile().setWritable(true, true);
689-
ProcessBuilder pb = new ProcessBuilder(args);
690-
IOUtils.exec(pb);
691-
Files.setPosixFilePermissions(p,oldPermissions);
692-
} catch (IOException ioe) {
693-
Log.verbose(ioe);
694-
return;
695-
}
696-
}
697-
});
698-
}
699-
}
700-
701-
private static void signAppBundle(
650+
static void signAppBundle(
702651
Map<String, ? super Object> params, Path appLocation,
703652
String signingIdentity, String identifierPrefix, Path entitlements)
704653
throws IOException {
@@ -733,7 +682,29 @@ private static void signAppBundle(
733682
Log.verbose(MessageFormat.format(I18N.getString(
734683
"message.ignoring.symlink"), p.toString()));
735684
} else {
736-
List<String> args = new ArrayList<>();
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+
}
706+
}
707+
args = new ArrayList<>();
737708
args.addAll(Arrays.asList("/usr/bin/codesign",
738709
"--timestamp",
739710
"--options", "runtime",

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

+7-25
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,8 @@
2222
*/
2323

2424
import java.nio.file.Path;
25-
import java.util.List;
26-
2725
import jdk.jpackage.test.JPackageCommand;
2826
import jdk.jpackage.test.Annotations.Test;
29-
import jdk.jpackage.test.Annotations.Parameters;
3027

3128
/**
3229
* Tests generation of app image with --mac-sign and related arguments. Test will
@@ -60,36 +57,21 @@
6057
*/
6158
public class SigningAppImageTest {
6259

63-
final boolean doSign;
64-
65-
public SigningAppImageTest(String flag) {
66-
this.doSign = "true".equals(flag);
67-
}
68-
69-
@Parameters
70-
public static List<Object[]> data() {
71-
return List.of(new Object[][] {{"true"}, {"false"}});
72-
}
73-
7460
@Test
75-
public void test() throws Exception {
61+
public static void test() throws Exception {
7662
SigningCheck.checkCertificates();
7763

7864
JPackageCommand cmd = JPackageCommand.helloAppImage();
79-
if (doSign) {
80-
cmd.addArguments("--mac-sign", "--mac-signing-key-user-name",
81-
SigningBase.DEV_NAME, "--mac-signing-keychain",
82-
SigningBase.KEYCHAIN);
83-
}
65+
cmd.addArguments("--mac-sign", "--mac-signing-key-user-name",
66+
SigningBase.DEV_NAME, "--mac-signing-keychain",
67+
SigningBase.KEYCHAIN);
8468
cmd.executeAndAssertHelloAppImageCreated();
8569

8670
Path launcherPath = cmd.appLauncherPath();
87-
SigningBase.verifyCodesign(launcherPath, doSign);
71+
SigningBase.verifyCodesign(launcherPath, true);
8872

8973
Path appImage = cmd.outputBundle();
90-
SigningBase.verifyCodesign(appImage, doSign);
91-
if (doSign) {
92-
SigningBase.verifySpctl(appImage, "exec");
93-
}
74+
SigningBase.verifyCodesign(appImage, true);
75+
SigningBase.verifySpctl(appImage, "exec");
9476
}
9577
}

0 commit comments

Comments
 (0)
Please sign in to comment.