#!/bin/sh
# ####################################################################
# Exceed Connection Server 13.7
# Copyright (c) 1997-2009 Open Text Corporation. All Rights Reserved.
# ####################################################################
# Migration Tool
# $Revision: 10408 $
#######################################################################

. ./sys/msg.txt

setup_awk_echo()
{
  AWK=awk
  ECHO=echo

  case "`uname`" in
    AIX )     
    ;;
  
    HP-UX )   
    ;;
  
    Linux )   
      ECHO="echo -e"
      AWK="awk --traditional"
    ;;
  
    OSF1 )    
    ;;
  
    SunOS )
      AWK=nawk
    ;;
  esac

  ECHO=echo
}

check_params()
{
  oldEoDHome=$1/
  newEoDHome=$2/
  logfile=$3
  newFontDir=$4
  excludedFontDirs="$5"
}

init_basic_file_directory_names()
{
  oldConfDir=${oldEoDHome}conf/
  oldUsersDir=${oldConfDir}users/
  oldAdminDir=${oldConfDir}admin/

  newBinSysDir=${newEoDHome}bin/sys/
  newConfDir=${newEoDHome}conf/
  newUsersDir=${newConfDir}users/
  newAdminDir=${newConfDir}admin/
  newAdminXstartDir=${newAdminDir}Xstart/
  newAdminXconfigDir=${newAdminDir}Xconfig/
  newAdminCommonDir=${newAdminXconfigDir}Common/
  newAdminTemplatesDir=${newAdminDir}Templates/
  newTemplatesXsFile=${newAdminTemplatesDir}migrate.xs
}

init_templates_directories_names()
{
  newAdminTemplatesUserDir=${newAdminTemplatesDir}User/
  newAdminTemplatesUserXstartDir=${newAdminTemplatesUserDir}Xstart/
  newAdminTemplatesUserXConfigDir=${newAdminTemplatesUserDir}Xconfig/
  newAdminTemplatesUserXConfigCommonDir=${newAdminTemplatesUserXConfigDir}Common/
}

init_mig_files()
{
  awkFile=${newBinSysDir}migprofile.awk
  awkFile2=${newBinSysDir}migecscfg.awk
  awkFile3=${newBinSysDir}migecscfg2clustercfg.awk
  awkFile4=${newBinSysDir}migcfg.awk
  awkFile5=${newBinSysDir}migfontpaths.awk

  migFileSh=${newBinSysDir}migfile.sh
}

getOldVer()
{
  oldVer="5"

  migVer="${oldEoDHome}bin/sys/migver"
	
  if [ -r ${migVer} ] ; then
    oldVer=`cat ${migVer}`
  fi
}

migrateOldDirToNewDir()
{
  if [ -d $1 ] ; then
    if [ ! -d $2 ] ; then 
     mkdir $2
    fi
  
    modtndHere=`pwd`
    cd $1
    
    for f in * 
    do 
      oldFile=$1$f
      newFile=$2$f
      
      if [ -f "${oldFile}" ] ; then
        ${migFileSh} $1 $2 "$f" "${oldVer}_$f"
      elif [ -d "${oldFile}" ] ; then
        migrateOldDirToNewDir ${oldFile}/ ${newFile}/
      else
        msg="${oldFile} is unknown"
      fi
    done		
    
    cd ${modtndHere}
  fi
}

migThisCfg()
{
  oldCfgFile=$1$3
  newCfgFile=$2$3
  
  if [ -f "${newCfgFile}" ] ; then
    newCfgFile=$2${oldVer}_$3
  fi

  if [ -f "${oldCfgFile}" ] ; then
    if [ -f "${newCfgFile}" ] ; then
      newCfgFile=$2${oldVer}_$3
    fi
	
    ${AWK} -f ${awkFile4} -v oldCfgDir=$1 -v newCfgDir=$2 -v cfgFile="${newCfgFile}" -v migFile=${migFileSh} -v oldVer=${oldVer} < "${oldCfgFile}"
    msg="${AWK} -f ${awkFile4} -v oldCfgDir=$1 -v newCfgDir=$2 -v cfgFile=${newCfgFile} -v migFile=${migFileSh} -v oldVer=${oldVer} < ${oldCfgFile}"
			
    mig2ThisCfg "${newCfgFile}"	

  else
    msg="${oldCfgFile} does not exist"
  fi 
}

