File: //usr/local/locaweb/bin/lwcorp_fix_owner.sh
#!/bin/bash
# VARS e FUNCTIONS
. /etc/lwcorp/lwcorp.functions
dialog --backtitle "$LWCORPHEADER" --title "$TITLEATENCAO" --msgbox "\nANTES DE PROSSEGUIR, ATENTE-SE AOS SEGUINTES PONTOS:\n\n
* O FIXOWNER ALTERA O TIMESTAMP DOS ARQUIVOS. CASO O EXECUTE DESNECESSARIAMENTE, FARA COM QUE O BACKUP INCREMENTAL SEJA EXECUTADO
TAMBEM DESNECESSARIAMENTE. PORTANTO, CONSIDERE ISSO;\n\n* O FIXOWNER, QUANDO EXECUTADO EM UM DIRETORIO COM MUITOS ARQUIVOS, PODE
AUMENTAR O PROCESSAMENTO NO SERVIDOR." 13 100
# Seleciona a hospedagem:
FTP_USER_SELECTED=$(dialog --backtitle "$LWCORPHEADER" --stdout --radiolist "\nSELECIONE A HOSPEDAGEM:" 0 0 0 `for a in $CSUSERS; do echo "$a '' off"; done`)
if [ -z $FTP_USER_SELECTED ];then
# Printa erro caso nao tenha selecionado uma hospedagem:
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE NAO SELECIONOU UMA HOSPEDAGEM.\n\nCONFIGURACAO CANCELADA." 9 65
echo "$LOGDATE - [Analista nao selecionou a hospedagem e/ou cancelou a configuracao de fixowner]" >> $LOGFILE;
exit 1
else
# Caso contrario loga a hospedagem selecionada:
echo "$LOGDATE - [Analista selecionou a hospedagem $FTP_USER_SELECTED]" >> $LOGFILE;
fi
# Validacao do usuario:
getent passwd $FTP_USER_SELECTED >/dev/null
if [ $? -ne "0" ];then
# Caso o usuario selecionado nao exista:
echo "$LOGDATE - [Analista informou usuario inexistente. Cancelada configuracao de fixowner]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nUSUARIO NAO ENCONTRADO.\n\nCONFIGURACAO CANCELADA." 9 65;
exit 1
fi
# Apos validar a existencia do usuario, eh solicitado o diretorio a ser corrigido:
dialog --backtitle "$LWCORPHEADER" --title 'INFO' --msgbox "\nAGORA, SELECIONE O DIRETORIO OU ARQUIVO A SER AJUSTADO." 7 65
# Solicita arquivo ou diretorio a ser corrigido:
DIR2FIX=`dialog --backtitle "$LWCORPHEADER" --stdout --fselect /home/$FTP_USER_SELECTED/ 20 100`
if [ -z $DIR2FIX ];then
# Caso o analista nao tenha informado um diretorio ou cancelado a operacao:
echo "$LOGDATE - [Analista nao informou path a ser ajustado ou cancelou a configuracao]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECANCELADO" --timeout "10" --msgbox "\nCONFIGURACAO CANCELADA." 7 65
exit 1
fi
# Validacao de path:
file $DIR2FIX | grep -w "ERROR" >/dev/null
case $? in
0) echo "$LOGDATE - [Analista informou path inexistente '$DIR2FIX']" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --timeout "10" --msgbox "\nO PATH INFORMADO NAO EXISTE." 7 65;
exit 1;;
esac
# Valida se o analista informou algo com "../"
echo $DIR2FIX | sed "s/\// /g" | grep -w "\.\." >/dev/null
if [ $? -eq "0" ];then
echo "$LOGDATE - [Analista informou path invalido '$DIR2FIX']" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nPATH INVALIDO." 7 65
exit 1
fi
# Compara o home do usuario com o home onde esta o arquivo:
COMPARE_FTP_USER_SELECTED="`getent passwd $FTP_USER_SELECTED | cut -d: -f6`"
COMPARE_FTP_DIR_FILE_SELECTED="`echo $DIR2FIX | cut -d/ -f1,2,3`"
if [ "$COMPARE_FTP_USER_SELECTED" != "$COMPARE_FTP_DIR_FILE_SELECTED" ]; then
echo "$LOGDATE - [Analista informou path invalido '$DIR2FIX' para o user '$FTP_USER_SELECTED']" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nPATH INVALIDO PARA '$FTP_USER_SELECTED'." 7 65
exit 1
fi
if [ "$(echo $DIR2FIX | sed -e 's/\// /g' | xargs -n1 | wc -l)" = "2" ]; then
echo "$LOGDATE - [Analista informou path invalido '$DIR2FIX']" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nNAO PODE ALTERAR '$DIR2FIX'." 7 65
exit 1
fi
# Confirmacao do usuario:
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --yesno "\nPATH: $DIR2FIX\nUSER: $FTP_USER_SELECTED\n\nVOCE DESEJA PROSSEGUIR?\n\n" 9 65
# Executa chown e finaliza:
case $? in
0) chown -Rv $FTP_USER_SELECTED:users $DIR2FIX;;
*) echo "$LOGDATE - [Processo cancelado pelo analista]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLE" --msgbox "OK. CANCELADO." 7 65; exit 1;;
esac
case $? in
0) echo "$LOGDATE - [Ajustado owner:group de '$DIR2FIX' para $FTP_USER_SELECTED:users]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLEINFO" --msgbox "\nOWNER:GROUP AJUSTADOS COM SUCESSO." 7 65; exit 0;;
*) echo "$LOGDATE - [Erro no ajuste owner:group de $DIR2FIX para $FTP_USER_SELECTED:users]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nOCORREU UM ERRO DESCONHECIDO. VERIFICAR." 7 65; exit 1;;
esac