> The issue is reproduced on macOS Big Sur 11.0.1 with jdk 16.0.1+9.
>
> Create a native macOS app from the Hello.java file, sign and run it in
> sandbox:
>
> import javax.print.*;
> import javax.swing.*;
>
> public class Hello {
>
> public static void main(String[] args) throws Exception {
> SwingUtilities.invokeAndWait(() -> {
> boolean isSandboxed = System.getenv("APP_SANDBOX_CONTAINER_ID")
> != null;
> PrintService defaultPrinter =
> PrintServiceLookup.lookupDefaultPrintService();
> PrintService[] services =
> PrintServiceLookup.lookupPrintServices(null, null);
>
> StringBuilder builder = new StringBuilder();
> builder.append("is sandboxed: ").append(isSandboxed).append("\n");
> builder.append("default printer:
> ").append(defaultPrinter).append("\n");
> int size = services.length;
> for (int i = 0; i < size; i++) {
>
> builder.append("printer[").append(i).append("]=").append(services[i]).append("\n");
> }
> JOptionPane.showMessageDialog(null, builder.toString());
> });
> }
> }
>
> The signed app in sandbox shows null default printer and
> PrintServiceLookup.lookupPrintServices(null, null) returns "Unix Printer: lp".
> 
>
> The problem has been discussed on 2d-dev mail list:
> https://mail.openjdk.java.net/pipermail/2d-dev/2017-June/008375.html
> https://mail.openjdk.java.net/pipermail/2d-dev/2017-July/008418.html
>
> According to the discussion:
>
>> I've submitted a DTS incident to Apple and a friend there has followed-up.
>> Their unofficial position is that java should be connecting to the cups
>> interface returned
>> by the cupsServer() function and not changing the interface string to
>> "localhost".
>> Security changes in 10.12.4 reject the TCP connection which they say confuses
>> network-client access with print access. They don't seem interested in
>> loosening that change.
>
>
> The proposed solution is to use the domain socket pathname in
> httpConnect(...) cups function and cupsGetDests(...) to get list of printers
> from cups when the app is signed and is run in sandbox on MacOs.
Alexander Scherbatiy has updated the pull request with a new target base due to
a merge or a rebase. The incremental webrev excludes the unrelated changes
brought in by the merge/rebase. The pull request contains five additional
commits since the last revision:
- Merge branch 'openjdk:master' into JDK-8181571
- Return null if printers are not found in sandboxed app on MacOS
- Clean utf_str and nameArray references
- Split long line in CUPSPrinter.isCupsRunning() method
- 8181571: printing to CUPS fails on mac sandbox app
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/4861/files
- new: https://git.openjdk.java.net/jdk/pull/4861/files/067d0025..9a83785b
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4861&range=03
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4861&range=02-03
Stats: 1544660 lines in 8566 files changed: 887512 ins; 607384 del; 49764 mod
Patch: https://git.openjdk.java.net/jdk/pull/4861.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/4861/head:pull/4861
PR: https://git.openjdk.java.net/jdk/pull/4861