8225578: Replace wildcard address with loopback or local host in tests - part 16
Fixes java/net/Authenticator and java/net/CookieHandler to stop depending on the wildcard address, wherever possible. Reviewed-by: chegar
This commit is contained in:
parent
a0a919603c
commit
5b21004fe0
test/jdk/java/net
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,11 +24,15 @@
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 4662246
|
||||
* @summary REGRESSION: plugin 14x client authentication dialog returns NullPointerException
|
||||
* @library /test/lib
|
||||
* @run main/othervm AuthNPETest
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true AuthNPETest
|
||||
*/
|
||||
|
||||
public class AuthNPETest {
|
||||
@ -53,45 +57,45 @@ public class AuthNPETest {
|
||||
"Content-Type: text/html; charset=iso-8859-1\r\n" +
|
||||
"Content-Length: 10\r\n\r\n";
|
||||
|
||||
BasicServer (ServerSocket s) {
|
||||
BasicServer(ServerSocket s) {
|
||||
server = s;
|
||||
}
|
||||
|
||||
void readAll (Socket s) throws IOException {
|
||||
void readAll(Socket s) throws IOException {
|
||||
byte[] buf = new byte [128];
|
||||
InputStream is = s.getInputStream ();
|
||||
InputStream is = s.getInputStream();
|
||||
s.setSoTimeout(1000);
|
||||
try {
|
||||
while (is.read(buf) > 0) ;
|
||||
} catch (SocketTimeoutException x) { }
|
||||
}
|
||||
|
||||
public void run () {
|
||||
public void run() {
|
||||
try {
|
||||
System.out.println ("Server 1: accept");
|
||||
s = server.accept ();
|
||||
System.out.println ("accepted");
|
||||
System.out.println("Server 1: accept");
|
||||
s = server.accept();
|
||||
System.out.println("accepted");
|
||||
os = s.getOutputStream();
|
||||
os.write (reply1.getBytes());
|
||||
readAll (s);
|
||||
s.close ();
|
||||
os.write(reply1.getBytes());
|
||||
readAll(s);
|
||||
s.close();
|
||||
|
||||
System.out.println ("Server 2: accept");
|
||||
s = server.accept ();
|
||||
System.out.println ("accepted");
|
||||
System.out.println("Server 2: accept");
|
||||
s = server.accept();
|
||||
System.out.println("accepted");
|
||||
os = s.getOutputStream();
|
||||
os.write ((reply2+"HelloWorld").getBytes());
|
||||
readAll (s);
|
||||
s.close ();
|
||||
os.write((reply2+"HelloWorld").getBytes());
|
||||
readAll(s);
|
||||
s.close();
|
||||
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println (e);
|
||||
}
|
||||
finished ();
|
||||
finished();
|
||||
}
|
||||
|
||||
public synchronized void finished () {
|
||||
public synchronized void finished() {
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
@ -99,48 +103,54 @@ public class AuthNPETest {
|
||||
|
||||
static class MyAuthenticator extends Authenticator {
|
||||
|
||||
MyAuthenticator () {
|
||||
super ();
|
||||
MyAuthenticator() {
|
||||
super();
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
|
||||
public PasswordAuthentication getPasswordAuthentication ()
|
||||
public PasswordAuthentication getPasswordAuthentication()
|
||||
{
|
||||
count ++;
|
||||
System.out.println ("Auth called");
|
||||
return (new PasswordAuthentication ("user", "passwordNotCheckedAnyway".toCharArray()));
|
||||
count++;
|
||||
System.out.println("Auth called");
|
||||
return (new PasswordAuthentication("user", "passwordNotCheckedAnyway".toCharArray()));
|
||||
}
|
||||
|
||||
public int getCount () {
|
||||
return (count);
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void read (InputStream is) throws IOException {
|
||||
static void read(InputStream is) throws IOException {
|
||||
int c;
|
||||
System.out.println ("reading");
|
||||
System.out.println("reading");
|
||||
while ((c=is.read()) != -1) {
|
||||
System.out.write (c);
|
||||
System.out.write(c);
|
||||
}
|
||||
System.out.println ("");
|
||||
System.out.println ("finished reading");
|
||||
System.out.println("");
|
||||
System.out.println("finished reading");
|
||||
}
|
||||
|
||||
public static void main (String args[]) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ServerSocket ss = new ServerSocket (0);
|
||||
int port = ss.getLocalPort ();
|
||||
BasicServer server = new BasicServer (ss);
|
||||
public static void main(String args[]) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator();
|
||||
Authenticator.setDefault(auth);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
int port = ss.getLocalPort();
|
||||
BasicServer server = new BasicServer(ss);
|
||||
synchronized (server) {
|
||||
server.start();
|
||||
System.out.println ("client 1");
|
||||
URL url = new URL ("http://localhost:"+port);
|
||||
URLConnection urlc = url.openConnection ();
|
||||
InputStream is = urlc.getInputStream ();
|
||||
read (is);
|
||||
URL url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(port)
|
||||
.toURL();
|
||||
URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
InputStream is = urlc.getInputStream();
|
||||
read(is);
|
||||
is.close();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,14 +25,16 @@
|
||||
* @test
|
||||
* @bug 4678055
|
||||
* @modules java.base/sun.net.www
|
||||
* @library ../../../sun/net/www/httptest/
|
||||
* @library ../../../sun/net/www/httptest/ /test/lib
|
||||
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
|
||||
* @run main B4678055
|
||||
* @run main/othervm B4678055
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B4678055
|
||||
* @summary Basic Authentication fails with multiple realms
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class B4678055 implements HttpCallback {
|
||||
|
||||
@ -125,12 +127,21 @@ public class B4678055 implements HttpCallback {
|
||||
public static void main (String[] args) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
|
||||
try {
|
||||
server = new TestHttpServer (new B4678055(), 1, 10, 0);
|
||||
System.out.println ("Server: listening on port: " + server.getLocalPort());
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d2/foo.html");
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d2/foo.html");
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
server = new TestHttpServer(new B4678055(), 1, 10, loopback, 0);
|
||||
String serverURL = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getLocalPort())
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
System.out.println("Server: listening at: " + serverURL);
|
||||
client(serverURL + "d1/foo.html");
|
||||
client(serverURL + "d2/foo.html");
|
||||
client(serverURL + "d2/foo.html");
|
||||
} catch (Exception e) {
|
||||
if (server != null) {
|
||||
server.terminate();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,14 +25,16 @@
|
||||
* @test
|
||||
* @bug 4759514
|
||||
* @modules java.base/sun.net.www
|
||||
* @library ../../../sun/net/www/httptest/
|
||||
* @library ../../../sun/net/www/httptest/ /test/lib
|
||||
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
|
||||
* @run main B4759514
|
||||
* @run main/othervm B4759514
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B4759514
|
||||
* @summary Digest Authentication is erroniously quoting the nc value, contrary to RFC 2617
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class B4759514 implements HttpCallback {
|
||||
|
||||
@ -97,10 +99,19 @@ public class B4759514 implements HttpCallback {
|
||||
public static void main (String[] args) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
|
||||
try {
|
||||
server = new TestHttpServer (new B4759514(), 1, 10, 0);
|
||||
System.out.println ("Server: listening on port: " + server.getLocalPort());
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
server = new TestHttpServer (new B4759514(), 1, 10, loopback, 0);
|
||||
String serverURL = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getLocalPort())
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
System.out.println("Server: listening at: " + serverURL);
|
||||
client(serverURL + "d1/foo.html");
|
||||
} catch (Exception e) {
|
||||
if (server != null) {
|
||||
server.terminate();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -27,6 +27,8 @@
|
||||
* @modules jdk.httpserver
|
||||
* @run main/othervm B4769350 server
|
||||
* @run main/othervm B4769350 proxy
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B4769350 server
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B4769350 proxy
|
||||
* @summary proxy authentication username and password caching only works in serial case
|
||||
* Run in othervm since the test sets system properties that are read by the
|
||||
* networking stack and cached when the HTTP handler is invoked, and previous
|
||||
@ -99,7 +101,8 @@ public class B4769350 {
|
||||
}
|
||||
|
||||
public void startServer() {
|
||||
InetSocketAddress addr = new InetSocketAddress(0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
InetSocketAddress addr = new InetSocketAddress(loopback, 0);
|
||||
|
||||
try {
|
||||
server = HttpServer.create(addr, 0);
|
||||
@ -456,17 +459,28 @@ public class B4769350 {
|
||||
System.out.println ("Server: listening on port: "
|
||||
+ server.getPort());
|
||||
if (proxy) {
|
||||
System.setProperty ("http.proxyHost", "localhost");
|
||||
System.setProperty ("http.proxyHost",
|
||||
InetAddress.getLoopbackAddress().getHostAddress());
|
||||
System.setProperty ("http.proxyPort",
|
||||
Integer.toString(server.getPort()));
|
||||
doProxyTests ("www.foo.com", server);
|
||||
} else {
|
||||
doServerTests ("localhost:"+server.getPort(), server);
|
||||
ProxySelector.setDefault(ProxySelector.of(null));
|
||||
doServerTests (authority(server.getPort()), server);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static String authority(int port) {
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
String hoststr = loopback.getHostAddress();
|
||||
if (hoststr.indexOf(':') > -1) {
|
||||
hoststr = "[" + hoststr + "]";
|
||||
}
|
||||
return hoststr + ":" + port;
|
||||
}
|
||||
|
||||
public static void except (String s, Server server) {
|
||||
server.close();
|
||||
throw new RuntimeException (s);
|
||||
@ -496,4 +510,3 @@ public class B4769350 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,14 +25,17 @@
|
||||
* @test
|
||||
* @bug 4921848
|
||||
* @modules java.base/sun.net.www
|
||||
* @library ../../../sun/net/www/httptest/
|
||||
* @library ../../../sun/net/www/httptest/ /test/lib
|
||||
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
|
||||
* @run main/othervm -Dhttp.auth.preference=basic B4921848
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true
|
||||
* -Dhttp.auth.preference=basic B4921848
|
||||
* @summary Allow user control over authentication schemes
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class B4921848 implements HttpCallback {
|
||||
|
||||
@ -88,10 +91,19 @@ public class B4921848 implements HttpCallback {
|
||||
public static void main (String[] args) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
|
||||
try {
|
||||
server = new TestHttpServer (new B4921848(), 1, 10, 0);
|
||||
System.out.println ("Server started: listening on port: " + server.getLocalPort());
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d1/d2/d3/foo.html");
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
server = new TestHttpServer (new B4921848(), 1, 10, loopback, 0);
|
||||
String serverURL = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getLocalPort())
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
System.out.println("Server: listening at: " + serverURL);
|
||||
client(serverURL + "d1/d2/d3/foo.html");
|
||||
} catch (Exception e) {
|
||||
if (server != null) {
|
||||
server.terminate();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -21,10 +21,15 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
// Note: this test saves a cache.ser file in the scratch directory,
|
||||
// which the cache implementation will load its configuration
|
||||
// from. Therefore adding several @run lines does not work.
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 4933582
|
||||
* @library ../../../sun/net/www/httptest
|
||||
* @key intermittent
|
||||
* @library ../../../sun/net/www/httptest /test/lib
|
||||
* @modules java.base/sun.net.www
|
||||
* java.base/sun.net.www.protocol.http
|
||||
* @build HttpCallback HttpTransaction TestHttpServer B4933582
|
||||
@ -34,6 +39,7 @@ import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import sun.net.www.protocol.http.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class B4933582 implements HttpCallback {
|
||||
|
||||
@ -133,12 +139,21 @@ public class B4933582 implements HttpCallback {
|
||||
public static void main (String[] args) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
CacheImpl cache;
|
||||
try {
|
||||
server = new TestHttpServer (new B4933582(), 1, 10, 0);
|
||||
server = new TestHttpServer(new B4933582(), 1, 10, loopback, 0);
|
||||
cache = new CacheImpl (server.getLocalPort());
|
||||
AuthCacheValue.setAuthCache (cache);
|
||||
client ("http://localhost:"+server.getLocalPort()+"/d1/foo.html");
|
||||
String serverURL = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getLocalPort())
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
client(serverURL + "d1/foo.html");
|
||||
} finally {
|
||||
if (server != null) {
|
||||
server.terminate();
|
||||
@ -157,7 +172,7 @@ public class B4933582 implements HttpCallback {
|
||||
while (true) {
|
||||
try {
|
||||
server = new TestHttpServer(new B4933582(), 1, 10,
|
||||
cache.getPort());
|
||||
loopback, cache.getPort());
|
||||
break;
|
||||
} catch (BindException e) {
|
||||
if (retries++ < 5) {
|
||||
@ -173,7 +188,14 @@ public class B4933582 implements HttpCallback {
|
||||
|
||||
try {
|
||||
AuthCacheValue.setAuthCache(cache);
|
||||
client("http://localhost:" + server.getLocalPort() + "/d1/foo.html");
|
||||
String serverURL = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getLocalPort())
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
client(serverURL + "d1/foo.html");
|
||||
} finally {
|
||||
if (server != null) {
|
||||
server.terminate();
|
||||
|
@ -28,6 +28,7 @@
|
||||
* @library ../../../sun/net/www/httptest/
|
||||
* @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
|
||||
* @run main/othervm B4962064
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B4962064
|
||||
* @summary Extend Authenticator to provide access to request URI and server/proxy
|
||||
*/
|
||||
|
||||
@ -91,18 +92,24 @@ public class B4962064 implements HttpCallback {
|
||||
|
||||
public static void main (String[] args) throws Exception {
|
||||
try {
|
||||
server = new TestHttpServer (new B4962064(), 1, 10, 0);
|
||||
InetAddress address = InetAddress.getLoopbackAddress();
|
||||
InetAddress resolved = InetAddress.getByName(address.getHostName());
|
||||
System.out.println("Lookup: " + address + " -> \""
|
||||
+ address.getHostName() + "\" -> "
|
||||
+ resolved);
|
||||
server = new TestHttpServer (new B4962064(), 1, 10, address, 0);
|
||||
int port = server.getLocalPort();
|
||||
System.setProperty ("http.proxyHost", "localhost");
|
||||
String proxyHost = address.equals(resolved)
|
||||
? address.getHostName()
|
||||
: address.getHostAddress();
|
||||
System.setProperty ("http.proxyHost", proxyHost);
|
||||
System.setProperty ("http.proxyPort", Integer.toString (port));
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
System.out.println ("Server started: listening on port: " + port);
|
||||
//String s = new String ("http://localhost:"+port+"/d1/d2/d3/foo.html");
|
||||
String s = new String ("http://foo.com/d1/d2/d3/foo.html");
|
||||
urlsave = new URL (s);
|
||||
client (s);
|
||||
//s = new String ("http://localhost:"+port+"/dr/d3/foo.html");
|
||||
s = new String ("http://bar.com/dr/d3/foo.html");
|
||||
urlsave = new URL (s);
|
||||
client (s);
|
||||
|
@ -26,6 +26,8 @@
|
||||
* @bug 6870935
|
||||
* @modules java.base/sun.net.www
|
||||
* @run main/othervm -Dhttp.nonProxyHosts="" -Dhttp.auth.digest.validateProxy=true B6870935
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true
|
||||
* -Dhttp.nonProxyHosts="" -Dhttp.auth.digest.validateProxy=true B6870935
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
@ -80,18 +82,21 @@ public class B6870935 {
|
||||
|
||||
public void run () {
|
||||
try {
|
||||
System.out.println("Server started");
|
||||
Socket s1 = s.accept ();
|
||||
is = s1.getInputStream ();
|
||||
os = s1.getOutputStream ();
|
||||
is.read ();
|
||||
os.write (reply1.getBytes());
|
||||
System.out.println("First response sent");
|
||||
Thread.sleep (2000);
|
||||
s1.close ();
|
||||
System.out.println("First connection closed");
|
||||
|
||||
s1 = s.accept ();
|
||||
is = s1.getInputStream ();
|
||||
os = s1.getOutputStream ();
|
||||
is.read ();
|
||||
// is.read ();
|
||||
// need to get the cnonce out of the response
|
||||
MessageHeader header = new MessageHeader (is);
|
||||
String raw = header.findValue ("Proxy-Authorization");
|
||||
@ -115,12 +120,16 @@ public class B6870935 {
|
||||
cnstring, passwd, username
|
||||
) +"\r\n";
|
||||
os.write (reply.getBytes());
|
||||
System.out.println("Second response sent");
|
||||
Thread.sleep (2000);
|
||||
s1.close ();
|
||||
System.out.println("Second connection closed");
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println (e);
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
System.out.println("Server finished");
|
||||
}
|
||||
}
|
||||
|
||||
@ -225,8 +234,17 @@ public class B6870935 {
|
||||
DigestServer server;
|
||||
ServerSocket sock;
|
||||
|
||||
InetAddress address = InetAddress.getLoopbackAddress();
|
||||
InetAddress resolved = InetAddress.getByName(address.getHostName());
|
||||
System.out.println("Lookup: "
|
||||
+ address + " -> \"" + address.getHostName() + "\" -> "
|
||||
+ resolved);
|
||||
String proxyHost = address.equals(resolved)
|
||||
? address.getHostName()
|
||||
: address.getHostAddress();
|
||||
try {
|
||||
sock = new ServerSocket (0);
|
||||
sock = new ServerSocket();
|
||||
sock.bind(new InetSocketAddress(address, 0));
|
||||
port = sock.getLocalPort ();
|
||||
}
|
||||
catch (Exception e) {
|
||||
@ -238,12 +256,12 @@ public class B6870935 {
|
||||
server.start ();
|
||||
|
||||
try {
|
||||
|
||||
Authenticator.setDefault (new MyAuthenticator ());
|
||||
SocketAddress addr = new InetSocketAddress (InetAddress.getLoopbackAddress(), port);
|
||||
SocketAddress addr = InetSocketAddress.createUnresolved(proxyHost, port);
|
||||
Proxy proxy = new Proxy (Proxy.Type.HTTP, addr);
|
||||
String s = "http://www.ibm.com";
|
||||
URL url = new URL(s);
|
||||
System.out.println("opening connection through proxy: " + addr);
|
||||
java.net.URLConnection conURL = url.openConnection(proxy);
|
||||
|
||||
InputStream in = conURL.getInputStream();
|
||||
@ -255,6 +273,9 @@ public class B6870935 {
|
||||
catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
error = true;
|
||||
sock.close();
|
||||
} finally {
|
||||
server.join();
|
||||
}
|
||||
if (error) {
|
||||
throw new RuntimeException ("Error in test");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,13 +24,16 @@
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8034170
|
||||
* @summary Digest authentication interop issue
|
||||
* @library /test/lib
|
||||
* @run main/othervm B8034170 unquoted
|
||||
* @run main/othervm -Dhttp.auth.digest.quoteParameters=true B8034170 quoted
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true B8034170 unquoted
|
||||
*/
|
||||
|
||||
public class B8034170 {
|
||||
@ -176,14 +179,21 @@ public class B8034170 {
|
||||
|
||||
MyAuthenticator3 auth = new MyAuthenticator3 ();
|
||||
Authenticator.setDefault (auth);
|
||||
ServerSocket ss = new ServerSocket (0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
int port = ss.getLocalPort ();
|
||||
BasicServer server = new BasicServer (ss);
|
||||
synchronized (server) {
|
||||
server.start();
|
||||
System.out.println ("client 1");
|
||||
URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
|
||||
URLConnection urlc = url.openConnection ();
|
||||
URL url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(port)
|
||||
.path("/d1/d2/d3/foo.html")
|
||||
.toURL();
|
||||
URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
InputStream is = urlc.getInputStream ();
|
||||
read (is);
|
||||
is.close ();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,11 +24,15 @@
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 4474947
|
||||
* @summary fix for bug #4244472 is incomplete - HTTP authorization still needs work
|
||||
* @library /test/lib
|
||||
* @run main/othervm BasicTest
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -151,19 +155,28 @@ public class BasicTest {
|
||||
public static void main (String args[]) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ServerSocket ss = new ServerSocket (0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
int port = ss.getLocalPort ();
|
||||
BasicServer server = new BasicServer (ss);
|
||||
synchronized (server) {
|
||||
server.start();
|
||||
System.out.println ("client 1");
|
||||
URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
|
||||
URLConnection urlc = url.openConnection ();
|
||||
String base = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(port)
|
||||
.path("/")
|
||||
.build()
|
||||
.toString();
|
||||
URL url = new URL(base + "d1/d2/d3/foo.html");
|
||||
URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
InputStream is = urlc.getInputStream ();
|
||||
read (is);
|
||||
System.out.println ("client 2");
|
||||
url = new URL ("http://localhost:"+port+"/d1/foo.html");
|
||||
urlc = url.openConnection ();
|
||||
url = new URL(base + "d1/foo.html");
|
||||
urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
is = urlc.getInputStream ();
|
||||
read (is);
|
||||
server.wait ();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,11 +24,15 @@
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 4513440
|
||||
* @summary BasicAuthentication is zeroing out the given password
|
||||
* @library /test/lib
|
||||
* @run main/othervm BasicTest3
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest3
|
||||
*/
|
||||
|
||||
public class BasicTest3 {
|
||||
@ -130,14 +134,21 @@ public class BasicTest3 {
|
||||
public static void main (String args[]) throws Exception {
|
||||
MyAuthenticator3 auth = new MyAuthenticator3 ();
|
||||
Authenticator.setDefault (auth);
|
||||
ServerSocket ss = new ServerSocket (0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
int port = ss.getLocalPort ();
|
||||
BasicServer3 server = new BasicServer3 (ss);
|
||||
synchronized (server) {
|
||||
server.start();
|
||||
System.out.println ("client 1");
|
||||
URL url = new URL ("http://localhost:"+port+"/d1/d2/d3/foo.html");
|
||||
URLConnection urlc = url.openConnection ();
|
||||
URL url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(port)
|
||||
.path("/d1/d2/d3/foo.html")
|
||||
.toURL();
|
||||
URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
InputStream is = urlc.getInputStream ();
|
||||
read (is);
|
||||
is.close ();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,11 +24,15 @@
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 4623722
|
||||
* @summary performance hit for Basic Authentication
|
||||
* @library /test/lib
|
||||
* @run main/othervm BasicTest4
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true BasicTest4
|
||||
*/
|
||||
|
||||
public class BasicTest4 {
|
||||
@ -59,12 +63,17 @@ public class BasicTest4 {
|
||||
|
||||
static boolean checkFor (InputStream in, char[] seq) throws IOException {
|
||||
System.out.println ("checkfor");
|
||||
StringBuilder message = new StringBuilder();
|
||||
try {
|
||||
int i=0, count=0;
|
||||
while (true) {
|
||||
int c = in.read();
|
||||
if (c == -1)
|
||||
if (c == -1) {
|
||||
System.out.println(new String(seq) + " not found in \n<<"
|
||||
+ message + ">>");
|
||||
return false;
|
||||
}
|
||||
message.append((char)c);
|
||||
count++;
|
||||
if (c == seq[i]) {
|
||||
i++;
|
||||
@ -77,6 +86,7 @@ public class BasicTest4 {
|
||||
}
|
||||
}
|
||||
catch (SocketTimeoutException e) {
|
||||
System.out.println("checkFor: " + e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -194,23 +204,33 @@ public class BasicTest4 {
|
||||
public static void main (String args[]) throws Exception {
|
||||
MyAuthenticator auth = new MyAuthenticator ();
|
||||
Authenticator.setDefault (auth);
|
||||
ServerSocket ss = new ServerSocket (0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ServerSocket ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
int port = ss.getLocalPort ();
|
||||
BasicServer server = new BasicServer (ss);
|
||||
synchronized (server) {
|
||||
server.start();
|
||||
System.out.println ("client 1");
|
||||
URL url = new URL ("http://localhost:"+port+"/d1/d3/foo.html");
|
||||
URLConnection urlc = url.openConnection ();
|
||||
String base = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(port)
|
||||
.path("/d1/")
|
||||
.build()
|
||||
.toString();
|
||||
System.out.println("Base URL: " + base);
|
||||
URL url = new URL (base + "d3/foo.html");
|
||||
URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
InputStream is = urlc.getInputStream ();
|
||||
read (is);
|
||||
System.out.println ("client 2");
|
||||
url = new URL ("http://localhost:"+port+"/d1/d2/bar.html");
|
||||
urlc = url.openConnection ();
|
||||
url = new URL (base + "d2/bar.html");
|
||||
urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
is = urlc.getInputStream ();
|
||||
System.out.println ("client 3");
|
||||
url = new URL ("http://localhost:"+port+"/d1/d4/foobar.html");
|
||||
urlc = url.openConnection ();
|
||||
url = new URL (base + "d4/foobar.html");
|
||||
urlc = url.openConnection(Proxy.NO_PROXY);
|
||||
is = urlc.getInputStream ();
|
||||
read (is);
|
||||
server.wait ();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,10 @@
|
||||
* @test
|
||||
* @bug 6648001
|
||||
* @modules jdk.httpserver
|
||||
* @library /test/lib
|
||||
* @run main/othervm/timeout=20 -ea:sun.net.www.protocol.http.AuthenticationInfo -Dhttp.auth.serializeRequests=true Deadlock
|
||||
* @run main/othervm/timeout=20 -Djava.net.preferIPv6Addresses=true
|
||||
* -ea:sun.net.www.protocol.http.AuthenticationInfo -Dhttp.auth.serializeRequests=true Deadlock
|
||||
* @summary cancelling HTTP authentication causes deadlock
|
||||
*/
|
||||
|
||||
@ -34,8 +37,10 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.InetAddress;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.PasswordAuthentication;
|
||||
import java.net.Proxy;
|
||||
import java.net.URL;
|
||||
import com.sun.net.httpserver.BasicAuthenticator;
|
||||
import com.sun.net.httpserver.Headers;
|
||||
@ -44,12 +49,14 @@ import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
import com.sun.net.httpserver.HttpPrincipal;
|
||||
import com.sun.net.httpserver.HttpServer;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class Deadlock {
|
||||
|
||||
public static void main (String[] args) throws Exception {
|
||||
Handler handler = new Handler();
|
||||
InetSocketAddress addr = new InetSocketAddress (0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
InetSocketAddress addr = new InetSocketAddress (loopback, 0);
|
||||
HttpServer server = HttpServer.create(addr, 0);
|
||||
HttpContext ctx = server.createContext("/test", handler);
|
||||
BasicAuthenticator a = new BasicAuthenticator("foobar@test.realm") {
|
||||
@ -97,8 +104,13 @@ public class Deadlock {
|
||||
URL url;
|
||||
HttpURLConnection urlc;
|
||||
try {
|
||||
url = new URL("http://localhost:"+server.getAddress().getPort()+"/test/foo.html");
|
||||
urlc = (HttpURLConnection)url.openConnection ();
|
||||
url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(server.getAddress().getPort())
|
||||
.path("/test/foo.html")
|
||||
.toURLUnchecked();
|
||||
urlc = (HttpURLConnection)url.openConnection (Proxy.NO_PROXY);
|
||||
} catch (IOException e) {
|
||||
error = true;
|
||||
return;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2019 Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,7 +24,9 @@
|
||||
/* @test
|
||||
* @summary Unit test for java.net.CookieHandler
|
||||
* @bug 4696506
|
||||
* @library /test/lib
|
||||
* @run main/othervm CookieHandlerTest
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true CookieHandlerTest
|
||||
* @author Yingxian Wang
|
||||
*/
|
||||
|
||||
@ -34,6 +36,7 @@
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class CookieHandlerTest implements Runnable {
|
||||
static Map<String,String> cookies;
|
||||
@ -92,15 +95,19 @@ public class CookieHandlerTest implements Runnable {
|
||||
CookieHandlerTest() throws Exception {
|
||||
|
||||
/* start the server */
|
||||
ss = new ServerSocket(0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
ss = new ServerSocket();
|
||||
ss.bind(new InetSocketAddress(loopback, 0));
|
||||
(new Thread(this)).start();
|
||||
|
||||
/* establish http connection to server */
|
||||
String uri = "http://localhost:" +
|
||||
Integer.toString(ss.getLocalPort());
|
||||
URL url = new URL(uri);
|
||||
URL url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(ss.getLocalPort())
|
||||
.toURL();
|
||||
|
||||
HttpURLConnection http = (HttpURLConnection)url.openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
|
||||
|
||||
int respCode = http.getResponseCode();
|
||||
http.disconnect();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -57,8 +57,9 @@ public class CookieManagerTest {
|
||||
} catch (IOException x) {
|
||||
System.out.println("Debug: caught:" + x);
|
||||
}
|
||||
System.out.println("Using: \"127.0.0.1\"");
|
||||
return "127.0.0.1";
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
System.out.println("Using: \"" + loopback.getHostAddress() + "\"");
|
||||
return loopback.getHostAddress();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
@ -73,7 +74,7 @@ public class CookieManagerTest {
|
||||
|
||||
public static void startHttpServer() throws IOException {
|
||||
httpTrans = new CookieTransactionHandler();
|
||||
server = HttpServer.create(new InetSocketAddress(0), 0);
|
||||
server = HttpServer.create(new InetSocketAddress(hostAddress, 0), 0);
|
||||
server.createContext("/", httpTrans);
|
||||
server.start();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,6 +26,9 @@
|
||||
* @bug 8015799
|
||||
* @modules jdk.httpserver
|
||||
* @summary HttpURLConnection.getHeaderFields() throws IllegalArgumentException
|
||||
* @library /test/lib
|
||||
* @run main EmptyCookieHeader
|
||||
* @run main/othervm -Djava.net.preferIPv6Addresses=true EmptyCookieHeader
|
||||
*/
|
||||
|
||||
import com.sun.net.httpserver.*;
|
||||
@ -33,6 +36,7 @@ import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
import jdk.test.lib.net.URIBuilder;
|
||||
|
||||
public class EmptyCookieHeader {
|
||||
|
||||
@ -43,11 +47,17 @@ public class EmptyCookieHeader {
|
||||
public void runTest() throws Exception {
|
||||
final CookieHandler oldHandler = CookieHandler.getDefault();
|
||||
CookieHandler.setDefault(new TestCookieHandler());
|
||||
HttpServer s = HttpServer.create(new InetSocketAddress(0), 0);
|
||||
InetAddress loopback = InetAddress.getLoopbackAddress();
|
||||
HttpServer s = HttpServer.create(new InetSocketAddress(loopback, 0), 0);
|
||||
try {
|
||||
startServer(s);
|
||||
URL url = new URL("http://localhost:" + s.getAddress().getPort() + "/");
|
||||
HttpURLConnection c = (HttpURLConnection)url.openConnection();
|
||||
URL url = URIBuilder.newBuilder()
|
||||
.scheme("http")
|
||||
.loopback()
|
||||
.port(s.getAddress().getPort())
|
||||
.path("/")
|
||||
.toURL();
|
||||
HttpURLConnection c = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
|
||||
c.getHeaderFields();
|
||||
} finally {
|
||||
CookieHandler.setDefault(oldHandler);
|
||||
|
@ -33,8 +33,11 @@ import java.util.concurrent.Executors;
|
||||
/*
|
||||
* @test
|
||||
* @bug 7169142
|
||||
* @key intermittent
|
||||
* @modules jdk.httpserver
|
||||
* @summary CookieHandler does not work with localhost
|
||||
* @summary CookieHandler does not work with localhost. This requires
|
||||
* binding to the wildcard address and might fail intermittently
|
||||
* due to port reuse issues.
|
||||
* @run main/othervm LocalHostCookie
|
||||
*/
|
||||
public class LocalHostCookie {
|
||||
@ -126,4 +129,3 @@ public class LocalHostCookie {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user