35
35
import java .net .DatagramSocket ;
36
36
import java .net .DatagramSocketImplFactory ;
37
37
import java .net .FileNameMap ;
38
- import java .net .HttpURLConnection ;
39
38
import java .net .InetAddress ;
40
39
import java .net .InetSocketAddress ;
41
40
import java .net .JarURLConnection ;
42
- import java .net .MalformedURLException ;
43
41
import java .net .MulticastSocket ;
44
42
import java .net .NetworkInterface ;
45
43
import java .net .Proxy ;
50
48
import java .net .SocketAddress ;
51
49
import java .net .SocketImplFactory ;
52
50
import java .net .URI ;
53
- import java .net .URISyntaxException ;
54
51
import java .net .URL ;
55
- import java .net .URLConnection ;
56
52
import java .net .URLStreamHandler ;
57
53
import java .net .URLStreamHandlerFactory ;
58
54
import java .net .http .HttpClient ;
77
73
import java .nio .file .NoSuchFileException ;
78
74
import java .nio .file .OpenOption ;
79
75
import java .nio .file .Path ;
80
- import java .nio .file .Paths ;
81
76
import java .nio .file .StandardOpenOption ;
82
77
import java .nio .file .WatchEvent ;
83
78
import java .nio .file .WatchService ;
@@ -646,162 +641,67 @@ public ElasticsearchEntitlementChecker(PolicyChecker policyChecker) {
646
641
policyChecker .checkOutboundNetworkAccess (callerClass );
647
642
}
648
643
649
- @ SuppressWarnings ("deprecation" )
650
- private URL extractJarFileUrl (URL jarUrl ) {
651
- String spec = jarUrl .getFile ();
652
- int separator = spec .indexOf ("!/" );
653
-
654
- // URL does not handle nested JAR URLs (it would be a MalformedURLException upon connection)
655
- if (separator == -1 ) {
656
- return null ;
657
- }
658
-
659
- try {
660
- return new URL (spec .substring (0 , separator ));
661
- } catch (MalformedURLException e ) {
662
- return null ;
663
- }
664
- }
665
-
666
- private boolean handleNetworkOrFileUrlCheck (Class <?> callerClass , URL url ) {
667
- if (isNetworkUrl (url )) {
668
- policyChecker .checkOutboundNetworkAccess (callerClass );
669
- return true ;
670
- }
671
- if (isFileUrl (url )) {
672
- checkURLFileRead (callerClass , url );
673
- return true ;
674
- }
675
- return false ;
676
- }
677
-
678
- private void checkJarURLAccess (Class <?> callerClass , JarURLConnection that ) {
679
- var jarFileUrl = that .getJarFileURL ();
680
- if (handleNetworkOrFileUrlCheck (callerClass , jarFileUrl )) {
681
- return ;
682
- }
683
- policyChecker .checkUnsupportedURLProtocolConnection (callerClass , jarFileUrl .getProtocol ());
684
- }
685
-
686
- private void checkEntitlementForUrl (Class <?> callerClass , URL that ) {
687
- if (handleNetworkOrFileUrlCheck (callerClass , that )) {
688
- return ;
689
- }
690
- if (isJarUrl (that )) {
691
- var jarFileUrl = extractJarFileUrl (that );
692
- if (jarFileUrl == null || handleNetworkOrFileUrlCheck (callerClass , jarFileUrl ) == false ) {
693
- policyChecker .checkUnsupportedURLProtocolConnection (callerClass , "jar with unsupported inner protocol" );
694
- }
695
- } else {
696
- policyChecker .checkUnsupportedURLProtocolConnection (callerClass , that .getProtocol ());
697
- }
698
- }
699
-
700
644
@ Override
701
645
public void check$java_net_URL$openConnection (Class <?> callerClass , java .net .URL that ) {
702
- checkEntitlementForUrl (callerClass , that );
646
+ policyChecker . checkEntitlementForUrl (callerClass , that );
703
647
}
704
648
705
649
@ Override
706
650
public void check$java_net_URL$openConnection (Class <?> callerClass , URL that , Proxy proxy ) {
707
651
if (proxy .type () != Proxy .Type .DIRECT ) {
708
652
policyChecker .checkOutboundNetworkAccess (callerClass );
709
653
}
710
- checkEntitlementForUrl (callerClass , that );
654
+ policyChecker . checkEntitlementForUrl (callerClass , that );
711
655
}
712
656
713
657
@ Override
714
658
public void check$java_net_URL$openStream (Class <?> callerClass , java .net .URL that ) {
715
- checkEntitlementForUrl (callerClass , that );
659
+ policyChecker . checkEntitlementForUrl (callerClass , that );
716
660
}
717
661
718
662
@ Override
719
663
public void check$java_net_URL$getContent (Class <?> callerClass , java .net .URL that ) {
720
- checkEntitlementForUrl (callerClass , that );
664
+ policyChecker . checkEntitlementForUrl (callerClass , that );
721
665
}
722
666
723
667
@ Override
724
668
public void check$java_net_URL$getContent (Class <?> callerClass , java .net .URL that , Class <?>[] classes ) {
725
- checkEntitlementForUrl (callerClass , that );
726
- }
727
-
728
- private static final Set <String > NETWORK_PROTOCOLS = Set .of ("http" , "https" , "ftp" , "mailto" );
729
-
730
- private static boolean isNetworkUrl (java .net .URL url ) {
731
- return NETWORK_PROTOCOLS .contains (url .getProtocol ());
732
- }
733
-
734
- private static boolean isFileUrl (java .net .URL url ) {
735
- return "file" .equals (url .getProtocol ());
736
- }
737
-
738
- private static boolean isJarUrl (java .net .URL url ) {
739
- return "jar" .equals (url .getProtocol ());
740
- }
741
-
742
- // We have to use class names for sun.net.www classes as java.base does not export them
743
- private static final List <String > ADDITIONAL_NETWORK_URL_CONNECT_CLASS_NAMES = List .of (
744
- "sun.net.www.protocol.ftp.FtpURLConnection" ,
745
- "sun.net.www.protocol.mailto.MailToURLConnection"
746
- );
747
-
748
- private static boolean isNetworkUrlConnection (java .net .URLConnection urlConnection ) {
749
- var connectionClass = urlConnection .getClass ();
750
- return HttpURLConnection .class .isAssignableFrom (connectionClass )
751
- || ADDITIONAL_NETWORK_URL_CONNECT_CLASS_NAMES .contains (connectionClass .getName ());
752
- }
753
-
754
- // We have to use class names for sun.net.www classes as java.base does not export them
755
- private static boolean isFileUrlConnection (java .net .URLConnection urlConnection ) {
756
- var connectionClass = urlConnection .getClass ();
757
- return "sun.net.www.protocol.file.FileURLConnection" .equals (connectionClass .getName ());
758
- }
759
-
760
- private void checkEntitlementForURLConnection (Class <?> callerClass , URLConnection that ) {
761
- if (isNetworkUrlConnection (that )) {
762
- policyChecker .checkOutboundNetworkAccess (callerClass );
763
- } else if (isFileUrlConnection (that )) {
764
- checkURLFileRead (callerClass , that .getURL ());
765
- } else if (that instanceof JarURLConnection jarURLConnection ) {
766
- checkJarURLAccess (callerClass , jarURLConnection );
767
- } else {
768
- policyChecker .checkUnsupportedURLProtocolConnection (callerClass , that .getURL ().getProtocol ());
769
- }
669
+ policyChecker .checkEntitlementForUrl (callerClass , that );
770
670
}
771
671
772
672
@ Override
773
673
public void check$java_net_URLConnection$getContentLength (Class <?> callerClass , java .net .URLConnection that ) {
774
- checkEntitlementForURLConnection (callerClass , that );
674
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
775
675
}
776
676
777
677
@ Override
778
678
public void check$java_net_URLConnection$getContentLengthLong (Class <?> callerClass , java .net .URLConnection that ) {
779
- checkEntitlementForURLConnection (callerClass , that );
679
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
780
680
}
781
681
782
682
@ Override
783
683
public void check$java_net_URLConnection$getContentType (Class <?> callerClass , java .net .URLConnection that ) {
784
- checkEntitlementForURLConnection (callerClass , that );
684
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
785
685
}
786
686
787
687
@ Override
788
688
public void check$java_net_URLConnection$getContentEncoding (Class <?> callerClass , java .net .URLConnection that ) {
789
- checkEntitlementForURLConnection (callerClass , that );
689
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
790
690
}
791
691
792
692
@ Override
793
693
public void check$java_net_URLConnection$getExpiration (Class <?> callerClass , java .net .URLConnection that ) {
794
- checkEntitlementForURLConnection (callerClass , that );
694
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
795
695
}
796
696
797
697
@ Override
798
698
public void check$java_net_URLConnection$getDate (Class <?> callerClass , java .net .URLConnection that ) {
799
- checkEntitlementForURLConnection (callerClass , that );
699
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
800
700
}
801
701
802
702
@ Override
803
703
public void check$java_net_URLConnection$getLastModified (Class <?> callerClass , java .net .URLConnection that ) {
804
- checkEntitlementForURLConnection (callerClass , that );
704
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
805
705
}
806
706
807
707
@ Override
@@ -811,7 +711,7 @@ private void checkEntitlementForURLConnection(Class<?> callerClass, URLConnectio
811
711
String name ,
812
712
int defaultValue
813
713
) {
814
- checkEntitlementForURLConnection (callerClass , that );
714
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
815
715
}
816
716
817
717
@ Override
@@ -821,7 +721,7 @@ private void checkEntitlementForURLConnection(Class<?> callerClass, URLConnectio
821
721
String name ,
822
722
long defaultValue
823
723
) {
824
- checkEntitlementForURLConnection (callerClass , that );
724
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
825
725
}
826
726
827
727
@ Override
@@ -831,17 +731,17 @@ private void checkEntitlementForURLConnection(Class<?> callerClass, URLConnectio
831
731
String name ,
832
732
long defaultValue
833
733
) {
834
- checkEntitlementForURLConnection (callerClass , that );
734
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
835
735
}
836
736
837
737
@ Override
838
738
public void check$java_net_URLConnection$getContent (Class <?> callerClass , java .net .URLConnection that ) {
839
- checkEntitlementForURLConnection (callerClass , that );
739
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
840
740
}
841
741
842
742
@ Override
843
743
public void check$java_net_URLConnection$getContent (Class <?> callerClass , java .net .URLConnection that , Class <?>[] classes ) {
844
- checkEntitlementForURLConnection (callerClass , that );
744
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
845
745
}
846
746
847
747
@ Override
@@ -867,32 +767,32 @@ private void checkEntitlementForURLConnection(Class<?> callerClass, URLConnectio
867
767
// Using java.net.URLConnection for "that" as sun.net.www.URLConnection is not exported
868
768
@ Override
869
769
public void check$sun_net_www_URLConnection$getHeaderField (Class <?> callerClass , java .net .URLConnection that , String name ) {
870
- checkEntitlementForURLConnection (callerClass , that );
770
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
871
771
}
872
772
873
773
@ Override
874
774
public void check$sun_net_www_URLConnection$getHeaderFields (Class <?> callerClass , java .net .URLConnection that ) {
875
- checkEntitlementForURLConnection (callerClass , that );
775
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
876
776
}
877
777
878
778
@ Override
879
779
public void check$sun_net_www_URLConnection$getHeaderFieldKey (Class <?> callerClass , java .net .URLConnection that , int n ) {
880
- checkEntitlementForURLConnection (callerClass , that );
780
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
881
781
}
882
782
883
783
@ Override
884
784
public void check$sun_net_www_URLConnection$getHeaderField (Class <?> callerClass , java .net .URLConnection that , int n ) {
885
- checkEntitlementForURLConnection (callerClass , that );
785
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
886
786
}
887
787
888
788
@ Override
889
789
public void check$sun_net_www_URLConnection$getContentType (Class <?> callerClass , java .net .URLConnection that ) {
890
- checkEntitlementForURLConnection (callerClass , that );
790
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
891
791
}
892
792
893
793
@ Override
894
794
public void check$sun_net_www_URLConnection$getContentLength (Class <?> callerClass , java .net .URLConnection that ) {
895
- checkEntitlementForURLConnection (callerClass , that );
795
+ policyChecker . checkEntitlementForURLConnection (callerClass , that );
896
796
}
897
797
898
798
@ Override
@@ -2773,23 +2673,14 @@ public void checkPathRegister(
2773
2673
policyChecker .checkFileRead (callerClass , that );
2774
2674
}
2775
2675
2776
- private void checkURLFileRead (Class <?> callerClass , URL url ) {
2777
- try {
2778
- policyChecker .checkFileRead (callerClass , Paths .get (url .toURI ()));
2779
- } catch (URISyntaxException e ) {
2780
- // We expect this method to be called only on File URLs; otherwise the underlying method would fail anyway
2781
- throw new RuntimeException (e );
2782
- }
2783
- }
2784
-
2785
2676
@ Override
2786
2677
public void check$sun_net_www_protocol_file_FileURLConnection$connect (Class <?> callerClass , java .net .URLConnection that ) {
2787
- checkURLFileRead (callerClass , that .getURL ());
2678
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2788
2679
}
2789
2680
2790
2681
@ Override
2791
2682
public void check$sun_net_www_protocol_file_FileURLConnection$getHeaderFields (Class <?> callerClass , java .net .URLConnection that ) {
2792
- checkURLFileRead (callerClass , that .getURL ());
2683
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2793
2684
}
2794
2685
2795
2686
@ Override
@@ -2798,22 +2689,22 @@ private void checkURLFileRead(Class<?> callerClass, URL url) {
2798
2689
java .net .URLConnection that ,
2799
2690
String name
2800
2691
) {
2801
- checkURLFileRead (callerClass , that .getURL ());
2692
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2802
2693
}
2803
2694
2804
2695
@ Override
2805
2696
public void check$sun_net_www_protocol_file_FileURLConnection$getHeaderField (Class <?> callerClass , java .net .URLConnection that , int n ) {
2806
- checkURLFileRead (callerClass , that .getURL ());
2697
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2807
2698
}
2808
2699
2809
2700
@ Override
2810
2701
public void check$sun_net_www_protocol_file_FileURLConnection$getContentLength (Class <?> callerClass , java .net .URLConnection that ) {
2811
- checkURLFileRead (callerClass , that .getURL ());
2702
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2812
2703
}
2813
2704
2814
2705
@ Override
2815
2706
public void check$sun_net_www_protocol_file_FileURLConnection$getContentLengthLong (Class <?> callerClass , java .net .URLConnection that ) {
2816
- checkURLFileRead (callerClass , that .getURL ());
2707
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2817
2708
}
2818
2709
2819
2710
@ Override
@@ -2822,24 +2713,28 @@ private void checkURLFileRead(Class<?> callerClass, URL url) {
2822
2713
java .net .URLConnection that ,
2823
2714
int n
2824
2715
) {
2825
- checkURLFileRead (callerClass , that .getURL ());
2716
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2826
2717
}
2827
2718
2828
2719
@ Override
2829
2720
public void check$sun_net_www_protocol_file_FileURLConnection$getLastModified (Class <?> callerClass , java .net .URLConnection that ) {
2830
- checkURLFileRead (callerClass , that .getURL ());
2721
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2831
2722
}
2832
2723
2833
2724
@ Override
2834
2725
public void check$sun_net_www_protocol_file_FileURLConnection$getInputStream (Class <?> callerClass , java .net .URLConnection that ) {
2835
- checkURLFileRead (callerClass , that .getURL ());
2726
+ policyChecker . checkURLFileRead (callerClass , that .getURL ());
2836
2727
}
2837
2728
2838
2729
@ Override
2839
2730
public void check$java_net_JarURLConnection$getManifest (Class <?> callerClass , java .net .JarURLConnection that ) {
2840
2731
checkJarURLAccess (callerClass , that );
2841
2732
}
2842
2733
2734
+ private void checkJarURLAccess (Class <?> callerClass , JarURLConnection connection ) {
2735
+ policyChecker .checkJarURLAccess (callerClass , connection );
2736
+ }
2737
+
2843
2738
@ Override
2844
2739
public void check$java_net_JarURLConnection$getJarEntry (Class <?> callerClass , java .net .JarURLConnection that ) {
2845
2740
checkJarURLAccess (callerClass , that );
0 commit comments