From 486ffa6d0abfa0b91dc7ab22ee71758b5eecfb88 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 26 Sep 2007 18:57:15 +0000
Subject: [PATCH] Fix for 2306: configure replication encryption on or off in dsreplication and setup-gui

---
 opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java |  107 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 78 insertions(+), 29 deletions(-)

diff --git a/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java b/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
index a12b707..6b93164 100644
--- a/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
+++ b/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
@@ -599,6 +599,7 @@
       uData.setUseStartTLS1(useStartTLS1);
     }
     int replicationPort1 = -1;
+    boolean secureReplication1 = argParser.isSecureReplication1();
     if (ctx1 != null)
     {
       // Try to get the replication port for server 1 only if it is required.
@@ -642,6 +643,12 @@
             }
           }
         }
+        if (!secureReplication1)
+        {
+          secureReplication1 =
+            confirm(INFO_REPLICATION_ENABLE_SECURE1_PROMPT.get(
+                String.valueOf(replicationPort1)), false);
+        }
       }
       // If the server contains an ADS. Try to load it and only load it: if
       // there are issues with the ADS they will be encountered in the
@@ -657,6 +664,7 @@
       }
     }
     uData.setReplicationPort1(replicationPort1);
+    uData.setSecureReplication1(secureReplication1);
 
     /*
      * Prompt for information on the second server.
@@ -802,6 +810,7 @@
       uData.setUseStartTLS2(useStartTLS2);
     }
     int replicationPort2 = -1;
+    boolean secureReplication2 = argParser.isSecureReplication2();
     if (ctx2 != null)
     {
       if (!hasReplicationPort(ctx2))
@@ -845,16 +854,23 @@
           }
           if (host1.equalsIgnoreCase(host2))
           {
-            if (replicationPort1 == replicationPort2)
+            if ((replicationPort1 > 0) &&
+                (replicationPort1 == replicationPort2))
             {
               printLineBreak();
               printErrorMessage(ERR_REPLICATION_SAME_REPLICATION_PORT.get(
-                      String.valueOf(replicationPort1), host1));
+                      String.valueOf(replicationPort2), host1));
               printLineBreak();
               replicationPort2 = -1;
             }
           }
         }
+        if (!secureReplication2)
+        {
+          secureReplication2 =
+            confirm(INFO_REPLICATION_ENABLE_SECURE2_PROMPT.get(
+                String.valueOf(replicationPort2)), false);
+        }
       }
       // If the server contains an ADS. Try to load it and only load it: if
       // there are issues with the ADS they will be encountered in the
@@ -869,6 +885,7 @@
       }
     }
     uData.setReplicationPort2(replicationPort2);
+    uData.setSecureReplication2(secureReplication2);
 
     // If the adminUid and adminPwd are not set in the EnableReplicationUserData
     // object, that means that there are no administrators and that they
@@ -1721,6 +1738,7 @@
     int replicationPort1 = getValue(argParser.getReplicationPort1(),
         argParser.getDefaultReplicationPort1());
     uData.setReplicationPort1(replicationPort1);
+    uData.setSecureReplication1(argParser.isSecureReplication1());
 
     String host2Name = getValue(argParser.getHostName2(),
         argParser.getDefaultHostName2());
@@ -1760,6 +1778,7 @@
     int replicationPort2 = getValue(argParser.getReplicationPort2(),
         argParser.getDefaultReplicationPort2());
     uData.setReplicationPort2(replicationPort2);
+    uData.setSecureReplication2(argParser.isSecureReplication2());
     uData.setReplicateSchema(!argParser.noSchemaReplication());
   }
 
@@ -1887,9 +1906,6 @@
       ReplicationSynchronizationProviderCfgClient sync = null;
       sync = (ReplicationSynchronizationProviderCfgClient)
       root.getSynchronizationProvider("Multimaster Synchronization");
-      /*
-       * Configure the replication server.
-       */
       if (sync.hasReplicationServer())
       {
         ReplicationServerCfgClient replicationServer =
@@ -3482,7 +3498,8 @@
       try
       {
         configureAsReplicationServer(ctx1, uData.getReplicationPort1(),
-          allRepServers, usedReplicationServerIds);
+            uData.isSecureReplication1(), allRepServers,
+            usedReplicationServerIds);
       }
       catch (OpenDsException ode)
       {
@@ -3512,7 +3529,8 @@
       try
       {
         configureAsReplicationServer(ctx2, uData.getReplicationPort2(),
-            allRepServers, usedReplicationServerIds);
+            uData.isSecureReplication2(), allRepServers,
+            usedReplicationServerIds);
       }
       catch (OpenDsException ode)
       {
@@ -3897,27 +3915,28 @@
         }
       }
     }
