#!/bin/bash
#/**
#@file    PostConf.lib
#@brief   Librería o clase PostConf
#@class   PostConf
#@brief   Funciones para la postconfiguración de sistemas operativos.
#@version 1.1.0
#@warning License: GNU GPLv3+
#*/


#/**
#         ogCleanOs int_ndisk int_nfilesys
#@brief   Elimina los archivos que no son necesarios en el sistema operativo.
#@param   int_ndisk      nº de orden del disco
#@param   int_nfilesys   nº de orden del sistema de archivos
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
#@note    Antes incluido en la funcion ogReduceFs
#@author  Irina Gomez. Universidad de Sevilla.
#@return  (nada)
#@date    2014-10-27
#*/ ##
function ogCleanOs ()
{

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
           "$FUNCNAME 1 1"
    return
fi

# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys" || return $?

case "$(ogGetOsType $1 $2)" in
    Linux)
        # Borramos los ficheros de dispositivos y los temporales.
        ogCleanLinuxDevices $1 $2
        rm -rf $(ogMount $1 $2)/tmp/*   #*/ Comentario Doxygen
        ;;
    Windows)
        # Borrar ficheros de hibernación y paginación de Windows.
        [ -n "$(ogGetPath $1 $2 pagefile.sys)" ] && ogDeleteFile $1 $2 pagefile.sys
        [ -n "$(ogGetPath $1 $2 hiberfil.sys)" ] && ogDeleteFile $1 $2 hiberfil.sys
        [ -n "$(ogGetPath $1 $2 swapfile.sys)" ] && ogDeleteFile $1 $2 swapfile.sys
        ;;
esac

}



#/**
#         ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
#@brief   Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
#@see     ogInstallFirstBoot ogInstallRunonce
#*/ ##
function ogInstallMiniSetup ()
{
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$MSG_SEE ogInstallFirstBoot ogInstallRunonce"
    return
fi
case $# in
    3)  # Ejecución en el primer arranque de la máquina.
        ogInstallFirstBoot "$@" ;;
    6|8) # Ejecución en el "runonce".
        ogInstallRunonce "$@" ;;
    *)  ogRaiseError $OG_ERR_FORMAT
        return $? ;;
esac
}


