HEX
Server: Apache
System: Linux vpshost0650.publiccloud.com.br 4.4.79-grsec-1.lc.x86_64 #1 SMP Wed Aug 2 14:18:21 -03 2017 x86_64
User: bandeirantesbomb3 (10068)
PHP: 8.0.7
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //usr/local/locaweb/bin/lwcorp_rede_ip_adicional.sh
#!/bin/bash

# FUNCTIONS
. /etc/lwcorp/lwcorp.functions

DEVICE="eth0"

# A NEWIFACE inicialmente eh calculada levando em consideracao as
# interfaces que estao no ar. Pega a ultima, soma mais 1 e assim
# determina qual sera a proxima interface a ser configurada. Depois
# ainda eh verificado se o arquivo de configuracao dessa interface
# ja existe. Se sim, soma mais numero para a nova interface.

NEWIFACE="$DEVICE:$(expr $(ip addr show | grep eth0 | awk '{print$7}' | grep ^eth | grep eth0: | cut -d: -f2  | sort | tail -n1) + 1)"
NET_PATH="/etc/sysconfig/network-scripts"
NET_CONFIG="${NET_PATH}/ifcfg-${NEWIFACE}"

# Esta function nao fica no lwcorp.functions pq so sera usada aqui

setup_new_ip () {

echo "$LOGDATE - [Configurando IP '$NEW_IP_ADDR' e '$NEW_NETMASK' em '$NEWIFACE'.]" >> $LOGFILE

# template com a configuracao da interface virtual:

template=`cat <<EOF
DEVICE="${NEWIFACE}"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR="${NEW_IP_ADDR}"
NETMASK="${NEW_NETMASK}"
ZONE=access
EOF`

# aqui eh criada a nova interface:

echo $template | xargs -n1 > $NET_CONFIG

# verifica se o IP esta na configurado na nova interface virtual:

grep $NEW_IP_ADDR $NET_CONFIG > /dev/null

if [ $? -eq "0" ];then
    # verifica a saida do comando acima. se saiu com 0, sucesso
    echo "$LOGDATE - [Configuracao realizada com sucesso.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --msgbox "\nENDERECO IP CONFIGURADO COM SUCESSO\n\nTECLE ENTER PARA SUBIRMOS A INTERFACE." 9 53
else
    # se saiu diferente de 0, reporta erro
    echo "$LOGDATE - [Ocorreu um erro na configuracao do novo endereco IP.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nOCORREU UM ERRO NA CONFIGURACAO DO IP" 0 0
    exit 1
fi

# sobe a nova interface recem configurada:
echo "$LOGDATE - [Subindo nova interface.]" >> $LOGFILE
echo -e "\n\033[1;32mSUBINDO NOVA INTERFACE. POR FAVOR, AGUARDE (Isso pode demorar um pouco).\033[0m\n"

/sbin/ifup $NEWIFACE

# verifica se a nova interface esta no ar. se sim, finaliza o script.
if [ $? -eq "0" ];then
    echo "$LOGDATE - [Nova interface '$NEWIFACE' esta no ar.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --msgbox "\nFEITO: INTERFACE $NEWIFACE NO AR\n\nUSE O COMANDO 'ip addr' E CONFIRA SE TUDO ESTA OK." 9 73
else
    # se deu erro, reporta pro analista
    echo "$LOGDATE - [Ocorreu um erro ao subir nova interface '$NEWIFACE'.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nOCORREU UM ERRO AO SUBIR A NOVA INTERFACE" 7 53
    exit 1
fi    

}

# Inicio do script:

# Verifica se ja existe o arquivo de configuracao para a nova interface. Se sim, atribui +1 ao numero do que seria a nova interface:

if [ -e $NET_CONFIG ]; then
    # Redefinicao das variaveis abaixo:
    NEWIFACE="${DEVICE}:$(expr `echo ${NEWIFACE} | cut -d: -f2` + 1)"
    NET_CONFIG="${NET_PATH}/ifcfg-${NEWIFACE}"
fi

# Obtem o novo IP:
NEW_IP_ADDR=$(dialog --backtitle "$LWCORPHEADER" --title "ENDERECO IP" --stdout --inputbox "\nINFORME O NOVO ENDERECO IP:" 10 35)