migrateThisXconfigFile()
{
  oldCfgDir=$1
  newCfgDir=$2
  cfgName=$3
	
  oldCfgPathName=${oldCfgDir}${cfgName}
  newCfgPathName=${newCfgDir}${cfgName}

  cmp "${oldCfgPathName}" "${newCfgPathName}" > /dev/null 2>&1
	
  if [ ! $? = 0 ] ; then
    migThisCfg "${oldCfgDir}" "${newCfgDir}" "${cfgName}"
  fi
}

migXconfig()
{
  xcfg="Xconfig"
  oldConfigDir=$1${xcfg}/
  newConfigDir=$2${xcfg}/
  owner=$3

  migXconfigHere=`pwd`
	
  if [ -d ${oldConfigDir} ] ; then
    ${ECHO} "      ${owners} Xconfig..."
		
    cd ${oldConfigDir}
		
    for cfgFile in *
    do
      migrateThisXconfigFile ${oldConfigDir} ${newConfigDir} "${cfgFile}"
		done
		
    cd ${migXconfigHere}
	fi	
}

migXstart()
{
  oldUserDir=$1
  newUserDir=$2
  owner=$3
  srcXstart="Xstart"
  dstXstart="Xstart"
	
  srcDir=${oldUserDir}${srcXstart}/	
  dstDir=${newUserDir}${dstXstart}/
	
  if [ -d ${srcDir} ] ; then 
    ${ECHO} "      ${owners} ${srcXstart}..."
    migrateOldDirToNewDir ${srcDir} ${dstDir}
  fi
}

migProfile()
{
  oldProfDir=$1 
  profile=$2
  newUserDir=$3

  newUserXstartDir=${newUserDir}Xstart/
  newUserXconfigDir=${newUserDir}Xconfig/
  newUserCommonDir=${newUserXconfigDir}Common/

  oldCfgFile=${oldProfDir}ewebhost.cfg

  newCfgFile=${newUserXconfigDir}${profile}.cfg
  
  if [ -f ${newCfgFile} ] ; then
    newCfgFile=${newUserXconfigDir}${oldVer}_${profile}.cfg
  fi
  
  newProfileXsFile=${newUserXstartDir}${profile}.xs

  if [ -f ${newProfileXsFile} ] ; then
    newProfileXsFile=${newUserXstartDir}${oldVer}_${profile}.xs
  fi
  
  # ##################################################################
  # Migrate ${oldCfgFile} as ${newCfgFile}
  # ##################################################################

  if [ -f ${oldCfgFile} ] ; then
    ${AWK} -f ${awkFile} -v profName=${profile} -v templateXs=${newTemplatesXsFile} -v xsFile=${newProfileXsFile} -v cfgFile=${newCfgFile} -v commonDir=${newUserCommonDir} -v migFile=${migFileSh} -v profDir=${oldProfDir} < ${oldCfgFile}
    msg="${AWK} -f ${awkFile} -v profName=${profile} -v templateXs=${newTemplatesXsFile} -v xsFile=${newProfileXsFile} -v cfgFile=${newCfgFile} -v commonDir=${newUserCommonDir} -v migFile=${migFileSh} -v profDir=${oldProfDir} < ${oldCfgFile}"

    mig2ThisCfg ${newCfgFile}

  else
    msg="${oldCfgFile} does not exist"
  fi
}

addThisKey()
{
  key=$1
  val=$2
  cfgFile=$3
	
  tmp=`grep -i "${key}=" ${cfgFile}`
	
  if [ ${key} = "${key}${tmp}"  ] ; then
    echo ${key}=${val} >> ${cfgFile}
  fi
}

