Re: getCanonicalHostName on Windows

2008-03-05 Thread Christopher Hegarty - Sun Microsystems Ireland
I am not familiar with the Windows DNS service, but I cannot image how 
the FQDN can be retrieved without a reverse entry in the DNS server. I 
suspect that you will need to populate "Reverse Lookup Zones" with the 
names of any machines you wish to be able to get the FQDN for.


-Chris.

Max (Weijun) Wang wrote:


On Mar 4, 2008, at 10:35 PM, Christopher Hegarty wrote:


Hi Max,

The Java methods that you are using are correct. As it is specified 
"best effort" is used to determine the FQDN.


getByName will try to do forward lookup of k1.n3.local to retrieve its 
address, which I assumes will succeed. Then this address is used to do 
a reverse lookup to determine the FQDN of the host. What name service 
are you using? Can you verify the response from the server to the 
reverse lookup?


It's the Windows DNS service automatically installed when I add the "AD 
domain controller" role to the AD server. The "Reverse Lookup Zones" is 
empty in the DNS Management Administrative Tools.


BTW, I have 2 domains in the Network, one is this n3.local, another is a 
"sub-domain" n8.n3.local managed by another AD server. The client/AD 
server/k1 all belongs to n3.local. This shouldn't confuse the client, 
right?


Here's the output of on my client machine xp. The other machines are: 
kdc, the AD server, and k1, the other server. D prints out 
InetAddress.getByName(args[0]).getCanonicalHostName(). You can see that 
getCanonicalName() costs quite some time accessing k1 and kdc. Ping is 
fast anyway.


C:\tmp>"\Program Files\MKS Toolkit\mksnt\time.exe" java D xp
xp.n3.local

real0m 0.34s
user0m 0.06s
sys 0m 0.22s

C:\tmp>"\Program Files\MKS Toolkit\mksnt\time.exe" java D k1
K1

real0m15.51s
user0m 0.03s
sys 0m 0.29s

C:\tmp>"\Program Files\MKS Toolkit\mksnt\time.exe" java D kdc
KDC

real0m15.35s
user0m 0.02s
sys 0m 0.26s

C:\tmp>ping k1

Pinging k1.n3.local [192.168.0.11] with 32 bytes of data:

Reply from 192.168.0.11: bytes=32 time<1ms TTL=128
Reply from 192.168.0.11: bytes=32 time<1ms TTL=128
Reply from 192.168.0.11: bytes=32 time<1ms TTL=128
Reply from 192.168.0.11: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.0.11:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\tmp>ping kdc

Pinging kdc.n3.local [192.168.0.1] with 32 bytes of data:

Reply from 192.168.0.1: bytes=32 time<1ms TTL=128
Reply from 192.168.0.1: bytes=32 time<1ms TTL=128
Reply from 192.168.0.1: bytes=32 time<1ms TTL=128
Reply from 192.168.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms


Thanks
Max



-Chris.

Max (Weijun) Wang wrote:

Hi All
I have a Windows domain called n3.local, and a server called k1 in 
the domain, and a client. When I call the line --

InetAddress.getByName("k1.n3.local").getCanonicalHostName()
from the client, the returned string is "k1". How can I get 
"k1.n3.local"? Is there anything wrong with my Windows configuration? 
Or, I should use another Java method?

Thanks
Max




Proposed fix for 6660405.

2008-03-05 Thread Jean-Christophe Collet

Here is my proposed fix for CR 6660405.
The issue is that after a redirect, and if there is a cache hit (i.e. 
the URL is found in the cache) HttpURLConnection will return the wrong 
InputStream. Details are in the evaluation section of the CR.
My proposed fix is to set inputStream back to null in 
sun.net.www.protocol.http.HttpURLConnection.disconnectInternal().

I've also included a regression test that reproduces the bug.
See patch attached.

