#!/bin/sh
#/**************************************************************************/
#/*                                                                        */
#/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/.         */
#/*                                                                        */
#/* NXMANAGER, NX protocol compression and NX extensions to this software  */
#/* are copyright of NoMachine. Redistribution and use of the present      */
#/* software is allowed according to terms specified in the file LICENSE   */
#/* which comes in the source distribution.                                */
#/*                                                                        */
#/* Check http://www.nomachine.com/licensing.html for applicability.       */
#/*                                                                        */
#/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
#/*                                                                        */
#/* All rights reserved.                                                   */
#/*                                                                        */
#/**************************************************************************/

# Updating this values, remeber to align
# Makefile - config.nxmanager.pl - ../setup/nxmanager
VERSION="3.5.0-4"
PRODUCT_NAME="NX Server Manager $VERSION"
CONFIG_VERSION="2.0"

INSTALL="700"
UPDATE="701"
UNINSTALL="702"
WARNING="703"
ERROR="704"

SHOWUPDATEINFO="no"
SHOWCUPSINFO="no"
SHOWWARNINFO="no"

PREFIX="NX>"

NODE_ROOT="/usr/NX"

PACKAGE="manager"

currentTime=`date +'%a %b %d %T %Y'`
ApacheUname=""
ApacheGname=""
SHOWWARNINFO="no"

INSTALLOG="$NODE_ROOT/var/log/install"
UPDATELOG="$NODE_ROOT/var/log/update"
UNINSTALLOG="$NODE_ROOT/var/log/uninstall"
LOGFILE=""

CONFIG_FILE="$NODE_ROOT/etc/manager.cfg"
CONF_FILE="$NODE_ROOT/etc/manager.conf"
MANAGER="$NODE_ROOT/var/db/manager"

if [ -x /bin/rm ];
then
  RMCOMMAND="/bin/rm"
else 
  RMCOMMAND="rm"
fi

if [ -x /bin/cp ];
then
  CPCOMMAND="/bin/cp"
else
  CPCOMMAND="cp"
fi

if [ -x /bin/mv ];
then
  MVCOMMAND="/bin/mv"
else
  MVCOMMAND="mv"
fi

if [ -x /bin/ln ];
then
  LNCOMMAND="/bin/ln"
else
  LNCOMMAND="ln"
fi

if [ "x$system" = "x" -a -f /etc/release ];
then
  system=solaris
  if [ -x  /usr/bin/nawk ]
  then
    AWKCOMMAND="/usr/bin/nawk"
   elif [ -x /usr/xpg4/bin/awk ]
   then
     AWKCOMMAND="/usr/xpg4/bin/awk"
   elif [ -x /usr/bin/awk ] 
  then
    AWKCOMMAND="/usr/bin/awk"
  else
    AWKCOMMAND="awk"
  fi
else
  if [ -x /usr/bin/awk ];
  then
    AWKCOMMAND="/usr/bin/awk"
  else
    AWKCOMMAND="awk"
  fi
fi




# printMsg() procedure take argument : txt 
# echo(echo and log) log (only log) nolog (only echo)
# default - using PROCESS - WARNINGS/ERRORS
#

printMsgNoDot () {
  #txt of the message
  TXT=$1
  if [ "$TXT" = "" ];
  then
    return 0;
  fi

  if [ "$PROCESS" = "" ];
  then
    PROCESS="$ERROR"
  fi

  case "$2" in
    "warn"  ) process="$WARNING";TXT="WARNING: $TXT";logtype="show";SHOWWARNINFO="yes";;
    "error" ) process="$ERROR";TXT="ERROR: $TXT";logtype="show";;
    "cmd"   ) process="$PROCESS";logtype="log";;
    "nolog" ) process="$PROCESS";logtype="nolog";;
    ""      ) process="$PROCESS";logtype="show";;
    *       ) process="$PROCESS";;
  esac

  if [ "$LOGFILE" = "" ];
  then
    logtype="nolog";
  fi

  case "$logtype" in
   "nolog"   ) echo "$PREFIX $PROCESS $TXT";;
   "log"     ) echo "$PREFIX $PROCESS $TXT" >> $LOGFILE;;
   "show"    ) echo "$PREFIX $PROCESS $TXT";echo "$PREFIX $PROCESS $TXT" >> $LOGFILE;;
   ""        ) echo "$PREFIX $PROCESS $TXT";;
   *         ) echo "$PREFIX $PROCESS $TXT";;
 esac

}