#/**
#         ogInstallFirstBoot int_ndisk int_npartition str_filename
#@brief   Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
#@param   int_ndisk         nº de orden del disco
#@param   int_npartition    nº de orden de la partición
#@param   str_filename      nombre del archivo .cmd a ejecutar en el arranque
#@return  (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@note    El archivo estará en system32 y será visible por el sistema.
#@version 1.0.2 - Nueva función
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2011-06-29
#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2012-04-16
#*/ ##
function ogInstallFirstBoot ()
{
local MNTDIR DIR CMDDIR CMDFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
           "$FUNCNAME 1 1 filename.cmd"
    return
fi
# Error si no se reciben 3 parámetros.
[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
# Comprobar que existe el directorio del fichero de comandos.
MNTDIR=$(ogMount "$1" "$2") || return $?
for i in winnt windows; do
    DIR=$(ogGetPath $MNTDIR/$i/system32)
    [ -n "$DIR" ] && CMDDIR=$DIR
done
[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
CMDFILE="$CMDDIR/$3"

# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la 
# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
cat > "$CMDFILE" << EOF
REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
EOF

# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque.
ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)"
}


#/**
#         ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
#@brief   Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
#@param   int_ndisk         nº de orden del disco
#@param   int_npartition    nº de orden de la partición
#@param   str_filename      nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
#@param   str_adm_user      usuario administrador para hacer autologin y ejecutar el runonce
#@param   str_adm_password  password del usuario administrador
#@param   bool_autologin    si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
#@param   str_auto_user     Usuario con el que queremos que haga autologin despues de la postconfiguracion
#@param   str_auto_password Password del usuario que hara autologin
#@return  (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@version 1.0.2 - Nueva función
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2011-06-29
#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2012-04-16
#@version 1.1.0 - Resuelve problemas a partir de Windows 10
#@author  Carmelo Cabezuelo Aguilar - Universidad Politécnica de Valencia
#@date    2018-02-20
#*/ ##
function ogInstallRunonce ()
{
local MOUNTPOINT DIR CMDDIR CMDFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
           "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
           "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
    return
fi
# Error si no se reciben 6 u 8 parámetros.
[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
# Punto de montaje.
MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
# Comprobar que existe el directorio del fichero de comandos.
for i in winnt windows; do
    DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
    [ -n "$DIR" ] && CMDDIR=$DIR
done
[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
CMDFILE="$CMDDIR/$3"

if [ $6 == 0 ]; then
    # Si no queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro
    cat > "$CMDFILE" << EOF
DEL C:\ogboot.*
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
EOF
else
    # Si queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro
    cat > "$CMDFILE" << EOF
DEL C:\ogboot.*
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
EOF
fi
#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 2>/dev/null 
ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' 2>/dev/null
ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' 2>/dev/null
ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' ".\\" 2>/dev/null
ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceAutoLockOnLogon' 2>/dev/null  
ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonCount' 2>/dev/null 
}

#/**
#         ogAddCmd int_ndisk int_npartition str_filename str_commands
#@brief   Añade comandos al cmd creado por ogInstalMiniSetup
#@param   int_ndisk         nº de orden del disco
#@param   int_npartition    nº de orden de la partición
#@param   str_filename      nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
#@param   str_commands      comando o comandos que se añadiran al fichero
#@return  
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
#@version 1.0.2 - Nueva función
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2011-06-29
#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2012-04-16
#*/ ##
function ogAddCmd ()
{
local MOUNTPOINT CMDFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \
           "$FUNCNAME 1 1 filename.cmd command" 
    return
fi
# Error si no se reciben 4 parámetros.
[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
# Punto de montaje 
MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
# Crear fichero de comandos, si no existe.
CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3"
[ -n "$CMDFILE" ] || ogInstallMiniSetup "$1" "$2" "$3"
[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $?

# Concatenamos el comando en el fichero de comandos
cat >> "$CMDFILE" << EOF
$4
EOF
}


#/**
#         ogDomainScript int_ndisk int_npartition str_domain str_user str_password
#@brief   Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
#@param   int_ndisk         nº de orden del disco
#@param   int_npartition    nº de orden de la partición
#@param   str_filename      nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
#@param   str_domain        dominio donde se quiere conectar
#@param   str_user          usuario con privilegios para unir al dominio 
#@param   str_password      password del usuario con privilegios 
#@return  
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@version 1.0.2 - Nueva función
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2011-06-29
#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
#@date    2012-04-16
#*/ ##
function ogDomainScript ()
{
local CMDDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" \
           "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \
           "$FUNCNAME 1 1 filename.cmd domain user password_user"
    return
fi
# Error si no se reciben 6 parámetros.
[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
# Punto de montaje 
MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
# Comprobar que existe el directorio de comandos.
CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32")
[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?

# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f"

# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
cat > "$CMDDIR/joindomain.vbs" << EOF
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144

strDomain = "$4"
strUser = "$5"
strPassword = "$6"

Set objNetwork = CreateObject("WScript.Network")
strComputer = objNetwork.ComputerName

Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
    strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")

ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
    strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
EOF

#*/ " (comentario Doxygen)


}


### PRUEBAS.

#/**
#         ogConfigureOgagent int_ndisk int_filesys
#@brief   Modifica el fichero de configuración del nuevo agente OGAent para sistemas operativos.
#@param   int_ndisk    nº de orden del disco
#@param   int_filesys  nº de orden del sistema de archivos
#@return  (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Fichero o dispositivo no encontrado.
#@exception OG_ERR_LOCKED    Sistema de archivos bloqueado.
#@version 1.1.0 - Primera adaptación para OpenGnsys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2016-07-15
#*/ ##
function ogConfigureOgagent ()
{
# Variables locales.
local MNTDIR AGENTDIR CFGFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
           "$FUNCNAME 1 1"
    return
fi

# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener sistema de archvios.
MNTDIR=$(ogMount $1 $2) || return $?

# Comprobar si existe el fichero de configuración de OGAgent.
for AGENTDIR in usr/share/OGAgent "Program Files/OGAgent" "Program Files (x86)/OGAgent" Applications/OGAgent.app; do
    CFGFILE=$(ogGetPath "$MNTDIR/$AGENTDIR/cfg/ogagent.cfg")
    [ -n "$CFGFILE" ] && break
done
[ -n "$CFGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "ogagent.cfg" || return $?
# Parchear dirección del servidor OpenGnsys en el fichero de configuración de OGAgent.
sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," "$CFGFILE"
}


#/**
#         ogInstallLaunchDaemon int_ndisk int_nfilesys str_filename
#@brief   Instala archivo que se ejecutará en el arranque de macOS.
#@param   int_ndisk         nº de orden del disco
#@param   int_nfilesys      nº de orden del sistema de archivos
#@param   str_filename      nombre del script
#return   (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Fichero o directorio no encontrado.
#@npte    Crea ficheros de configuración /Library/LaunchDaemon/es.opengnsys.Script.plist.
#@version 1.0.6 - Primera versión para OpenGnSys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2014-10-06
#*/ ##
function ogInstallLaunchDaemon ()
{
# Variables locales.
local LAUNCHDIR SCRIPTDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
           "$FUNCNAME 1 2 postconf"
    return
fi

# Error si no se reciben 3 parámetros.
[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Comprobar directorios.
LAUNCHDIR=$(ogGetPath $1 $2 /Library/LaunchDaemons)
[ -n "$LAUNCHDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Library/LaunchDaemons" || return $?
SCRIPTDIR=$(ogGetPath $1 $2 /usr/share)
[ -n "$SCRIPTDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share" || return $?

# Crear fichero de configuración del servicio de arranque.
cat << EOT $LAUNCHDIR/es.opengnsys.$3.plist
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
        <dict>
                <key>Label</key>
                <string>es.opengnsys.$3</string>
                <key>ProgramArguments</key>
                <array>
                        <string>$SCRIPTDIR/$3.sh</string>
                </array>
                <key>RunAtLoad</key>
                <true/>
                <key>StandardOutPath</key>
                <string>/var/log/$3.log</string>
                <key>StandardErrorPath</key>
                <string>/var/log/$3.err</string>
                <true/>
        </dict>
</plist>
EOT

# Crear un fichero de script vacío.
rm -f $SCRIPTDIR/$3.sh
touch $SCRIPTDIR/$3.sh
chmod +x $SCRIPTDIR/$3.sh
}


### PRUEBAS.

#/**
#         ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands
#@brief   Añade comandos al script creado por ogInstalLaunchDaemon.
#@param   int_ndisk         nº de orden del disco
#@param   int_nfilesys      nº de orden del sistema de archivos
#@param   str_filename      nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema
#@param   str_commands      comando o comandos que se añadiran al fichero
#return   (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Fichero o directorio no encontrado.
#@version 1.0.6 - Primera versión para OpenGnSys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2014-10-06
#*/ ##
function ogAddToLaunchDaemon ()
{
# Variables locales.
local SCRIPTFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
           "$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\""
    return
fi

# Error si no se reciben 4 parámetros.
[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Comprobar que existe el fichero de comandos.
SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh")
[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $?

# Concatenamos el comando en el fichero de comandos
cat >> "$SCRIPTFILE" << EOT
$4
EOT
}


#/**
#         ogUninstallLinuxClient int_ndisk int_filesys
#@brief   Desinstala el cliente OpenGnSys para sistemas operativos GNU/Linux.
#@param   int_ndisk    nº de orden del disco
#@param   int_filesys  nº de orden del sistema de archivos
#@return  (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
#@exception OG_ERR_LOCKED    Sistema de archivos bloqueado.
#@version 1.1.0 - Primera adaptación para OpenGnsys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2016-08-22
#*/ ##
function ogUninstallLinuxClient ()
{
# Variables locales.
local MNTDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
           "$FUNCNAME 1 1"
    return
fi

# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener sistema de archvios.
MNTDIR=$(ogMount $1 $2) || return $?

# Borrar ficheros y quitar llamada al cliente durante el proceso de inicio.
rm -f $MNTDIR/{usr/sbin,sbin,usr/local/sbin}/ogAdmLnxClient
rm -f $MNTDIR/{etc,usr/local/etc}/ogAdmLnxClient.cfg
sed -i -e '/ogAdmLnxClient/ d' $MNTDIR/{etc,usr/local/etc}/{rc.local,rc.d/rc.local} 2>/dev/null
}


#/**
#         ogUninstallWindowsClient int_ndisk int_filesys str_filename
#@brief   Desinstala el cliente OpenGnSys para sistemas operativos Windows.
#@param   int_ndisk         nº de orden del disco
#@param   int_npartition    nº de orden de la partición
#@param   str_filename      nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
#@return  (nada)
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
#@exception OG_ERR_LOCKED    Sistema de archivos bloqueado.
#@version 1.1.0 - Primera adaptación para OpenGnsys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2016-08-22
#*/ ##

function ogUninstallWindowsClient ()
{
# Variables locales.
local MNTDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \
           "$FUNCNAME 1 1 filename.cmd" 
    return
fi

# Error si no se reciben 3 parámetros.
[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener sistema de archvios.
MNTDIR=$(ogMount "$1" "$2") || return $?

# Crear órdenes para desinstalar servicio y borrar ejecutable del cliente.
if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)" -o -n "$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then
    ogAddCmd $1 $2 "$3" 'ogAdmWinClient -remove'
    ogAddCmd $1 $2 "$3" 'DEL C:\Windows\ogAdmWinClient.exe'
    ogAddCmd $1 $2 "$3" 'DEL C:\Winnt\ogAdmWinClient.exe'
fi
}

