46
46
import org .apache .commons .lang3 .tuple .Pair ;
47
47
import org .eclipse .jetty .server .Server ;
48
48
import org .eclipse .jetty .server .ServerConnector ;
49
+ import org .eclipse .jetty .server .SymlinkAllowedResourceAliasChecker ;
50
+ import org .eclipse .jetty .server .handler .ContextHandler ;
49
51
import org .eclipse .jetty .server .handler .ResourceHandler ;
50
52
import org .eclipse .jetty .util .resource .Resource ;
51
53
import org .jetbrains .annotations .NotNull ;
@@ -67,11 +69,24 @@ static void startRemoteResourceServer() throws Exception {
67
69
ServerConnector connector = new ServerConnector (remote );
68
70
connector .setHost ("127.0.0.1" );
69
71
remote .addConnector (connector );
70
- ResourceHandler handler = new ResourceHandler ();
71
- handler .setBaseResource (Resource .newResource (localMirrorPath .toUri ()));
72
- handler .setDirectoriesListed (true );
73
- handler .setAcceptRanges (true );
74
- remote .setHandler (handler );
72
+
73
+ ResourceHandler resourceHandler = new ResourceHandler ();
74
+ Resource resourceBase = Resource .newResource (localMirrorPath .toAbsolutePath ());
75
+ resourceHandler .setBaseResource (resourceBase );
76
+ resourceHandler .setDirectoriesListed (true );
77
+ resourceHandler .setDirAllowed (true );
78
+ resourceHandler .setAcceptRanges (true );
79
+ ContextHandler symlinkAllowingHandler = new ContextHandler ();
80
+ symlinkAllowingHandler .setContextPath ("/" );
81
+ symlinkAllowingHandler .setAllowNullPathInfo (true );
82
+ symlinkAllowingHandler .setHandler (resourceHandler );
83
+ symlinkAllowingHandler .setBaseResource (resourceBase );
84
+ // the @TempDir locations on OS X are under /var/.. which is a symlink to /private/var and are
85
+ // not followed by default in Jetty for security reasons.
86
+ symlinkAllowingHandler .clearAliasChecks ();
87
+ symlinkAllowingHandler .addAliasCheck (
88
+ new SymlinkAllowedResourceAliasChecker (symlinkAllowingHandler ));
89
+ remote .setHandler (symlinkAllowingHandler );
75
90
remote .start ();
76
91
remoteUrl = "http://" + connector .getHost () + ":" + connector .getLocalPort ();
77
92
System .out .println ("TUF local server listening on: " + remoteUrl );
0 commit comments