migSettingsCfg()
{
  # ##################################################################
  # Migrate settings.cfg 
  # ##################################################################

  oldUserDir=$1
  newUserDir=$2  
  settingsCfg=$3

  oldUserSettingsCfg=${oldUserDir}${settingsCfg}
  newUserSettingsCfg=${newUserDir}${settingsCfg}

  if [ -f ${oldUserSettingsCfg} ] ; then 
    cp -p ${oldUserSettingsCfg} ${newUserSettingsCfg}
    addThisKey "CanEditXstart" "1" ${newUserSettingsCfg}
    addThisKey "CrashRecovery" "1" ${newUserSettingsCfg}
    addThisKey "ActiveOnSuspend" "1" ${newUserSettingsCfg}
		
    msg="cp -p ${oldUserSettingsCfg} ${newUserSettingsCfg}"
  else
    msg="${oldUserSettingsCfg} does not exist"
  fi
}

mig2ThisCfg()
{
  cfgFile=$1

  if [ -f "${cfgFile}" ] ; then
    cfgFileBak=${cfgFile}.bak
    mv "${cfgFile}" "${cfgFileBak}" 

    ${AWK} -f "${awkFile5}" -v cfgFile="${cfgFile}" -v eFDirs="${excludedFontDirs}" -v aFDirs="${allFontDirs}" -v adminXconfigDir="${newAdminXconfigDir}" < "${cfgFileBak}"
    msg="${AWK} -f ${awkFile5} -v cfgFile=${cfgFile} -v eFDirs=${excludedFontDirs} -v aFDirs=${allFontDirs} -v adminXconfigDir=${newAdminXconfigDir} < ${cfgFileBak}"
		
    if [ -f "${cfgFile}" -a -w "${cfgFileBak}" ] ; then
      rm "${cfgFileBak}"
    fi
  else
    msg="${cfgFile} does not exist"
  fi
}

copy_UserTemplateUserFiles()
{
  # ##################################################################
  # Copying template user files to each non-admin user
  # ##################################################################

  if [ ! ${newUserCommonDir} = ${newAdminCommonDir} ] ; then
#   cp -p ${newAdminTemplatesUserXstartDir}*  ${newUserXstartDir} 					> /dev/null 2>&1
#   cp -p ${newAdminTemplatesUserXConfigDir}* ${newUserXconfigDir}					> /dev/null 2>&1
    cp -p ${newAdminTemplatesUserXConfigCommonDir}*.kbf ${newUserCommonDir} > /dev/null 2>&1
  fi
}

copy_old_user_common_directory()
{
  xconfigCommon="Xconfig/Common"
	
  thisOldUserCommonDir="$1${xconfigCommon}"
  thisNewUserXconfigDir="$2Xconfig"
	
  cp -pr "${thisOldUserCommonDir}" "${thisNewUserXconfigDir}" 	> /dev/null 2>&1
}

init_migUser()
{
  if [ ! -d ${newUserDir} ] ; then 
    mkdir ${newUserDir}
  fi

  migSettingsCfg ${oldUserDir} ${newUserDir} "settings.cfg"
	
  oldUserProfilesDir=${oldUserDir}profiles/

  newUserXstartDir=${newUserDir}Xstart/
  newUserXconfigDir=${newUserDir}Xconfig/
  newUserCommonDir=${newUserXconfigDir}Common/

  # ##################################################################
  # Create user directories for new file structure
  # #################################################################

  for dir in ${newUserDir} ${newUserXconfigDir} ${newUserCommonDir} ${newUserXstartDir}
  do
    if [ ! -d ${dir} ] ; then
      mkdir ${dir}    
      msg="mkdir  ${dir}"
    else
      msg="${dir} already exists"
    fi
  done
}

migrate_4_5_profiles()
{
  # ##################################################################
  # Loop to do all profile specific functions for all users 
  # ##################################################################
		
  if [ -d ${oldUserProfilesDir} ] ; then
    cd ${oldUserProfilesDir}
		
    ${ECHO}
    ${ECHO} "      ${owners} profiles:"
		
    for profile in *
    do 
      oldUserProfDir=${oldUserProfilesDir}${profile}/
		
      if [ -d ${oldUserProfDir} ] ; then
        ${ECHO} "        ${profile}"
        migProfile ${oldUserProfDir} ${profile} ${newUserDir}
      fi  
    done
  fi
}