--- old/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	2008-03-05 16:05:35.0 +0100
+++ new/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	2008-03-05 16:05:35.0 +0100
@@ -2048,6 +2048,7 @@
  */
 private void disconnectInternal() {
 responseCode = -1;
+inputStream = null;
 if (pi != null) {
 pi.finishTracking();
 pi = null;
--- /dev/null	2008-02-29 10:40:07.0 +0100
+++ new/test/sun/net/www/protocol/http/B6660405.java	2008-03-05 16:05:36.0 +0100
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc.  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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6660405
+ * @summary HttpURLConnection returns the wrong InputStream
+ */
+
+import java.net.*;
+import java.util.*;
+import java.io.*;
+import com.sun.net.httpserver.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+
+public class B6660405
+{
+com.sun.net.httpserver.HttpServer httpServer;
+ExecutorService executorService;
+
+static class MyCacheResponse extends CacheResponse {
+private byte[] buf = new byte[1024];
+
+public MyCacheResponse() {
+
+}
+
+@Override
+public Map> getHeaders() throws IOException
+{
+Map> h = new HashMap>();
+ArrayList l = new ArrayList();
+l.add("HTTP/1.1 200 OK");
+h.put(null, l);
+l = new ArrayList();
+l.add("1024");
+h.put("Content-Length", l);
+return h;
+}
+
+@Override
+public InputStream getBody() throws IOException
+{
+return new ByteArrayInputStream(buf);
+}
+
+}
+static class MyResponseCache extends ResponseCache {
+
+public MyResponseCache() {
+
+}
+
+@Override
+public CacheResponse get(URI uri, String rqstMethod, Map> rqstHeaders) throws IOException
+{
+if (uri.getPath().equals("/redirect/index.html")) {
+return new MyCacheResponse();
+}
+return null;
+}
+
+@Override
+public CacheRequest put(URI uri, URLConnection conn) throws IOException
+{
+return null;
+}
+
+}
+ 
+public static void main(String[] args)
+{
+new B6660405();
+}
+
+public B6660405()
+{
+try {
+startHttpServer();
+doClient();
+} catch (IOException ioe) {
+System.err.println(ioe);
+}
+}
+
+void doClient() {
+ResponseCache.setDefault(new MyResponseCache());
+try {
+InetSocketAddress address = httpServer.getAddress();
+
+// GET Request
+URL url = new URL("http://localhost:"; + address.getPort() + "/test/index.html");
+HttpURLConnection uc = (HttpURLConnection)url.openConnection();
+int code = uc.getResponseCode();
+System.err.println("response code = " + code);
+int l = uc.getContentLength();
+System.err.println("content-length = " + l);
+InputStream in = uc.getInputStream();
+int i = 0;
+// Read till end of stream
+do {
+i = in.read();
+} while (i != -1);
+in.close();
+} catch (IOException e) {
+throw new RuntimeException("Got the wrong

Re: Proposed fix for 6660405.

2008-03-05 Thread Christopher Hegarty - Sun Microsystems Ireland

The change looks good. I approve this change.

-Chris

Jean-Christophe Collet wrote:

Here is my proposed fix for CR 6660405.
The issue is that after a redirect, and if there is a cache hit (i.e. 
the URL is found in the cache) HttpURLConnection will return the wrong 
InputStream. Details are in the evaluation section of the CR.
My proposed fix is to set inputStream back to null in 
sun.net.www.protocol.http.HttpURLConnection.disconnectInternal().

I've also included a regression test that reproduces the bug.
See patch attached.



Proposed fix for 6651717

2008-03-05 Thread Jean-Christophe Collet
This is a straightforward fix in mailtoURLConnection to remove a left 
over debug statement in the connect() method.
Also took the opportunity to remove unneeded imports and add appropriate 
@Override tags.

No regression test as this is a trivial change.
Patch attached.

--- old/src/share/classes/sun/net/www/protocol/mailto/MailToURLConnection.java	2008-03-05 17:37:36.0 +0100
+++ new/src/share/classes/sun/net/www/protocol/mailto/MailToURLConnection.java	2008-03-05 17:37:35.0 +0100
@@ -29,9 +29,6 @@
 import java.net.InetAddress;
 import java.net.SocketPermission;
 import java.io.*;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
 import java.security.Permission;
 import sun.net.www.*;
 import sun.net.smtp.SmtpClient;
@@ -86,11 +83,11 @@
 }
 
 public void connect() throws IOException {
-System.err.println("connect. Timeout = " + connectTimeout);
 client = new SmtpClient(connectTimeout);
 client.setReadTimeout(readTimeout);
 }
 
+@Override
 public synchronized OutputStream getOutputStream() throws IOException {
 if (os != null) {
 return os;
@@ -107,6 +104,7 @@
 return os;
 }
 
+@Override
 public Permission getPermission() throws IOException {
 if (permission == null) {
 connect();
@@ -116,22 +114,26 @@
 return permission;
 }
 
+@Override
 public void setConnectTimeout(int timeout) {
 if (timeout < 0)
 throw new IllegalArgumentException("timeouts can't be negative");
 connectTimeout = timeout;
 }
 
+@Override
 public int getConnectTimeout() {
 return (connectTimeout < 0 ? 0 : connectTimeout);
 }
 
+@Override
 public void setReadTimeout(int timeout) {
 if (timeout < 0)
 throw new IllegalArgumentException("timeouts can't be negative");
 readTimeout = timeout;
 }
 
+@Override
 public int getReadTimeout() {
 return readTimeout < 0 ? 0 : readTimeout;
 }


Re: Proposed fix for 6651717

2008-03-05 Thread Christopher Hegarty - Sun Microsystems Ireland

Yes, this change is fine.

-Chris.

Jean-Christophe Collet wrote:
This is a straightforward fix in mailtoURLConnection to remove a left 
over debug statement in the connect() method.
Also took the opportunity to remove unneeded imports and add appropriate 
@Override tags.

No regression test as this is a trivial change.
Patch attached.