From 9aaeb55300e57a9f8654ef84a10e64b38fc0e088 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Tue, 28 Dec 2010 17:22:54 +0000
Subject: [PATCH] Fix for OPENDJ-17 - Generated RC script does not run if run as other than root. Fix includes, proper generation of the script for OpenDJ (branding), adding comments for chkconfig, using su -c followed by properly quoted command, detecting for /bin/su vs /usr/bin/su (MacOS X) presence.

---
 opendj-sdk/opends/src/server/org/opends/server/tools/CreateRCScript.java |   37 +++++++++++++++++++++++++++++++------
 1 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/CreateRCScript.java b/opendj-sdk/opends/src/server/org/opends/server/tools/CreateRCScript.java
index 5b0a11b..92aed40 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/CreateRCScript.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/CreateRCScript.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2010 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -48,6 +49,7 @@
 import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
 import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.DynamicConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -222,9 +224,26 @@
 
 
     String suString = "";
+    String EscQuote1 = "\"";
+    String EscQuote2 = "";
+    
     if (userName.isPresent())
     {
-      suString = "/bin/su " + userName.getValue() + " ";
+      String suCmd = "/bin/su";
+      File f = new File(suCmd);
+      if (! f.exists())
+      {
+        suCmd = "/usr/bin/su";
+        File f2 = new File(suCmd);
+        if (! f2.exists())
+        {
+          // Default to /bin/su anyway
+          suCmd = "/bin/su";
+        }
+      }
+      suString = suCmd + " " + userName.getValue() + " -c ";
+      EscQuote1 = "";
+      EscQuote2 = "\"";
     }
 
 
@@ -242,13 +261,17 @@
         w.println("# " + headerLine);
       }
 
+      w.println("# chkconfig: 345 95 5");
+      w.println("# description: Control the " + SHORT_NAME + " Directory Server");
       w.println();
       w.println();
 
-      w.println("# Set the path to the OpenDS instance to manage");
+      w.println("# Set the path to the " + SHORT_NAME + " instance to manage");
       w.println("INSTALL_ROOT=\"" + serverRoot.getAbsolutePath() + "\"");
       w.println("export INSTALL_ROOT");
       w.println();
+      w.println("cd ${INSTALL_ROOT}");
+      w.println();
 
       if (javaHomeDir != null)
       {
@@ -269,16 +292,18 @@
       w.println("# Determine what action should be performed on the server");
       w.println("case \"${1}\" in");
       w.println("start)");
-      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/start-ds\" --quiet");
+      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/start-ds"+
+          EscQuote1 + " --quiet" + EscQuote2);
       w.println("  exit ${?}");
       w.println("  ;;");
       w.println("stop)");
-      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/stop-ds\" --quiet");
+      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/stop-ds"+
+          EscQuote1 + " --quiet" + EscQuote2);
       w.println("  exit ${?}");
       w.println("  ;;");
       w.println("restart)");
-      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/stop-ds\" " +
-                "--restart --quiet");
+      w.println("  " + suString + "\"${INSTALL_ROOT}/bin/stop-ds"+
+          EscQuote1 + " --restart --quiet" + EscQuote2);
       w.println("  exit ${?}");
       w.println("  ;;");
       w.println("*)");

--
Gitblit v1.10.0