migUser()
{
  oldUserDir=$1
  newUserDir=$2
  owners=$3

  init_migUser
  copy_UserTemplateUserFiles
	
  if [ ${oldVer} = "4.5" ] ; then
    migrate_4_5_profiles	
  else
    migXconfig ${oldUserDir} ${newUserDir} ${owners}
    migXstart ${oldUserDir} ${newUserDir} ${owners}
    ${ECHO}
  fi
}

set_proper_permission_for_this_user_dir()
{
  thisUser="$1"
  groupFile="_this_user_groups"
	
  `groups ${thisUser} > ${groupFile} 2>&1`		
  rootGroup=`grep -c "root" ${groupFile}`
  rm -f ${groupFile}
	
  if [ "${rootGroup}" = "0" ] ; then
    permBits="0770"
  else
    permBits="0755"
  fi
	
  chmod ${permBits} ${newUserDir}
}

migUsers()
{
  if [ ! -d ${newConfDir} ] ; then
    mkdir ${newConfDir}
    msg="mkdir ${newConfDir}"
  else
    msg="${newConfDir} already exists"
  fi

  if [ ! -d ${newUsersDir} ] ; then
    mkdir ${newUsersDir}
    msg="mkdir ${newUsersDir}"
  else
    msg="${newUsersDir} already exists"
  fi

  cd ${oldUsersDir}

  for user in *
  do
    oldUserDir=${oldUsersDir}${user}/
    newUserDir=${newUsersDir}${user}/

    copy_old_user_common_directory ${oldUserDir} ${newUserDir}
    migUser ${oldUserDir} ${newUserDir} "${user}'s"
    set_proper_permission_for_this_user_dir ${user} ${newUserDir}
  done
}

processDataStore()
{
  dsdKey="EoDDataStoreDir"
  dspKey="EoDDataStorePassword"
	
  eoddatastoredir=`grep -i ${dsdKey} ${oldEodCfg}`
  eoddatastorepassword=`grep -i ${dspKey} ${oldEodCfg}`
}

addDSWarningToLogFile()
{
  if [ -r ${data_store_warning} ] ; then
    ${ECHO} "${WARN} ${DS_WARNING2}" >> "${logfile}"
    ${ECHO} "${WARN} ${eoddatastoredir}"	>> "${logfile}"
    ${ECHO} "${WARN} ${eoddatastorepassword}" >> "${logfile}"		
  fi
}

process_migecscfg_awk()
{
  newEodCfg=${newAdminDir}/node.cfg.tmp
  newEodCfgBak=${newEodCfg}.backup
		
#	sshcmd=`grep -i "EoDSSHCommand" ${oldEodCfg}`
		
  eodcmport=`grep -i "EoDCMPort" ${oldEodCfg}`
		
  eodfirstdisplay=`grep -i "EoDFirstDisplay" ${oldEodCfg}`
		
  processDataStore
		
  eodcmporttmppath="${newAdminDir}/${eodcmporttmp}"
  eodfirstdisplaytmppath="${newAdminDir}/${eodfirstdisplaytmp}"
		
  if [ -f ${newEodCfg} ] ; then
    mv -f ${newEodCfg} ${newEodCfgBak}
		
    ${AWK} -f ${awkFile2} -v cfgFile="${newEodCfg}" -v oldHome="${oldEoDHome}" -v EoDCMPort="${eodcmport}" -v EoDFirstDisplay="${eodfirstdisplay}" -v EoDDataStoreDir="${eoddatastoredir}" -v EoDDataStorePassword="${eoddatastorepassword}" -v DSWarning="${data_store_warning}"  -v EoDCMPortTmp=${eodcmporttmppath} -v EoDFirstDisplayTmp=${eodfirstdisplaytmppath} < ${newEodCfgBak}
		
    addDSWarningToLogFile
			
    rm ${newEodCfgBak}
	fi
}

