OpenJDK / jdk / jdk
changeset 912:3322af753f62
Merge
author | wetmore |
---|---|
date | Tue, 29 Jul 2008 10:18:25 -0700 |
parents | 40d3416d937a 9edd1b9607e2 |
children | e3d549324eb4 |
files | |
diffstat | 32 files changed, 359 insertions(+), 160 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/java/net/Inet6Address.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/share/classes/java/net/Inet6Address.java Tue Jul 29 10:18:25 2008 -0700 @@ -25,12 +25,9 @@ package java.net; -import java.security.AccessController; import java.io.ObjectInputStream; import java.io.IOException; -import java.io.ObjectStreamException; import java.io.InvalidObjectException; -import sun.security.action.*; import java.util.Enumeration; /** @@ -358,13 +355,13 @@ } private int deriveNumericScope (NetworkInterface ifc) throws UnknownHostException { - Enumeration addresses = ifc.getInetAddresses(); + Enumeration<InetAddress> addresses = ifc.getInetAddresses(); while (addresses.hasMoreElements()) { - InetAddress address = (InetAddress)addresses.nextElement(); - if (!(address instanceof Inet6Address)) { + InetAddress addr = addresses.nextElement(); + if (!(addr instanceof Inet6Address)) { continue; } - Inet6Address ia6_addr = (Inet6Address)address; + Inet6Address ia6_addr = (Inet6Address)addr; /* check if site or link local prefixes match */ if (!differentLocalAddressTypes(ia6_addr)){ /* type not the same, so carry on searching */ @@ -377,22 +374,22 @@ } private int deriveNumericScope (String ifname) throws UnknownHostException { - Enumeration en; + Enumeration<NetworkInterface> en; try { en = NetworkInterface.getNetworkInterfaces(); } catch (SocketException e) { throw new UnknownHostException ("could not enumerate local network interfaces"); } while (en.hasMoreElements()) { - NetworkInterface ifc = (NetworkInterface)en.nextElement(); + NetworkInterface ifc = en.nextElement(); if (ifc.getName().equals (ifname)) { Enumeration addresses = ifc.getInetAddresses(); while (addresses.hasMoreElements()) { - InetAddress address = (InetAddress)addresses.nextElement(); - if (!(address instanceof Inet6Address)) { + InetAddress addr = (InetAddress)addresses.nextElement(); + if (!(addr instanceof Inet6Address)) { continue; } - Inet6Address ia6_addr = (Inet6Address)address; + Inet6Address ia6_addr = (Inet6Address)addr; /* check if site or link local prefixes match */ if (!differentLocalAddressTypes(ia6_addr)){ /* type not the same, so carry on searching */ @@ -420,21 +417,22 @@ if (ifname != null && !"".equals (ifname)) { try { scope_ifname = NetworkInterface.getByName(ifname); - try { - scope_id = deriveNumericScope (scope_ifname); - } catch (UnknownHostException e) { - // should not happen - assert false; + if (scope_ifname == null) { + /* the interface does not exist on this system, so we clear + * the scope information completely */ + scope_id_set = false; + scope_ifname_set = false; + scope_id = 0; + } else { + try { + scope_id = deriveNumericScope (scope_ifname); + } catch (UnknownHostException e) { + // should not happen + assert false; + } } } catch (SocketException e) {} - if (scope_ifname == null) { - /* the interface does not exist on this system, so we clear - * the scope information completely */ - scope_id_set = false; - scope_ifname_set = false; - scope_id = 0; - } } /* if ifname was not supplied, then the numeric info is used */ @@ -460,6 +458,7 @@ * an IP multicast address * @since JDK1.1 */ + @Override public boolean isMulticastAddress() { return ((ipaddress[0] & 0xff) == 0xff); } @@ -470,6 +469,7 @@ * a wildcard address. * @since 1.4 */ + @Override public boolean isAnyLocalAddress() { byte test = 0x00; for (int i = 0; i < INADDRSZ; i++) { @@ -485,6 +485,7 @@ * a loopback address; or false otherwise. * @since 1.4 */ + @Override public boolean isLoopbackAddress() { byte test = 0x00; for (int i = 0; i < 15; i++) { @@ -500,6 +501,7 @@ * a link local address; or false if address is not a link local unicast address. * @since 1.4 */ + @Override public boolean isLinkLocalAddress() { return ((ipaddress[0] & 0xff) == 0xfe && (ipaddress[1] & 0xc0) == 0x80); @@ -512,6 +514,7 @@ * a site local address; or false if address is not a site local unicast address. * @since 1.4 */ + @Override public boolean isSiteLocalAddress() { return ((ipaddress[0] & 0xff) == 0xfe && (ipaddress[1] & 0xc0) == 0xc0); @@ -525,6 +528,7 @@ * of global scope or it is not a multicast address * @since 1.4 */ + @Override public boolean isMCGlobal() { return ((ipaddress[0] & 0xff) == 0xff && (ipaddress[1] & 0x0f) == 0x0e); @@ -538,6 +542,7 @@ * of node-local scope or it is not a multicast address * @since 1.4 */ + @Override public boolean isMCNodeLocal() { return ((ipaddress[0] & 0xff) == 0xff && (ipaddress[1] & 0x0f) == 0x01); @@ -551,6 +556,7 @@ * of link-local scope or it is not a multicast address * @since 1.4 */ + @Override public boolean isMCLinkLocal() { return ((ipaddress[0] & 0xff) == 0xff && (ipaddress[1] & 0x0f) == 0x02); @@ -564,6 +570,7 @@ * of site-local scope or it is not a multicast address * @since 1.4 */ + @Override public boolean isMCSiteLocal() { return ((ipaddress[0] & 0xff) == 0xff && (ipaddress[1] & 0x0f) == 0x05); @@ -578,6 +585,7 @@ * or it is not a multicast address * @since 1.4 */ + @Override public boolean isMCOrgLocal() { return ((ipaddress[0] & 0xff) == 0xff && (ipaddress[1] & 0x0f) == 0x08); @@ -590,6 +598,7 @@ * * @return the raw IP address of this object. */ + @Override public byte[] getAddress() { return ipaddress.clone(); } @@ -624,6 +633,7 @@ * * @return the raw IP address in a string format. */ + @Override public String getHostAddress() { String s = numericToTextFormat(ipaddress); if (scope_ifname_set) { /* must check this first */ @@ -639,6 +649,7 @@ * * @return a hash code value for this IP address. */ + @Override public int hashCode() { if (ipaddress != null) { @@ -677,6 +688,7 @@ * <code>false</code> otherwise. * @see java.net.InetAddress#getAddress() */ + @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof Inet6Address))
--- a/jdk/src/share/classes/sun/net/ftp/FtpClient.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/share/classes/sun/net/ftp/FtpClient.java Tue Jul 29 10:18:25 2008 -0700 @@ -352,6 +352,9 @@ s = new Socket(Proxy.NO_PROXY); } else s = new Socket(); + // Bind the socket to the same address as the control channel. This + // is needed in case of multi-homed systems. + s.bind(new InetSocketAddress(serverSocket.getLocalAddress(),0)); if (connectTimeout >= 0) { s.connect(dest, connectTimeout); } else { @@ -417,8 +420,10 @@ // since we can't accept a connection through SOCKS (yet) // throw an exception throw new FtpProtocolException("Passive mode failed"); - } else - portSocket = new ServerSocket(0, 1); + } + // Bind the ServerSocket to the same address as the control channel + // This is needed for multi-homed systems + portSocket = new ServerSocket(0, 1, serverSocket.getLocalAddress()); try { myAddress = portSocket.getInetAddress(); if (myAddress.isAnyLocalAddress())
--- a/jdk/src/share/classes/sun/net/httpserver/ServerImpl.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/share/classes/sun/net/httpserver/ServerImpl.java Tue Jul 29 10:18:25 2008 -0700 @@ -120,14 +120,8 @@ if (executor == null) { executor = new DefaultExecutor(); } + Thread t = new Thread (dispatcher); started = true; - final Dispatcher d = dispatcher; - Thread t = AccessController.doPrivileged(new PrivilegedAction<Thread>() { - public Thread run() { - Thread t = new Thread (d); - return t; - } - }); t.start(); } @@ -355,10 +349,8 @@ } } } - } catch (CancelledKeyException e) { + } catch (Exception e) { logger.log (Level.FINER, "Dispatcher (3)", e); - } catch (IOException e) { - logger.log (Level.FINER, "Dispatcher (4)", e); } } } @@ -370,10 +362,10 @@ Exchange t = new Exchange (chan, protocol, conn); executor.execute (t); } catch (HttpError e1) { - logger.log (Level.FINER, "Dispatcher (5)", e1); + logger.log (Level.FINER, "Dispatcher (4)", e1); conn.close(); } catch (IOException e) { - logger.log (Level.FINER, "Dispatcher (6)", e); + logger.log (Level.FINER, "Dispatcher (5)", e); conn.close(); } }
--- a/jdk/src/share/classes/sun/security/tools/KeyTool.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java Tue Jul 29 10:18:25 2008 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-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 @@ -26,35 +26,23 @@ package sun.security.tools; import java.io.*; -import java.math.BigInteger; -import java.security.GeneralSecurityException; -import java.security.InvalidParameterException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.security.Key; import java.security.PublicKey; import java.security.PrivateKey; import java.security.Security; import java.security.Signature; -import java.security.SignatureException; import java.security.UnrecoverableEntryException; import java.security.UnrecoverableKeyException; import java.security.Principal; import java.security.Provider; import java.security.Identity; -import java.security.Signer; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.cert.CertificateException; -import java.security.interfaces.DSAParams; -import java.security.interfaces.DSAPrivateKey; -import java.security.interfaces.DSAPublicKey; -import java.security.interfaces.RSAPrivateCrtKey; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; import java.text.Collator; import java.text.MessageFormat; import java.util.*; @@ -62,7 +50,6 @@ import java.net.URL; import java.net.URLClassLoader; -import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import sun.security.util.ObjectIdentifier; import sun.security.pkcs.PKCS10; @@ -72,11 +59,16 @@ import sun.security.provider.X509Factory; import sun.security.util.DerOutputStream; import sun.security.util.Password; -import sun.security.util.Resources; import sun.security.util.PathList; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; import sun.security.x509.*; import static java.security.KeyStore.*; @@ -132,6 +124,7 @@ private String ksfname = null; private File ksfile = null; private InputStream ksStream = null; // keystore stream + private String sslserver = null; private KeyStore keyStore = null; private boolean token = false; private boolean nullStream = false; @@ -347,6 +340,9 @@ } else if (collator.compare(flags, "-file") == 0) { if (++i == args.length) errorNeedArgument(flags); filename = args[i]; + } else if (collator.compare(flags, "-sslserver") == 0) { + if (++i == args.length) errorNeedArgument(flags); + sslserver = args[i]; } else if (collator.compare(flags, "-srckeystore") == 0) { if (++i == args.length) errorNeedArgument(flags); srcksfname = args[i]; @@ -924,17 +920,7 @@ doPrintEntries(out); } } else if (command == PRINTCERT) { - InputStream inStream = System.in; - if (filename != null) { - inStream = new FileInputStream(filename); - } - try { - doPrintCert(inStream, out); - } finally { - if (inStream != System.in) { - inStream.close(); - } - } + doPrintCert(out); } else if (command == SELFCERT) { doSelfCert(alias, dname, sigAlgName); kssave = true; @@ -1468,8 +1454,8 @@ } else { // Print the digest of the user cert only out.println - (rb.getString("Certificate fingerprint (MD5): ") + - getCertFingerPrint("MD5", chain[0])); + (rb.getString("Certificate fingerprint (SHA1): ") + + getCertFingerPrint("SHA1", chain[0])); } } } else if (keyStore.entryInstanceOf(alias, @@ -1486,8 +1472,8 @@ out.println(cert.toString()); } else { out.println(rb.getString("trustedCertEntry,")); - out.println(rb.getString("Certificate fingerprint (MD5): ") - + getCertFingerPrint("MD5", cert)); + out.println(rb.getString("Certificate fingerprint (SHA1): ") + + getCertFingerPrint("SHA1", cert)); } } else { out.println(rb.getString("Unknown Entry Type")); @@ -1744,7 +1730,7 @@ * Reads a certificate (or certificate chain) and prints its contents in * a human readbable format. */ - private void doPrintCert(InputStream in, PrintStream out) + private void printCertFromStream(InputStream in, PrintStream out) throws Exception { Collection<? extends Certificate> c = null; @@ -1770,13 +1756,98 @@ Object[] source = {new Integer(i + 1)}; out.println(form.format(source)); } - printX509Cert(x509Cert, out); + if (rfc) dumpCert(x509Cert, out); + else printX509Cert(x509Cert, out); if (i < (certs.length-1)) { out.println(); } } } + private void doPrintCert(final PrintStream out) throws Exception { + if (sslserver != null) { + SSLContext sc = SSLContext.getInstance("SSL"); + final boolean[] certPrinted = new boolean[1]; + sc.init(null, new TrustManager[] { + new X509TrustManager() { + + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + + public void checkClientTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + } + + public void checkServerTrusted( + java.security.cert.X509Certificate[] certs, String authType) { + for (int i=0; i<certs.length; i++) { + X509Certificate cert = certs[i]; + try { + if (rfc) { + dumpCert(cert, out); + } else { + out.println("Certificate #" + i); + out.println("===================================="); + printX509Cert(cert, out); + out.println(); + } + } catch (Exception e) { + if (debug) { + e.printStackTrace(); + } + } + } + + // Set to true where there's something to print + if (certs.length > 0) { + certPrinted[0] = true; + } + } + } + }, null); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + HttpsURLConnection.setDefaultHostnameVerifier( + new HostnameVerifier() { + public boolean verify(String hostname, SSLSession session) { + return true; + } + }); + // HTTPS instead of raw SSL, so that -Dhttps.proxyHost and + // -Dhttps.proxyPort can be used. Since we only go through + // the handshake process, an HTTPS server is not needed. + // This program should be able to deal with any SSL-based + // network service. + Exception ex = null; + try { + new URL("https://" + sslserver).openConnection().connect(); + } catch (Exception e) { + ex = e; + } + // If the certs are not printed out, we consider it an error even + // if the URL connection is successful. + if (!certPrinted[0]) { + Exception e = new Exception( + rb.getString("No certificate from the SSL server")); + if (ex != null) { + e.initCause(ex); + } + throw e; + } + } else { + InputStream inStream = System.in; + if (filename != null) { + inStream = new FileInputStream(filename); + } + try { + printCertFromStream(inStream, out); + } finally { + if (inStream != System.in) { + inStream.close(); + } + } + } + } /** * Creates a self-signed certificate, and stores it as a single-element * certificate chain. @@ -3127,7 +3198,7 @@ System.err.println(); System.err.println(rb.getString - ("-printcert [-v] [-file <cert_file>]")); + ("-printcert [-v] [-rfc] [-file <cert_file> | -sslserver <host[:port]>]")); System.err.println(); System.err.println(rb.getString
--- a/jdk/src/share/classes/sun/security/util/Resources.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/share/classes/sun/security/util/Resources.java Tue Jul 29 10:18:25 2008 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-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 @@ -171,7 +171,7 @@ {"Entry type: <type>", "Entry type: {0}"}, {"Certificate chain length: ", "Certificate chain length: "}, {"Certificate[(i + 1)]:", "Certificate[{0,number,integer}]:"}, - {"Certificate fingerprint (MD5): ", "Certificate fingerprint (MD5): "}, + {"Certificate fingerprint (SHA1): ", "Certificate fingerprint (SHA1): "}, {"Entry type: trustedCertEntry\n", "Entry type: trustedCertEntry\n"}, {"trustedCertEntry,", "trustedCertEntry,"}, {"Keystore type: ", "Keystore type: "}, @@ -386,8 +386,10 @@ {"\t [-alias <alias>]", "\t [-alias <alias>]"}, /** rest is same as -certreq starting from -keystore **/ - {"-printcert [-v] [-file <cert_file>]", - "-printcert [-v] [-file <cert_file>]"}, + {"-printcert [-v] [-rfc] [-file <cert_file> | -sslserver <host[:port]>]", + "-printcert [-v] [-rfc] [-file <cert_file> | -sslserver <host[:port]>]"}, + {"No certificate from the SSL server", + "No certificate from the SSL server"}, //{"-selfcert [-v] [-protected]", // "-selfcert [-v] [-protected]"},
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -201,7 +201,6 @@ } if (hp != NULL) { struct in_addr **addrp = (struct in_addr **) hp->h_addr_list; - int len = sizeof(struct in_addr); int i = 0; while (*addrp != (struct in_addr *) 0) {
--- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -143,7 +143,6 @@ const char *hostname; jobjectArray ret = 0; int retLen = 0; - jclass byteArrayCls; jboolean preferIPv6Address; int error=0; @@ -219,7 +218,7 @@ } else { int i = 0; int inetCount = 0, inet6Count = 0, inetIndex, inet6Index; - struct addrinfo *itr, *last, *iterator = res; + struct addrinfo *itr, *last = NULL, *iterator = res; while (iterator != NULL) { int skip = 0; itr = resNew; @@ -393,10 +392,7 @@ #ifdef AF_INET6 char host[NI_MAXHOST+1]; - jfieldID fid; int error = 0; - jint family; - struct sockaddr *him ; int len = 0; jbyte caddr[16]; @@ -459,11 +455,10 @@ ping6(JNIEnv *env, jint fd, struct sockaddr_in6* him, jint timeout, struct sockaddr_in6* netif, jint ttl) { jint size; - jint n, len, hlen1, icmplen; + jint n, len; char sendbuf[1500]; unsigned char recvbuf[1500]; struct icmp6_hdr *icmp6; - struct ip6_hdr *ip6; struct sockaddr_in6 sa_recv; jbyte *caddr, *recv_caddr; jchar pid; @@ -561,7 +556,6 @@ jbyteArray ifArray, jint ttl, jint if_scope) { #ifdef AF_INET6 - jint addr; jbyte caddr[16]; jint fd, sz; struct sockaddr_in6 him6;
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Tue Jul 29 10:18:25 2008 -0700 @@ -398,7 +398,6 @@ jobjectArray addrArr; jobjectArray bindArr; jobjectArray childArr; - netaddr *addrs; jint addr_index, addr_count, bind_index; jint child_count, child_index; netaddr *addrP; @@ -815,8 +814,6 @@ addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) { - struct netif *ifs_ptr = NULL; - struct netif *last_ptr = NULL; struct sockaddr_in6 addr; sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s", @@ -852,7 +849,6 @@ */ void freeif(netif *ifs) { netif *currif = ifs; - netif *child = NULL; while (currif != NULL) { netaddr *addrP = currif->addr; @@ -1158,10 +1154,9 @@ */ static struct sockaddr *getBroadcast(JNIEnv *env, const char *ifname) { int sock; - unsigned int mask; struct sockaddr *ret = NULL; struct ifreq if2; - short flag; + short flag = 0; sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) {
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -89,7 +89,6 @@ static jobject createInteger(JNIEnv *env, int i) { static jclass i_class; static jmethodID i_ctrID; - static jfieldID i_valueID; if (i_class == NULL) { jclass c = (*env)->FindClass(env, "java/lang/Integer"); @@ -109,7 +108,6 @@ static jobject createBoolean(JNIEnv *env, int b) { static jclass b_class; static jmethodID b_ctrID; - static jfieldID b_valueID; if (b_class == NULL) { jclass c = (*env)->FindClass(env, "java/lang/Boolean"); @@ -148,8 +146,6 @@ #ifdef __linux__ struct utsname sysinfo; #endif - char *s; - pdsi_fdID = (*env)->GetFieldID(env, cls, "fd", "Ljava/io/FileDescriptor;"); CHECK_NULL(pdsi_fdID); @@ -373,7 +369,7 @@ if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1) { return; } - localPort = NET_GetPortFromSockaddr(&addr); + localPort = NET_GetPortFromSockaddr((struct sockaddr *)&addr); if (localPort == 0) { localPort = (*env)->GetIntField(env, this, pdsi_localPortID); #ifdef AF_INET6 @@ -416,7 +412,6 @@ /* The fdObj'fd */ jint fd; - ssize_t n = -1; SOCKADDR rmtaddr, *rmtaddrP=&rmtaddr; int len; @@ -633,9 +628,7 @@ jint packetBufferOffset, packetBufferLen; int fd; - jbyteArray data; - int datalen; int n; SOCKADDR remote_addr; int len; @@ -812,9 +805,7 @@ jint packetBufferOffset, packetBufferLen; int fd; - jbyteArray data; - int datalen; int n; SOCKADDR remote_addr; int len; @@ -1059,7 +1050,6 @@ jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID); int fd; - int arg = -1; int t = 1; if (IS_NULL(fdObj)) {
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -136,8 +136,6 @@ */ JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_initProto(JNIEnv *env, jclass cls) { - char *s; - psi_fdID = (*env)->GetFieldID(env, cls , "fd", "Ljava/io/FileDescriptor;"); CHECK_NULL(psi_fdID); @@ -183,7 +181,6 @@ jboolean stream) { jobject fdObj, ssObj; int fd; - int arg = -1; if (socketExceptionCls == NULL) { jclass c = (*env)->FindClass(env, "java/net/SocketException"); @@ -290,7 +287,6 @@ while (1) { #ifndef USE_SELECT { -fprintf(stdout,"\nNATIVE: fd = %d] ", fd); struct pollfd pfd; pfd.fd = fd; pfd.events = POLLOUT; @@ -673,8 +669,6 @@ /* accepted fd */ jint newfd; - jthrowable error; - SOCKADDR him; int len; @@ -1087,7 +1081,6 @@ JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketSendUrgentData(JNIEnv *env, jobject this, jint data) { - char *buf; /* The fd field */ jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID); int n, fd;
--- a/jdk/src/solaris/native/java/net/SocketInputStream.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/SocketInputStream.c Tue Jul 29 10:18:25 2008 -0700 @@ -65,7 +65,6 @@ char BUF[MAX_BUFFER_LEN]; char *bufP; jint fd, nread; - jint n; if (IS_NULL(fdObj)) { /* should't this be a NullPointerException? -br */
--- a/jdk/src/solaris/native/java/net/SocketOutputStream.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/SocketOutputStream.c Tue Jul 29 10:18:25 2008 -0700 @@ -67,7 +67,6 @@ char BUF[MAX_BUFFER_LEN]; int buflen; int fd; - jint n = 0; if (IS_NULL(fdObj)) { JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/jdk/src/solaris/native/java/net/linux_close.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/linux_close.c Tue Jul 29 10:18:25 2008 -0700 @@ -281,7 +281,9 @@ int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen) { - BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, fromlen) ); + socklen_t socklen = *fromlen; + BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); + *fromlen = socklen; } int NET_Send(int s, void *msg, int len, unsigned int flags) { @@ -298,7 +300,9 @@ } int NET_Accept(int s, struct sockaddr *addr, int *addrlen) { - BLOCKING_IO_RETURN_INT( s, accept(s, addr, addrlen) ); + socklen_t socklen = *addrlen; + BLOCKING_IO_RETURN_INT( s, accept(s, addr, &socklen) ); + *addrlen = socklen; } int NET_Connect(int s, struct sockaddr *addr, int addrlen) { @@ -323,7 +327,7 @@ * signal other than our wakeup signal. */ int NET_Timeout(int s, long timeout) { - long prevtime,newtime; + long prevtime = 0, newtime; struct timeval t; fdEntry_t *fdEntry = getFdEntry(s);
--- a/jdk/src/solaris/native/java/net/net_util_md.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/solaris/native/java/net/net_util_md.c Tue Jul 29 10:18:25 2008 -0700 @@ -229,7 +229,7 @@ int fd; void *ipv6_fn; SOCKADDR sa; - int sa_len = sizeof(sa); + socklen_t sa_len = sizeof(sa); fd = JVM_Socket(AF_INET6, SOCK_STREAM, 0) ; if (fd < 0) { @@ -447,7 +447,6 @@ char dest_str[40]; struct in6_addr dest_addr; char device[16]; - jboolean match = JNI_FALSE; if (loRoutes != 0) { free (loRoutes); @@ -525,7 +524,7 @@ { /* now find the scope_id for "lo" */ - char addr6[40], devname[20]; + char devname[20]; char addr6p[8][5]; int plen, scope, dad_status, if_idx; @@ -1019,7 +1018,7 @@ * index. */ if (match) { - char addr6[40], devname[20]; + char devname[20]; char addr6p[8][5]; int plen, scope, dad_status, if_idx; @@ -1086,7 +1085,16 @@ } #endif +#ifdef __solaris__ rv = getsockopt(fd, level, opt, result, len); +#else + { + socklen_t socklen = *len; + rv = getsockopt(fd, level, opt, result, &socklen); + *len = socklen; + } +#endif + if (rv < 0) { return rv; }
--- a/jdk/src/windows/native/java/net/Inet4AddressImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/Inet4AddressImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -30,6 +30,7 @@ #include <stdlib.h> #include <malloc.h> #include <sys/types.h> +#include <process.h> #include "java_net_InetAddress.h" #include "java_net_Inet4AddressImpl.h" @@ -141,7 +142,6 @@ unsigned int addr[4]; jobjectArray ret = NULL; - jclass byteArrayCls; if (!initialized) { ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); @@ -315,7 +315,7 @@ seq = ((unsigned short)rand()) >> 1; /* icmp_id is a 16 bit data type, therefore down cast the pid */ - pid = (u_short) getpid(); + pid = (u_short) _getpid(); size = 60*1024; setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (const char *) &size, sizeof(size)); /**
--- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -30,6 +30,7 @@ #include <stdlib.h> #include <malloc.h> #include <sys/types.h> +#include <process.h> #include "java_net_InetAddress.h" #include "java_net_Inet4AddressImpl.h" @@ -307,10 +308,7 @@ jstring ret = NULL; char host[NI_MAXHOST+1]; - jfieldID fid; int error = 0; - jint family; - struct sockaddr *him ; int len = 0; jbyte caddr[16]; @@ -374,7 +372,7 @@ ping6(JNIEnv *env, jint fd, struct SOCKADDR_IN6* him, jint timeout, struct SOCKADDR_IN6* netif, jint ttl) { jint size; - jint n, len, hlen1, icmplen, i; + jint n, len, i; char sendbuf[1500]; char auxbuf[1500]; unsigned char recvbuf[1500]; @@ -392,7 +390,7 @@ seq = ((unsigned short)rand()) >> 1; /* icmp_id is a 16 bit data type, therefore down cast the pid */ - pid = (unsigned short) getpid(); + pid = (unsigned short) _getpid(); size = 60*1024; setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (const char *)&size, sizeof(size)); @@ -520,7 +518,6 @@ jbyteArray ifArray, jint ttl, jint if_scope) { #ifdef AF_INET6 - jint addr; jbyte caddr[16]; jint fd, sz; struct sockaddr_in6 him6;
--- a/jdk/src/windows/native/java/net/NetworkInterface.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/NetworkInterface.c Tue Jul 29 10:18:25 2008 -0700 @@ -75,7 +75,6 @@ extern int enumAddresses_win9x(JNIEnv *, netif *, netaddr **); extern int init_win9x(void); #endif -extern int enumInterfaces_win(JNIEnv *env, netif **netifPP); /* Windows 95/98/ME running */ @@ -209,7 +208,6 @@ int count; netif *netifP; DWORD i; - wchar_t wName[128]; int lo=0, eth=0, tr=0, fddi=0, ppp=0, sl=0, net=0; /*
--- a/jdk/src/windows/native/java/net/NetworkInterface.h Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/NetworkInterface.h Tue Jul 29 10:18:25 2008 -0700 @@ -26,6 +26,7 @@ #ifndef NETWORK_INTERFACE_H #define NETWORK_INTERFACE_H +#include <iphlpapi.h> #include "net_util.h" /* @@ -86,6 +87,14 @@ extern jfieldID ni_ibbroadcastID; /* InterfaceAddress.broadcast */ extern jfieldID ni_ibmaskID; /* InterfaceAddress.maskLength */ +int enumInterfaces_win(JNIEnv *env, netif **netifPP); + +/* We have included iphlpapi.h which includes iptypes.h which has the definition + * for MAX_ADAPTER_DESCRIPTION_LENGTH (along with the other definitions in this + * ifndef block). Therefore if MAX_ADAPTER_DESCRIPTION_LENGTH is defined we can + * be sure that the other definitions are also defined */ +#ifndef MAX_ADAPTER_DESCRIPTION_LENGTH + /* * Following includes come from iptypes.h */ @@ -373,6 +382,10 @@ UINT EnableDns; } FIXED_INFO, *PFIXED_INFO; +#pragma warning(pop) + +#endif /*!MAX_ADAPTER_DESCRIPTION_LENGTH*/ + #ifndef IP_INTERFACE_NAME_INFO_DEFINED #define IP_INTERFACE_NAME_INFO_DEFINED @@ -389,7 +402,6 @@ #endif -#pragma warning(pop) /* from ipifcons.h */
--- a/jdk/src/windows/native/java/net/NetworkInterface_win9x.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/NetworkInterface_win9x.c Tue Jul 29 10:18:25 2008 -0700 @@ -417,8 +417,8 @@ return -1; } curr->index = ++adapterCount; - curr->name = strdup("lo"); - curr->displayName = strdup("TCP Loopback interface"); + curr->name = _strdup("lo"); + curr->displayName = _strdup("TCP Loopback interface"); curr->next = adapterP; *adapterPP = curr; @@ -513,12 +513,11 @@ HKEY enumKey, bindingKey; DWORD dwLen; ULONG ulType; - TCHAR driver[MAX_STR_LEN]; char addresses[MAX_STR_LEN]; unsigned long addr; /* IPv4 address */ unsigned char byte; netaddr *netaddrP, *curr; - int i, addrCount, if_count; + int i, addrCount; /* * Open the HKEY_LOCAL_MACHINE\Enum\%s\%s\%s key @@ -1055,8 +1054,8 @@ return -1; } - ifs->name = strdup(adapterP->name); - ifs->displayName = strdup(adapterP->displayName); + ifs->name = _strdup(adapterP->name); + ifs->displayName = _strdup(adapterP->displayName); ifs->dwIndex = adapterP->index; ifs->index = adapterP->index; ifs->next = netifP;
--- a/jdk/src/windows/native/java/net/NetworkInterface_winXP.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/NetworkInterface_winXP.c Tue Jul 29 10:18:25 2008 -0700 @@ -41,6 +41,7 @@ */ extern int enumAddresses_win(JNIEnv *env, netif *netifP, netaddr **netaddrPP); +int getAddrsFromAdapter(IP_ADAPTER_ADDRESSES *ptr, netaddr **netaddrPP); /* IP helper library routines */ int (PASCAL FAR *GetIpAddrTable_fn)(); @@ -168,11 +169,10 @@ */ int getAllInterfacesAndAddresses (JNIEnv *env, netif **netifPP) { - DWORD ret, numInterfaces; - IP_ADAPTER_ADDRESSES *ptr, *ptr1, *adapters=0; + DWORD ret; + IP_ADAPTER_ADDRESSES *ptr, *adapters=0; ULONG len=ipinflen, count=0; netif *nif=0, *dup_nif, *last=0, *loopif=0; - netaddr *addr, *addr1; int tun=0, net=0; *netifPP = 0; @@ -330,7 +330,7 @@ static int getAddrsFromAdapter(IP_ADAPTER_ADDRESSES *ptr, netaddr **netaddrPP) { LPSOCKADDR sock; - int ret, count = 0; + int count = 0; netaddr *curr, *start=0, *prev=0; PIP_ADAPTER_UNICAST_ADDRESS uni_addr; PIP_ADAPTER_ANYCAST_ADDRESS any_addr; @@ -364,7 +364,7 @@ sock = uni_addr->Address.lpSockaddr; SOCKETADDRESS_COPY (&curr->addr, sock); if (prefix != NULL) { - curr->mask = prefix->PrefixLength; + curr->mask = (short)prefix->PrefixLength; if (sock->sa_family == AF_INET) { sock = prefix->Address.lpSockaddr; SOCKETADDRESS_COPY(&curr->brdcast, sock);
--- a/jdk/src/windows/native/java/net/SocketOutputStream.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/SocketOutputStream.c Tue Jul 29 10:18:25 2008 -0700 @@ -64,7 +64,6 @@ char BUF[MAX_BUFFER_LEN]; int buflen; int fd; - jint n; if (IS_NULL(fdObj)) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
--- a/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -651,7 +651,6 @@ SOCKETADDRESS rmtaddr; SOCKETADDRESS *addrp = &rmtaddr; int addrlen; - int x; /* DELETE ME */ if (IS_NULL(packet)) { @@ -883,7 +882,7 @@ */ if (timeout) { jlong newTime = JVM_CurrentTimeMillis(env, 0); - timeout -= (newTime - prevTime); + timeout -= (jint)(newTime - prevTime); if (timeout <= 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); @@ -929,9 +928,8 @@ int fd, fd1, fduse, nsockets=0, errorCode; int port; - jbyteArray data; - int checkBoth = 0, datalen; + int checkBoth = 0; int n; SOCKETADDRESS remote_addr; jint remote_addrsize=sizeof(remote_addr); @@ -1101,7 +1099,7 @@ */ if (timeout) { jlong newTime = JVM_CurrentTimeMillis(env, 0); - timeout -= (newTime - prevTime); + timeout -= (jint)(newTime - prevTime); if (timeout <= 0) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", "Receive timed out"); @@ -1203,9 +1201,7 @@ * must be called prior to receive() so that fduse can be set. */ int fd, fd1, fduse, errorCode; - jbyteArray data; - int datalen; int n, nsockets=0; SOCKETADDRESS remote_addr; jint remote_addrsize=sizeof(remote_addr); @@ -1376,7 +1372,7 @@ if (timeout) { int ret; jlong newTime = JVM_CurrentTimeMillis(env, 0); - timeout -= (newTime - prevTime); + timeout -= (jint)(newTime - prevTime); prevTime = newTime; if (timeout <= 0) {
--- a/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -966,7 +966,8 @@ if (on) { optval.ling.l_onoff = 1; - optval.ling.l_linger = (*env)->GetIntField(env, value, fid); + optval.ling.l_linger = + (unsigned short)(*env)->GetIntField(env, value, fid); } else { optval.ling.l_onoff = 0; optval.ling.l_linger = 0;
--- a/jdk/src/windows/native/java/net/net_util_md.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/net_util_md.c Tue Jul 29 10:18:25 2008 -0700 @@ -985,7 +985,7 @@ read_rv = select(fd+1, &rd, &wr, &ex, &t); newTime = JVM_CurrentTimeMillis(env, 0); - timeout -= (newTime - prevTime); + timeout -= (jint)(newTime - prevTime); if (timeout <= 0) { return read_rv > 0 ? 0 : -1; }
--- a/jdk/src/windows/native/java/net/net_util_md.h Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/java/net/net_util_md.h Tue Jul 29 10:18:25 2008 -0700 @@ -294,6 +294,15 @@ JNIEXPORT int JNICALL NET_Timeout(int fd, long timeout); +int NET_Socket(int domain, int type, int protocol); + +void NET_ThrowByNameWithLastError(JNIEnv *env, const char *name, + const char *defaultDetail); + +void NET_ThrowSocketException(JNIEnv *env, char* msg); + +jboolean NET_addrtransAvailable(); + /* * differs from NET_Timeout() as follows: *
--- a/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/sun/net/dns/ResolverConfigurationImpl.c Tue Jul 29 10:18:25 2008 -0700 @@ -159,7 +159,6 @@ DWORD dwLen; ULONG ulType; char result[MAX_STR_LEN]; - int index; int sts = STS_NO_CONFIG; ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, @@ -275,7 +274,7 @@ * the DHCP packet - see RFC 2132). */ if (ret == ERROR_SUCCESS) { - int pos = 0; + unsigned int pos = 0; while (pos < dwLen) { int code, len;
--- a/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/src/windows/native/sun/net/www/protocol/http/NTLMAuthSequence.c Tue Jul 29 10:18:25 2008 -0700 @@ -40,7 +40,6 @@ #define SECURITY_WIN32 #include "sspi.h" -#include "issperr.h" /*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/net/Inet6Address/serialize/Readme.txt Tue Jul 29 10:18:25 2008 -0700 @@ -0,0 +1,6 @@ +This test uses 2 binary data files that were each created by serializing an Inet6Address instance. +In both cases this has to do with the tricky issue of scopes in serialized addresses. + +serial1.4.2.ser: Was created by serializing an Inet6Address (::1) with J2SE 1.4.2 and is used to check for backward compatibility. + +serial-bge0.ser: Was created on a Sparc workstation because it has an uncommon interface name ('bge0') which is useful for the test.
--- a/jdk/test/java/net/Inet6Address/serialize/Serialize.java Mon Jul 28 12:37:52 2008 -0700 +++ b/jdk/test/java/net/Inet6Address/serialize/Serialize.java Tue Jul 29 10:18:25 2008 -0700 @@ -24,7 +24,9 @@ /** * @test * @bug 4921029 + * @bug 6656849 * @summary java.net.Inet6Address fails to be serialized with IPv6 support + * @summary NullPointerException thrown while de-serializing IPV6 Address. */ import java.net.*; @@ -76,11 +78,20 @@ System.out.println(nobj); - // create an address with an unlikely numeric scope_id - if (!test ((Inet6Address)InetAddress.getByName ("fe80::1%99"))) { - throw new RuntimeException ("test failed on fe80::1%99"); - } + // create an address with an unlikely numeric scope_id + if (!test ((Inet6Address)InetAddress.getByName ("fe80::1%99"))) { + throw new RuntimeException ("test failed on fe80::1%99"); + } + // Deserialize an Inet6 address with a named interface + file = new File (System.getProperty("test.src"), "serial-bge0.ser"); + ois = new ObjectInputStream(new FileInputStream(file)); + try { + nobj = (Inet6Address) ois.readObject(); + } catch (NullPointerException e) { + throw new RuntimeException("6656849 Not fixed: NullPointer when deserializing"); + } + System.out.println(nobj); System.out.println("All tests passed"); } @@ -97,8 +108,5 @@ } else { return false; } - - } - }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/tools/keytool/PrintSSL.java Tue Jul 29 10:18:25 2008 -0700 @@ -0,0 +1,55 @@ +/* + * 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. + */ + +// Read printssl.sh, this Java program starts an SSL server + +import java.net.ServerSocket; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocket; + +public class PrintSSL { + public static void main(String[] args) throws Exception { + System.setProperty("javax.net.ssl.keyStorePassword", "passphrase"); + System.setProperty("javax.net.ssl.keyStore", + System.getProperty("test.src", "./") + "/../../ssl/etc/keystore"); + SSLServerSocketFactory sslssf = + (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); + final ServerSocket server = sslssf.createServerSocket(0); + System.out.println(server.getLocalPort()); + System.out.flush(); + Thread t = new Thread() { + public void run() { + try { + Thread.sleep(30000); + server.close(); + } catch (Exception e) { + ; + } + throw new RuntimeException("Timeout"); + } + }; + t.setDaemon(true); + t.start(); + ((SSLSocket)server.accept()).startHandshake(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/tools/keytool/printssl.sh Tue Jul 29 10:18:25 2008 -0700 @@ -0,0 +1,58 @@ +# +# 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 6480981 +# @summary keytool should be able to import certificates from remote SSL servers + +if [ "${TESTSRC}" = "" ] ; then + TESTSRC="." +fi +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + SunOS | Linux ) + FS="/" + ;; + Windows_* ) + FS="\\" + ;; + * ) + echo "Unrecognized operating system!" + exit 1; + ;; +esac + +${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}PrintSSL.java || exit 10 +${TESTJAVA}${FS}bin${FS}java -Dtest.src=$TESTSRC PrintSSL | ( read PORT; ${TESTJAVA}${FS}bin${FS}keytool -printcert -sslserver localhost:$PORT ) +status=$? + +rm PrintSSL*.class + +exit $status