printMsg () {
  #txt of the message
  TXT=$1
  if [ "$TXT" = "" ];
  then
    return 0;
  fi

  if [ "$PROCESS" = "" ];
  then 
    PROCESS="$ERROR"
  fi

  case "$2" in
    "warn"  ) process="$WARNING";TXT="WARNING: $TXT";logtype="show";SHOWWARNINFO="yes";;
    "error" ) process="$ERROR";TXT="ERROR: $TXT";logtype="show";;
    "cmd"   ) process="$PROCESS";logtype="log";;
    "nolog" ) process="$PROCESS";logtype="nolog";;
    ""      ) process="$PROCESS";logtype="show";;
    *       ) process="$PROCESS";;    
  esac

  if [ "$LOGFILE" = "" ];
  then
    logtype="nolog";
  fi

  case "$logtype" in
    "nolog"   ) echo "$PREFIX $PROCESS $TXT.";;
    "log"     ) echo "$PREFIX $PROCESS $TXT." >> $LOGFILE;;
    "show"    ) echo "$PREFIX $PROCESS $TXT.";echo "$PREFIX $PROCESS $TXT." >> $LOGFILE;;
    ""        ) echo "$PREFIX $PROCESS $TXT.";;
    *         ) echo "$PREFIX $PROCESS $TXT.";;
  esac

}

LastCommand=""

action="$1"

runCommand () {

  if [ "$1" = "" ];
  then 
    return 1
  else 
    command="$1"
  fi 

  if [ "$2" = "" ];
  then
    return 1
  else
    message="$2"
  fi
  
  if [ "$3" = "" ];
  then
    important="NO"
  else
    important="YES"
  fi

  printMsg "Running: $command" "cmd"
  outCommand=`/bin/bash -c "$command" 2>&1`
  if [ $? != 0 ];
  then
    if [ "$important" = "YES" ];
    then
      if [ "x$outCommand" != "x" ];
      then 
        printMsg "Output: $outCommand" "error"
      fi
      printMsg "$message" "error"
      exit 1
    else
      if [ "x$outCommand" != "x" ];
      then 
        printMsg "Output: $outCommand" "cmd"
      fi
      printMsg "$message" "warn"
    fi
  else
    if [ "x$outCommand" != "x" ];
    then 
      printMsg "Output: $outCommand" "cmd"
    fi
    printMsg "Result: OK" "cmd"
  fi

}

createLogdirectory () {
  if [ ! -d "$NODE_ROOT/var/log" ];
  then
    command="mkdir -p '$NODE_ROOT/var/log'"
    outCommand=`/bin/bash -c "$command" 2>&1`
    if [ $? != 0 ];
    then
      LOGFILE=""
      printMsg "Cannot create log directory: $NODE_ROOT/var/log" "warn"
      printMsg "All informations are being redirect to stdout"
    fi
  fi
}

startLog () {

  if [ -f $LOGFILE ];
  then
    command="echo ' ' >> $LOGFILE"
  else 
    command="echo ' ' > $LOGFILE"
  fi
  outCommand=`/bin/bash -c "$command" 2>&1`
  if [ "$?" != 0 ];
  then
    tmp="$LOGFILE"
    LOGFILE=""
    printMsg "Cannot create logfile: $tmp:" "warn"
    printMsg "'$outCommand'" "warn"
    printMsg "All informations are being redirect to stdout" "warn"
  fi
  if [ "$LOGFILE" != "" ];
  then
    command="echo '' | tee -a $LOGFILE 2>&1"
    outCommand=`/bin/bash -c "$command" 2>&1` 
    if [ "$?" != 0 ];
    then
      tmp="$INSTALLOG"
      LOGFILE=""
      printMsg "Cannot initialize logfile: $tmp:" "warn"
      printMsg "Command: '$command'" "warn"
      printMsg "'$outCommand'" "warn"
      printMsg "All informations are being redirect to stdout" "warn"
    fi
  fi
}