init_keys_for_old_cluster_file()
{
  cmssl=`grep -i ${eodsslkey} ${oldEodCfg}`
  cmlog=`grep -i "EoDCMLog" ${oldEodCfg}`
  defxconfig=`grep -i "EoDCMDefXconfig" ${oldEodCfg}`	
  cmauth=`grep -i "EoDCMAuth=" ${oldEodCfg}`
  cmpwprompt=`grep -i "EoDCMAuthPAMPwdPrompt" ${oldEodCfg}`

  if [ ${oldVer} = "4.5" ] ; then
    serverlog=`grep -i "EodServerLog=" ${oldEodCfg}`
    htmllog=`grep -i "EoDHTMLLog=" ${oldEodCfg}`
	fi
}

init_keys_for_cluster_file()
{
  oldClusterCfg=${oldAdminDir}/cluster.cfg

  cmssl=`grep -i ${eodsslkey} ${oldClusterCfg}`
  cmlog=`grep -i "EoDCMLog=" ${oldClusterCfg}`
  defxconfig=`grep -i "EoDCMDefXconfig" ${oldClusterCfg}`	
  cmauth=`grep -i "EoDCMAuth=" ${oldClusterCfg}`
  cmpwprompt=`grep -i "EoDCMAuthPAMPwdPrompt" ${oldClusterCfg}`

  eodloadbalancing=`grep -i "EoDLoadBalancing" ${oldClusterCfg}`
  ecsusekerberos=`grep -i "ECSUseKerberos" ${oldClusterCfg}`		
  eodcmpreferredpcm=`grep -i "EoDCMPreferredPCM" ${oldClusterCfg}`			
}

process_migecscfg2clustercfg_awk()
{
  newClusterCfg=${newAdminDir}/cluster.cfg.tmp
  newClusterCfgBak=${newClusterCfg}.backup
		
  if [ ${oldVer} = "5" -o ${oldVer} = "4.5" ] ; then 
    init_keys_for_old_cluster_file
  else
    init_keys_for_cluster_file	
  fi
		
  if [ -f ${newClusterCfg} ] ; then
    mv -f ${newClusterCfg} ${newClusterCfgBak}
		
    ${AWK} -f ${awkFile3} -v useKerberos="${ecsusekerberos}" -v loadBalance="${eodloadbalancing}" -v cfgFile="${newClusterCfg}" -v CMDefXconfig="${defxconfig}" -v CMSSL="${cmssl}" -v CMLog="${cmlog}" -v CMAuth="${cmauth}" -v CMPWPrompt="${cmpwprompt}" -v OldVer="${oldVer}" -v ServerLog="${serverlog}" -v HTMLLog="${htmllog}" -v PreferredPCM="${eodcmpreferredpcm}"  < ${newClusterCfgBak}
		
    rm ${newClusterCfgBak}
	fi
}

migECSCfg()
{
  eodsslkey="EoDCMSSL="
  eodcfg="node.cfg"

  if [ -r ${oldEoDHome}conf/admin/eod.cfg ] ; then
    eodcfg="eod.cfg"
  fi

  oldEodCfg=${oldAdminDir}${eodcfg}

  if [ -f ${oldEodCfg} ] ; then
    process_migecscfg_awk
    process_migecscfg2clustercfg_awk		
  else
    msg="${oldEodCfg} does not exist"
  fi
}

migAdmin()
{
  migUser ${oldAdminDir} ${newAdminDir} Global
  migECSCfg 
#	migSettingsCfg ${oldAdminDir} ${newAdminDir} "usrstngs.cfg"
}


getAllFontDirs()
{
  myCurDir=`pwd`

  cd ${newFontDir}

  for thisFontDir in *
  do
    allFontDirs="${allFontDirs} ${thisFontDir}"
  done
	
  cd ${myCurDir}
}

init_mig5_sh()
{
  init_basic_file_directory_names
  init_templates_directories_names
  init_mig_files
  setup_awk_echo
  getOldVer
  getAllFontDirs
}

do_migrate_users()
{
  ${ECHO}
  ${ECHO} "    Migrating users settings..."
  migUsers
}

do_migrate_admin()
{
  ${ECHO}
  ${ECHO} "    Migrating global settings..."
  migAdmin
}

check_params  $1 $2 $3 $4 $5
init_mig5_sh

do_migrate_users
do_migrate_admin

