From deb79786ba32f7e13ad01f4025f06a8031f2b115 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Mon, 18 Dec 2006 22:37:15 +0000
Subject: [PATCH] Update the CLI setup utility to perform a more reliable port-in-use check.  It now uses both a server socket and a client socket, and will reject the port number if the server socket can't bind to the requested port, or if the client socket can bind to that port.

---
 opends/src/server/org/opends/server/tools/InstallDS.java |   35 +++++++++++++++++++++++++++++++----
 1 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/InstallDS.java b/opends/src/server/org/opends/server/tools/InstallDS.java
index a61fdab..ba2e087 100644
--- a/opends/src/server/org/opends/server/tools/InstallDS.java
+++ b/opends/src/server/org/opends/server/tools/InstallDS.java
@@ -32,6 +32,7 @@
 import java.io.File;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
+import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
@@ -448,22 +449,48 @@
             serverSocket.setReuseAddress(true);
             serverSocket.bind(socketAddress);
             serverSocket.close();
-            break;
+
+            try
+            {
+              Socket socket = new Socket("127.0.0.1", ldapPortNumber);
+              socket.close();
+              if ((ldapPortNumber <= 1024) && (! isWindows))
+              {
+                msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
+                message = getMessage(msgID, ldapPortNumber);
+                System.err.println(wrapText(message, MAX_LINE_WIDTH));
+              }
+              else
+              {
+                msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
+                message = getMessage(msgID, ldapPortNumber);
+                System.err.println(wrapText(message, MAX_LINE_WIDTH));
+              }
+
+              continue;
+            }
+            catch (Exception e)
+            {
+              // This is expected, so no action should be taken.
+              break;
+            }
           }
           catch (Exception e)
           {
-            if (ldapPortNumber <= 1024)
+            if ((ldapPortNumber <= 1024) && (! isWindows))
             {
               msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT;
-              message = getMessage(msgID, ldapPortNumber, e.getMessage());
+              message = getMessage(msgID, ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
             else
             {
               msgID   = MSGID_INSTALLDS_CANNOT_BIND_TO_PORT;
-              message = getMessage(msgID, ldapPortNumber, e.getMessage());
+              message = getMessage(msgID, ldapPortNumber);
               System.err.println(wrapText(message, MAX_LINE_WIDTH));
             }
+
+            continue;
           }
         }
       }

--
Gitblit v1.10.0