makeNXConfig () {

if [ ! -f "$CONFIG_FILE" ];
then
  if [ -f "$CONFIG_FILE.update" ];
  then
    printMsg "Creating configuration in $CONFIG_FILE"
    runCommand "$CPCOMMAND -f '$CONFIG_FILE.update' '$CONFIG_FILE'" "Cannot copy '$CONFIG_FILE.update' to '$CONFIG_FILE'" "error"
    $RMCOMMAND -f $CONFIG_FILE.update
  elif [ -f "$CONFIG_FILE.sample" ];
  then
    printMsg "Creating configuration in $CONFIG_FILE.sample"
    runCommand "$CPCOMMAND -f '$CONFIG_FILE.sample' '$CONFIG_FILE'" "Cannot copy '$CONFIG_FILE.sample' to '$CONFIG_FILE'" "error"
  fi
fi

if [ ! -f "$CONF_FILE" ];
then
  if [ -f "$CONF_FILE.update" ];
  then
    printMsg "Creating configuration in $CONF_FILE"
    runCommand "$CPCOMMAND -f '$CONF_FILE.update' '$CONF_FILE'" "Cannot copy '$CONF_FILE.update' to '$CONF_FILE'" "error"
    $RMCOMMAND -f $CONF_FILE.update
  elif [ -f "$CONF_FILE.sample" ];
  then
    printMsg "Creating configuration in $CONF_FILE.sample"
    runCommand "$CPCOMMAND -f '$CONF_FILE.sample' '$CONF_FILE'" "Cannot copy '$CONF_FILE.sample' to '$CONF_FILE'" "error"
  fi
fi

}

procedureInstallManager () {

  if [ ! -f "$CONF_FILE" ];
  then
      if [ -f "$CONF_FILE.backup" ];
      then
        $CPCOMMAND -f $CONF_FILE.backup $CONF_FILE 
      fi
  fi

  if [ -f "$CONFIG_FILE" ];
  then
    procedureUpdateManager
    return 0
  elif [ -f "$CONFIG_FILE.backup" ];
  then
    $CPCOMMAND -f $CONFIG_FILE.backup $CONFIG_FILE 
    procedureUpdateManager
    return 0
  fi

  LOGFILE="$INSTALLOG"
  startLog
  PROCESS="$INSTALL"
  makeNXConfig

  printMsg "Installing: NX Server Manager at: $currentTime"
  printMsg "Install log is: $LOGFILE"
  
  checkNXConfiguration
  set_NXServerManager_permission
  
  if [ $SHOWWARNINFO = "yes" ];
  then
    printMsg "Installation of NX Server Manager was completed with warnings"
   else
    printMsg "Version '$VERSION' installation completed"
  fi
  
}

procedureUninstallManager () {

  LOGFILE="$UNINSTALLOG"
  createLogdirectory
  startLog
  PROCESS="$UNINSTALL"
  printMsg "Unistalling: NX Server Manager at: $currentTime"
  printMsg "Unistall log is: $LOGFILE"
  
  MakeDBBackup
  MakeConfBackup
  reset_NXServerManager_permission

  printMsg "Uninstallation of version: $VERSION completed" 
}