# Esse if eh preciso pra saber se o analista clicou em "ok" ou cancelou o processo. Dialog sucks
if [ $? -eq "0" ];then

    # Verifica se o novo IP foi digitado
    if [[ -z $NEW_IP_ADDR ]]; then
        echo "$LOGDATE - [O analista nao informou o endereco IP. Abortando.]" >> $LOGFILE
        dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE DEVE INFORMAR O ENDERECO IP PARA PROSSEGUIR" 7 53
        exit 1
    else
        echo "$LOGDATE - [O analista informou o endereco IP: '$NEW_IP_ADDR'.]" >> $LOGFILE
    fi

elif [ $? -eq "1" ]; then
    
    if [[ -z $NEW_IP_ADDR ]]; then
        echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE
        dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53
        exit 1
    fi
fi

# Valida se ha caracteres invalidos no IP:
VALIDATION1=`echo ${NEW_IP_ADDR} | sed "s/[0-9\.]//g"`;

if [ "${VALIDATION1}" != "" ] || [ $(echo ${NEW_IP_ADDR} | grep '^255') ]; then
    echo "$LOGDATE - [O analista digitou caracteres invalidos no campo IP. Abortando.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nCARACTERES INVALIDOS NO ENDERECO IP INFORMADO" 07 53
   exit 1
fi

# Verifica o formato do valor informado no IP:
VALIDATION2=`echo ${NEW_IP_ADDR} | egrep '^(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$'`

if [ "${VALIDATION2}" != "$NEW_IP_ADDR" ]; then
    echo "$LOGDATE - [O analista digitou um endereco IP invalido. Abortando.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nENDERECO IP INFORMADO EH INVALIDO" 07 53
   exit 1
fi

# Verifica se o IP ja esta configurado em alguma interface no servidor:
if [[ $(grep $NEW_IP_ADDR $NET_PATH/ifcfg-eth0*) ]]; then
	echo "$LOGDATE - [O endereco IP ja esta presente na configuracao de rede.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nENDERECO IP JA ESTA PRESENTE NA CONFIGURACAO DE REDE." 7 63
   exit 1
fi

# Obtem a Mascara de rede:
NEW_NETMASK=$(dialog --backtitle "$LWCORPHEADER" --title "MASCARA" --stdout --inputbox "\nINFORME A MASCARA DE REDE:" 10 35)

# Esse if eh preciso pra saber se o analista clicou em "ok" ou cancelou o processo. Dialog sucks
if [ $? -eq "0" ];then

    # Verifica se a mascara de rede foi digitada:
    if [ -z $NEW_NETMASK ]; then
        echo "$LOGDATE - [O analista nao informou a mascara de rede. Abortando.]" >> $LOGFILE
        dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE DEVE INFORMAR A MASCARA DE REDE PARA PROSSEGUIR" 7 53
        exit 1
    else
        echo "$LOGDATE - [O analista informou a mascara de rede: '$NEW_NETMASK'.]" >> $LOGFILE
    fi

elif [ $? -eq "1" ]; then
    
    if [ -z $NEW_NETMASK ]; then
        echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE
        dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 0 0 
        exit 1
    fi
fi

# Valida o MacAddress:
VALIDATION3=`echo ${NEW_NETMASK} | sed "s/[0-5\.]//g"`;

if [ "${VALIDATION3}" != "" ]; then
    echo "$LOGDATE - [O analista digitou caracteres invalidos no campo Mascara de Rede.]" >> $LOGFILE
    dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nCARACTERES INVALIDOS NA MASCARA DE REDE INFORMADA" 07 53
   exit 1
fi

dialog --backtitle "$LWCORPHEADER" --title "$TITLEATENCAO" --msgbox "\nA SEGUIR, CONFIRA SE OS DADOS ESTAO CORRETOS. SE NAO, RECOMECE O PROCESSO.\n\nQUALQUER ERRO QUE EVENTUALMENTE OCORRA NESTE PASSO PODERA CAUSAR INDISPONIBILIDADE DO SERVIDOR." 9 100

# Solicita para o analista a confirmacao dos dados digitados:
echo "$LOGDATE - [Aguardando confirmacao do analista quanto aos dados informados.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --yesno "\nCONFIRA SE OS DADOS ESTAO CORRETOS:\n\n* ENDERECO IP: $NEW_IP_ADDR\n* MASCARA DE REDE: $NEW_NETMASK\n\n(A NOVA INTERFACE SERA $NEWIFACE)\n\nDESEJA PROSSEGUIR?" 14 100

# Se passou por todas validacoes, eh chamada a function presente neste script e a configuracao comeca:
case $? in
    0) setup_new_ip;;
    *) echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE ; dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53; exit 1;;
esac