-    int nCols;
     final int SERVERPORT = 0;
     final int NUMBER_ENTRIES = 1;
     final int MISSING_CHANGES = 2;
     final int AGE_OF_OLDEST_MISSING_CHANGE = 3;
+    final int REPLICATION_PORT = 4;
+    final int SECURE = 5;
     Message[] headers;
     if (scriptFriendly)
     {
       if (isReplicated)
       {
-        nCols = 4;
         headers = new Message[] {
             INFO_REPLICATION_STATUS_LABEL_SERVERPORT.get(),
             INFO_REPLICATION_STATUS_LABEL_NUMBER_ENTRIES.get(),
             INFO_REPLICATION_STATUS_LABEL_MISSING_CHANGES.get(),
-            INFO_REPLICATION_STATUS_LABEL_AGE_OF_OLDEST_MISSING_CHANGE.get()
+            INFO_REPLICATION_STATUS_LABEL_AGE_OF_OLDEST_MISSING_CHANGE.get(),
+            INFO_REPLICATION_STATUS_LABEL_REPLICATION_PORT.get(),
+            INFO_REPLICATION_STATUS_LABEL_SECURE.get()
         };
       }
       else
       {
-        nCols = 2;
         headers = new Message[] {
             INFO_REPLICATION_STATUS_LABEL_SERVERPORT.get(),
             INFO_REPLICATION_STATUS_LABEL_NUMBER_ENTRIES.get()
@@ -3928,26 +3947,26 @@
     {
       if (isReplicated)
       {
-        nCols = 4;
         headers = new Message[] {
             INFO_REPLICATION_STATUS_HEADER_SERVERPORT.get(),
             INFO_REPLICATION_STATUS_HEADER_NUMBER_ENTRIES.get(),
             INFO_REPLICATION_STATUS_HEADER_MISSING_CHANGES.get(),
-            INFO_REPLICATION_STATUS_HEADER_AGE_OF_OLDEST_MISSING_CHANGE.get()
+            INFO_REPLICATION_STATUS_HEADER_AGE_OF_OLDEST_MISSING_CHANGE.get(),
+            INFO_REPLICATION_STATUS_HEADER_REPLICATION_PORT.get(),
+            INFO_REPLICATION_STATUS_HEADER_SECURE.get()
         };
       }
       else
       {
-        nCols = 2;
         headers = new Message[] {
             INFO_REPLICATION_STATUS_HEADER_SERVERPORT.get(),
             INFO_REPLICATION_STATUS_HEADER_NUMBER_ENTRIES.get()
         };
       }
     }
-    Message[][] values = new Message[orderedReplicas.size()][nCols];
+    Message[][] values = new Message[orderedReplicas.size()][headers.length];
 
-    int[] maxWidths = new int[nCols];
+    int[] maxWidths = new int[headers.length];
     int i;
     for (i=0; i<maxWidths.length; i++)
     {
@@ -3958,7 +3977,7 @@
     for (ReplicaDescriptor replica : orderedReplicas)
     {
       Message v;
-      for (int j=0; j<nCols; j++)
+      for (int j=0; j<headers.length; j++)
       {
         switch (j)
         {
@@ -3973,7 +3992,7 @@
           }
           else
           {
-            v = INFO_NOT_AVAILABLE_LABEL.get();
+            v = INFO_NOT_AVAILABLE_SHORT_LABEL.get();
           }
           break;
         case MISSING_CHANGES:
@@ -3984,7 +4003,7 @@
           }
           else
           {
-            v = INFO_NOT_AVAILABLE_LABEL.get();
+            v = INFO_NOT_AVAILABLE_SHORT_LABEL.get();
           }
           break;
         case AGE_OF_OLDEST_MISSING_CHANGE:
@@ -3995,7 +4014,28 @@
           }
           else
           {
-            v = INFO_NOT_AVAILABLE_LABEL.get();
+            v = INFO_NOT_AVAILABLE_SHORT_LABEL.get();
+          }
+          break;
+        case REPLICATION_PORT:
+          int replicationPort = replica.getServer().getReplicationServerPort();
+          if (replicationPort >= 0)
+          {
+            v = Message.raw(String.valueOf(replicationPort));
+          }
+          else
+          {
+            v = INFO_NOT_AVAILABLE_SHORT_LABEL.get();
+          }
+          break;
+        case SECURE:
+          if (replica.getServer().isReplicationSecure())
+          {
+            v = INFO_REPLICATION_STATUS_SECURITY_ENABLED.get();
+          }
+          else
+          {
+            v = INFO_REPLICATION_STATUS_SECURITY_DISABLED.get();
           }
           break;
         default:
@@ -4031,7 +4071,7 @@
       };
       for (i=0; i<labels.length; i++)
       {
-        printProgressMessage(labels[i]+": "+vs[i]);
+        printProgressMessage(labels[i]+" "+vs[i]);
         printProgressLineBreak();
       }
 
@@ -4041,7 +4081,7 @@
         printProgressLineBreak();
         for (int j=0; j<values[i].length; j++)
         {
-          printProgressMessage(headers[j]+": "+values[i][j]);
+          printProgressMessage(headers[j]+" "+values[i][j]);
           printProgressLineBreak();
         }
       }
@@ -4050,13 +4090,13 @@
     {
       if (isReplicated)
       {
-        printProgressMessage(
+        printProgressMessageNoWrap(
             INFO_REPLICATION_STATUS_REPLICATED.get(dn));
         printProgressLineBreak();
       }
       else
       {
-        printProgressMessage(
+        printProgressMessageNoWrap(
             INFO_REPLICATION_STATUS_NOT_REPLICATED.get(dn));
         printProgressLineBreak();
       }
@@ -4077,16 +4117,16 @@
       {
         builder.append("=");
       }
-      printProgressMessage(builder.toString());
+      printProgressMessageNoWrap(builder.toString());
       printProgressLineBreak();
-      printProgressMessage(headerLine.toMessage());
+      printProgressMessageNoWrap(headerLine.toMessage());
       printProgressLineBreak();
       builder = new StringBuilder();
       for (i=0; i<headerLine.length(); i++)
       {
         builder.append("-");
       }
-      printProgressMessage(builder.toString());
+      printProgressMessageNoWrap(builder.toString());
       printProgressLineBreak();
 
       for (i=0; i<values.length; i++)
@@ -4102,7 +4142,7 @@
             line.append(" ");
           }
         }
-        printProgressMessage(line.toMessage());
+        printProgressMessageNoWrap(line.toMessage());
         printProgressLineBreak();
       }
     }
@@ -4233,6 +4273,8 @@
    * port.
    * @param ctx the context connected to the server that we want to configure.
    * @param replicationPort the replication port of the replication server.
+   * @param useSecureReplication whether to have encrypted communication with
+   * the replication port or not.
    * @param replicationServers the list of replication servers to which the
    * replication server will communicate with.
    * @param usedReplicationServerIds the set of replication server IDs that
@@ -4241,7 +4283,8 @@
    * @throws OpenDsException if there is an error updating the configuration.
    */
   private void configureAsReplicationServer(InitialLdapContext ctx,
-      int replicationPort, LinkedHashSet<String> replicationServers,
+      int replicationPort, boolean useSecureReplication,
+      LinkedHashSet<String> replicationServers,
       Set<Integer> usedReplicationServerIds) throws OpenDsException
   {
     printProgressMessage(formatter.getFormattedWithPoints(
@@ -4296,6 +4339,12 @@
 
     if (!sync.hasReplicationServer())
     {
+      CryptoManagerCfgClient crypto = root.getCryptoManager();
+      if (useSecureReplication != crypto.isSSLEncryption())
+      {
+        crypto.setSSLEncryption(useSecureReplication);
+        crypto.commit();
+      }
       int id = InstallerHelper.getReplicationId(usedReplicationServerIds);
       usedReplicationServerIds.add(id);
       replicationServer = sync.createReplicationServer(

--
Gitblit v1.10.0