convertNXconfigToCamelCaseFormat () {
$AWKCOMMAND '
function camelCase(key) {
  comment = 0
  if (substr(key, 1,1) == "#") {
    comment = 1
    key = substr(key, 2)
  }
  if (length(key)) {
    split (key, tab, "_")
    i = 1
    key = ""
    keyUpper["SSH"]   = "SSH"
    keyUpper["DB"]    = "DB"
    keyUpper["NX"]    = "NX"
    keyUpper["NXSSH"] = "NXSSH"
    keyUpper["HTTPD"] = "HTTPD"

    while (length(tab[i])) {
      if(!(tab[i] in keyUpper)) {
        if (tab[i] == "NXMANAGER") {
          tab[i] = "NXManager"
         } else {
          tab[i] = tolower(tab[i])
        }
      }
      key = sprintf ("%s%s%s", key , toupper(substr(tab[i],1,1)) , substr(tab[i],2))
      i++
    }
  }
  if (comment) {
    key = sprintf("#%s" , key)
  }
  return key
}
{
FS=" |="
FS=" |="
if($0 ~ /^([ \t]*([^=;]+)[ \t]*=[ \t]*"([^"]*))".*/) {
  if($1 ~ /(([A-Z])+_+)/) {
    print camelCase($1) " = " $2 " "  $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
  } else { 
    if ($2 ~ /(([A-Z])+_+)/) { 
      print $1 " " camelCase( $2) " = "  $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9
    } else {
      print $0
    }
  } 
} else {
  print $0
}
}' < $CONFIG_FILE >  $CONFIG_FILE.tmp

sed 's/=[ ]*/= /g' $CONFIG_FILE.tmp  > $CONFIG_FILE
sed 's/[ ]*$//g' $CONFIG_FILE > $CONFIG_FILE.tmp
cat $CONFIG_FILE.tmp > $CONFIG_FILE
$RMCOMMAND -f $CONFIG_FILE.tmp

}


updateConfigFileVersion ()
{
if grep "ConfigFileVersion" "$CONFIG_FILE" > /dev/null
then
    grep "ConfigFileVersion" "$CONFIG_FILE" | grep "$CONFIG_VERSION" 1>/dev/null
    if [ "$?" != 0 ];
    then
      sed -e 's|^ConfigFileVersion.*$|ConfigFileVersion = "2.0"|g' $CONFIG_FILE > $CONFIG_FILE.tmp
      $CPCOMMAND -f $CONFIG_FILE.tmp $CONFIG_FILE
      $RMCOMMAND -f $CONFIG_FILE.tmp

    fi
else

echo "
#
# Set config file format version.
#
ConfigFileVersion = "2.0"

" >> $CONFIG_FILE
$RMCOMMAND -f $CONFIG_FILE.tmp

fi
#sed -e 's|^ConfigFileVersion.*$|ConfigFileVersion = "2.0"|g' $CONFIG_FILE.tmp > $CONFIG_FILE

}


procedureUpdateManager () {

  makeNXConfig
  if [ ! -f "$CONFIG_FILE" ];
  then
    printMsgNoDot "Initialization failed. Cannot open file: $CONFIG_FILE" "error"
    printMsgNoDot "No such file or directory. Please try to fix the problem by" "error"
    printMsgNoDot "running: $NODE_ROOT/scripts/setup/nxmanager --install." "error"
    exit 1
  fi

  LOGFILE="$UPDATELOG"
  createLogdirectory
  startLog
  PROCESS="$UPDATE"
  printMsg "Updating: NX Server Manager at: $currentTime"
  printMsg "Update log is: $LOGFILE"
  checkNXConfiguration
#  convertNXconfigToCamelCaseFormat
  set_NXServerManager_permission

  printMsg "Version '$VERSION' update completed"
}

procedureUsageManager () {

echo "
Usage: `basename $0` ACTION

Actions:

--install      Run the NX Server Manager install procedure to set
               ownership and file permissions

--update       Run the NX Server Manager update procedure to set 
               ownership and file permissions, included ownership
               of the files accessed by the Apache user according 
               to the values set for ApacheUname and ApacheGname
               in the manager configuration file 

--uninstall    Run the NX Server Manager uninstall procedure to make 
               a backup of nxmanager DBs and configuration files and
               to restore ownership and file permissions 
	       
--help         Show this message
"

}

