From 54ec5f42b95c17e1c366ed5bb5366594e31332e8 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Fri, 21 Mar 2008 14:54:14 +0000
Subject: [PATCH] Fix for issue 3059 (setup --cli should not go in infinite loop asking)

---
 opends/src/server/org/opends/server/tools/InstallDS.java |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/InstallDS.java b/opends/src/server/org/opends/server/tools/InstallDS.java
index 2735196..074358b 100644
--- a/opends/src/server/org/opends/server/tools/InstallDS.java
+++ b/opends/src/server/org/opends/server/tools/InstallDS.java
@@ -30,6 +30,7 @@
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.messages.ToolMessages.*;
+import static org.opends.messages.UtilityMessages.*;
 
 import java.io.File;
 import java.io.InputStream;
@@ -928,8 +929,10 @@
    * If the user did not provide explicitly some data or if the provided data is
    * not valid, it prompts the user to provide it.
    * @param uData the UserData object to be updated.
+   * @throws UserDataException if something went wrong checking the data.
    */
   private void promptIfRequiredForDirectoryManager(UserData uData)
+  throws UserDataException
   {
     LinkedList<String> dns = promptIfRequiredForDNs(
         argParser.directoryManagerDNArg, INFO_INSTALLDS_PROMPT_ROOT_DN.get(),
@@ -937,8 +940,14 @@
     uData.setDirectoryManagerDn(dns.getFirst());
 
     String pwd = argParser.getDirectoryManagerPassword();
+    int nTries = 0;
     while (pwd == null)
     {
+      if (nTries >= CONFIRMATION_MAX_TRIES)
+      {
+        throw new UserDataException(null,
+            ERR_TRIES_LIMIT_REACHED.get(CONFIRMATION_MAX_TRIES));
+      }
       String pwd1 = null;
       // Prompt for password and confirm.
 
@@ -965,29 +974,38 @@
         println();
         println(ERR_INSTALLDS_PASSWORDS_DONT_MATCH.get());
       }
+
+      nTries++;
     }
     uData.setDirectoryManagerPwd(pwd);
   }
 
   /**
    * This method returns a list of DNs.  It checks that the provided list of
-   * actually contain some values.  If no valid values are found it prompts
+   * DNs actually contain some values.  If no valid values are found it prompts
    * the user to provide a valid DN.
    * @param arg the Argument that the user provided to specify the DNs.
    * @param promptMsg the prompt message to be displayed.
    * @param includeLineBreak whether to include a line break before the first
    * prompt or not.
    * @return a list of valid DNs.
+   * @throws UserDataException if something went wrong checking the data.
    */
   private LinkedList<String> promptIfRequiredForDNs(StringArgument arg,
-      Message promptMsg, boolean includeLineBreak)
+      Message promptMsg, boolean includeLineBreak) throws UserDataException
   {
     LinkedList<String> dns = new LinkedList<String>();
 
     boolean usedProvided = false;
     boolean firstPrompt = true;
+    int nTries = 0;
     while (dns.isEmpty())
     {
+      if (nTries >= CONFIRMATION_MAX_TRIES)
+      {
+        throw new UserDataException(null,
+            ERR_TRIES_LIMIT_REACHED.get(CONFIRMATION_MAX_TRIES));
+      }
       boolean prompted = false;
       if (usedProvided || !arg.isPresent())
       {
@@ -1037,6 +1055,7 @@
         println();
       }
       dns.removeAll(toRemove);
+      nTries++;
     }
     return dns;
   }
@@ -1182,8 +1201,10 @@
    * If the user did not provide explicitly some data or if the provided data is
    * not valid, it prompts the user to provide it.
    * @param uData the UserData object to be updated.
+   * @throws UserDataException if something went wrong checking the data.
    */
   private void promptIfRequiredForImportData(UserData uData)
+  throws UserDataException
   {
     // Check the validity of the base DNs
     LinkedList<String> baseDNs = promptIfRequiredForDNs(

--
Gitblit v1.10.0