set_NXServerManager_permission () {

  get_apache_uname
  get_apache_gname
  
  if [ ! -d "$NODE_ROOT/etc" ];
  then
    printMsg "Directory '$NODE_ROOT/etc' does not exists" "error"
  else
    runCommand "chown nx:root '$NODE_ROOT/etc'" "Cannot set ownership for: '$NODE_ROOT/etc' to: 'nx:root'"
  fi

  if [ ! -d "$NODE_ROOT/var" ];
  then
    printMsg "Directory '$NODE_ROOT/var' does not exists" "error"
  else
    runCommand "chown nx:root '$NODE_ROOT/var'" "Cannot set ownership for: '$NODE_ROOT/var' to: 'nx:root'"
  fi

  if [ ! -d "$NODE_ROOT/var/db" ];
  then
    printMsg "Directory '$NODE_ROOT/var/db' does not exists" "error"
  else
    runCommand "chown nx:root '$NODE_ROOT/var/db'" "Cannot set ownership for: '$NODE_ROOT/var/db' to: 'nx:root'"
  fi

  if [ ! -d "$NODE_ROOT/share" ];
  then
    printMsg "Directory '$NODE_ROOT/share' does not exists" "error"
  else
    runCommand "chown -R $ApacheUname:$ApacheGname '$NODE_ROOT/share'" "Cannot set ownership for: '$NODE_ROOT/share' to: '$ApacheUname:$ApacheGname'"
    runCommand "chmod -R ug+rx '$NODE_ROOT/share'" "Cannot set permissions for: '$NODE_ROOT/share' to: 'ug+rx'"
  fi

  if [ ! -d "$MANAGER" ];
  then
    printMsg "Directory '$MANAGER' does not exists" "error"
  else
    runCommand "chown -R $ApacheUname:$ApacheGname '$MANAGER'" "Cannot set ownership for: '$MANAGER' to: '$ApacheUname:$ApacheGname'"
    runCommand "chmod 0760 '$MANAGER'" "Cannot set permissions for: '$MANAGER' to: '0760'"
  fi

  if [ ! -f "$NODE_ROOT/etc/nodes.db" ];
  then
    printMsg "File '$NODE_ROOT/etc/nodes.db' does not exists" "warn"
  else
    runCommand "chown nx:root '$NODE_ROOT/etc/nodes.db'" "Cannot set ownership for: '$NODE_ROOT/etc/nodes.db' to: 'nx:root'"
  fi

  if [ -f "$MANAGER/nxmanager_conf.db" ];
  then
    runCommand "chmod 0640 '$MANAGER/nxmanager_conf.db'" "Cannot set permissions for: '$MANAGER/nxmanager_conf.db' to: '0640'"
  fi

  if [ -f "$MANAGER/nxmanager_session.db" ];
  then
    runCommand "chmod 0640 '$MANAGER/nxmanager_session.db'" "Cannot set permissions for: '$MANAGER/nxmanager_session.db' to: '0640'"
  fi

  if [ ! -d "$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp" ];
  then
    printMsg "Directory '$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp' does not exists" "warn"
  else
    runCommand "chown -R $ApacheUname:$ApacheGname '$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp'" "Cannot set ownership for:
    '$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp' to: '$ApacheUname:$ApacheGname'"
    runCommand "chmod -R ug+rwx '$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp'" "Cannot set permissions for:
    '$NODE_ROOT/share/htdocs/nxmanager/images/stats/tmp' to: 'ug+rwx'"
  fi


  if [ ! -f "$CONFIG_FILE" ];
  then
    printMsg "File '$CONFIG_FILE' does not exists" "warn"
  else
    runCommand "chown $ApacheUname:$ApacheGname '$CONFIG_FILE'" "Cannot set ownership for: '$CONFIG_FILE' to: '$ApacheUname:$ApacheGname'"
  fi

  if [ ! -f "$CONF_FILE" ];
  then
    printMsg "File '$CONF_FILE' does not exists" "warn"
  else
    runCommand "chown $ApacheUname:$ApacheGname '$CONF_FILE'" "Cannot set ownership for: '$CONF_FILE' to: '$ApacheUname:$ApacheGname'"
  fi
  
}

reset_NXServerManager_permission () {

  if [ -d "$NODE_ROOT/share" ];
  then
    runCommand "chown -R root:root '$NODE_ROOT/share'" "Cannot set ownership for: '$NODE_ROOT/share' to: 'root:root'"
  fi

  if [ -d "$MANAGER" ];
  then
    runCommand "chown -R root:root '$MANAGER'" "Cannot set ownership for: '$MANAGER' to: 'root:root'"
  fi

  if [ -f "$CONFIG_FILE" ];
  then
    runCommand "chown root:root '$CONFIG_FILE'" "Cannot set ownership for: '$CONFIG_FILE' to: 'root:root'"
  fi



  if [ -f "$CONF_FILE" ];
  then
    runCommand "chown root:root '$CONF_FILE'" "Cannot set ownership for: '$CONF_FILE' to: 'root:root'"
  fi

  if [ -d "$MANAGER" ];
  then
    runCommand "chown -R root:root '$MANAGER'" "Cannot set ownership for: '$MANAGER' to: 'root:root'"
  fi
  
  if [ -f "$CONFIG_FILE.backup" ];
  then
    runCommand "chown -R root:root '$CONFIG_FILE.backup'" "Cannot set ownership for: '$CONFIG_FILE.backup' to: 'root:root'"
  fi

}

MakeDBBackup () {
  
  if [ -f "$MANAGER/nxmanager_conf.db" ];
  then
    printMsg "Saving database file to: $MANAGER/nxmanager_conf.db.backup"
    runCommand "$MVCOMMAND -f '$MANAGER/nxmanager_conf.db' '$MANAGER/nxmanager_conf.db.backup'" "Cannot move: '$MANAGER/nxmanager_conf.db' file to: '$MANAGER/nxmanager_conf.db.backup'" "error"
    runCommand "chmod 0640 '$MANAGER/nxmanager_conf.db.backup'" "Cannot set permissions for: '$MANAGER/nxmanager_conf.db.backup' to: '0644'"
  fi
  
  if [ -f "$MANAGER/nxmanager_session.db" ];
  then
    printMsg "Saving session database file to: $MANAGER/nxmanager_session.db.backup"
    runCommand "$MVCOMMAND -f '$MANAGER/nxmanager_session.db' '$MANAGER/nxmanager_session.db.backup'" "Cannot move: '$MANAGER/nxmanager_session.db' file to: '$MANAGER/nxmanager_session.db.backup'" "error"
    runCommand "chmod 0640 '$MANAGER/nxmanager_session.db.backup'" "Cannot set permissions for: '$MANAGER/nxmanager_session.db.backup' to: '0644'"
  fi

}

MakeConfBackup () {
  
  if [ -f "$CONFIG_FILE" ];
  then
    printMsg "Saving configuration file to: $CONFIG_FILE.backup"
    runCommand "$MVCOMMAND -f $CONFIG_FILE $CONFIG_FILE.backup" "Cannot move: '$CONFIG_FILE' file to: '$CONFIG_FILE.backup'" "error"
    runCommand "chmod 0640 '$CONFIG_FILE.backup'" "Cannot set permissions for: '$CONFIG_FILE.backup' to: '0644'"
  fi

  if [ -f "$CONF_FILE" ];
  then
    printMsg "Saving configuration file to: $CONF_FILE.backup"
    runCommand "$MVCOMMAND -f $CONF_FILE $CONF_FILE.backup" "Cannot move: '$CONF_FILE' file to: '$CONF_FILE.backup'" "error"
    runCommand "chmod 0640 '$CONF_FILE.backup'" "Cannot set permissions for: '$CONF_FILE.backup' to: '0644'"
  fi

}

fixOldConfigKey(){

  if   grep "SessionLogLevel" "$CONFIG_FILE" > /dev/null
  then
    continue;
   else
    sed 's/LogLevel/SessionLogLevel/g' $CONFIG_FILE > $CONFIG_FILE.tmp
    runCommand "$MVCOMMAND -f $CONFIG_FILE.tmp $CONFIG_FILE" "Cannot move '$CONFIG_FILE.tmp' file to '$CONFIG_FILE'." "error"
  fi

  if   grep '/usr/NX/var/db/nxmanager/nxmanager_conf.db' "$CONFIG_FILE" > /dev/null
  then
    sed 's|/usr/NX/var/db/nxmanager/nxmanager_conf.db|/usr/NX/var/db/manager/nxmanager_conf.db|g' $CONFIG_FILE > $CONFIG_FILE.tmp
    runCommand "$MVCOMMAND -f $CONFIG_FILE.tmp $CONFIG_FILE" "Cannot move '$CONFIG_FILE.tmp' file to '$CONFIG_FILE'." "error"
  fi


}


fixOldDirectoryDB(){

  if [ -d "$NODE_ROOT/var/db/nxmanager" ];
  then
    printMsg "Found $NODE_ROOT/var/db/nxmanager. Move '$MANAGER' dir to: '$NODE_ROOT/var/db/manager' "

    if [ -d "$MANAGER" ];
    then
      runCommand "$MVCOMMAND -f $NODE_ROOT/var/db/nxmanager/* $MANAGER" "Cannot move: '$NODE_ROOT/var/db/nxmanager' directory to: '$MANAGER'" "warn"
      $RMCOMMAND -rf "$NODE_ROOT/var/db/nxmanager"
    else
      runCommand "$MVCOMMAND -f $NODE_ROOT/var/db/nxmanager $MANAGER" "Cannot move: '$NODE_ROOT/var/db/nxmanager' directory to: '$MANAGER'" "error"
    fi
  fi
}


checkNXConfiguration () {

  printMsgNoDot "Checking NX Server Manager configuration using the"
  printMsg "$CONFIG_FILE file"
  fixOldDirectoryDB
  fixOldConfigKey

  grep "ConfigFileVersion" "$CONFIG_FILE" 1>/dev/null
  if [ "$?" != 0 ];
  then
      SHOWUPDATEINFO="yes"
      printMsg "Configuration file needs to be updated" "warn"
      printMsg "Copying original configuration to $CONFIG_FILE.backup" 
      $CPCOMMAND -f $CONFIG_FILE $CONFIG_FILE.backup
      printMsg "Creating new sample configuration file $CONFIG_FILE.sample"
      printMsg "Updating $CONFIG_FILE file" 
      convertNXconfigToCamelCaseFormat
      updateConfigFileVersion
  else
    grep "ConfigFileVersion" "$CONFIG_FILE" | grep "$CONFIG_VERSION" 1>/dev/null
    if [ "$?" != 0 ];
    then
      SHOWUPDATEINFO="yes"
      printMsg "Configuration file in $VERSION has changed" "warn"
      printMsg "Creating new sample configuration file $NODE_ROOT/etc/manager.sample" 
      updateConfigFileVersion
    fi
  fi

}

get_apache_uname () {

  ApacheUname=`grep '^\s*ApacheUname' /usr/NX/etc/manager.cfg | sed 's/ApacheUname = //' | sed 's/"//g' 2>&1`
  if [ "x$ApacheUname" = "x" ];
  then
    printMsg "Output: ApacheUname directive not found" "error"
    exit 1
  fi

}

get_apache_gname () {

  ApacheGname=`grep '^\s*ApacheGname' /usr/NX/etc/manager.cfg | sed 's/ApacheGname = //' | sed 's/"//g' 2>&1`
  #ApacheGname=${ApacheGname/ApacheGname = /}
  #ApacheGname=${ApacheGname//\"/}
  if [ "x$ApacheGname" = "x" ];
  then
    printMsg "Output: ApacheGname directive not found" "error"
    exit 1
  fi
  
}

if [ "$action" = "--install" ];
then
  procedureInstallManager
elif [ "$action" = "--uninstall" ];
then
  procedureUninstallManager
elif [ "$action" = "--update" ];
then
  procedureUpdateManager
elif [ "$action" = "--help" ];
then
  procedureUsageManager
elif [ "$action" = '' ];
then
  printMsg "Please specify an action"
  procedureUsageManager
else
  printMsg "ERROR: Unknown action '$action'"
  procedureUsageManager
fi

if [ -f /etc/SuSE-release ];
then
  system=suse
fi

if [ -f /etc/redhat-release ];
then
  system=redhat
fi

if [ -f /etc/mandrake-release ];
then
  system=mandrake
fi

if [ -f /etc/debian_version ];
then
  system=debian
fi

if [ -f /etc/fedora-release ];
then
  system=fedora
fi

if [ "x$system" = "x" -a -f /etc/release ];
then
  system=solaris
fi
