Front-end para administração do Samba

Publicado por José Lima 30/09/2005

[ Hits: 8.899 ]

Download admsamba.sh




Front-end utilizando o XDialog para administração do Samba: usuários, grupos, computadores, scripts de login, homes dos usuários... completo.

  



Esconder código-fonte

#!/bin/sh

# Interface grafica para administracao de grupos e
# usuarios do samba utilizando o XDialog como ferramenta
# de desenvolvimento

# Criado por Jose Alves de Lima - ilsinho@ig.com.br - em 18/07/2005



# Funcoes especificas

##################################
#           MENSAGENS            #
##################################

################# Mensagem inicial
Mensagem_Inicial() {
Xdialog --title "Administração de Usuários - SAMBA"\
        --ok-label "Continuar"\
        --msgbox "Você poderá utilizar esta ferramenta para \n administração de grupos e usuários \n do Samba. Bom proveito. \n\n José Alves \n ilsinho@ig.com.br" 15 45

case $? in
    0) Menu_Inicial;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem finalizar
Mensagem_Finalizar() {
Xdialog --title "Finalizar Programa"\
        --ok-label "Finalizar"\
        --cancel-label "Não finalizar"\
        --yesno "\nTem certeza que deseja finalizar o programa?\n" 0 0

case $? in
    0) exit 0;;
    1) Menu_Inicial;;
    255) exit 0;;
esac
}


################# Mensagem - Grupo adicionado
Grupo_Adicionado() {
Xdialog --title "Grupo criado"\
        --msgbox "O grupo foi criado com sucesso." 10 45

case $? in
    0) Grupo_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Grupo removido
Grupo_Removido() {
Xdialog --title "Grupo removido"\
        --msgbox "O grupo foi removido com sucesso." 10 45

case $? in
    0) Grupo_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Grupo existente
Grupo_Existente() {
Xdialog --title "Grupo existente"\
        --msgbox "O grupo que você informou já existe." 10 45

case $? in
    0) Grupo_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Grupo inexistente
Grupo_Inexistente() {
Xdialog --title "Grupo inexistente"\
        --msgbox "O grupo que você informou não existe." 10 45

case $? in
    0) Grupo_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario adicionado
Usuario_Adicionado() {
Xdialog --title "Usuário criado"\
        --msgbox "O usuário foi cadastrado com sucesso. \n Criado pasta do usuário em /HOME. \n Cadastre uma senha para o usuário." 10 45

case $? in
    0) Usuario_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario removido
Usuario_Removido() {
Xdialog --title "Usuario removido"\
        --msgbox "O usuario foi removido com sucesso. \n Pasta pessoal do usuário em /HOME removida" 10 45

case $? in
    0) Usuario_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario existente
Usuario_Existente() {
Xdialog --title "Usuário existente"\
        --msgbox "O usuário que você informou já existe." 10 45

case $? in
    0) Usuario_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario inexistente
Usuario_Inexistente() {
Xdialog --title "Usuário inexistente"\
        --msgbox "O usuário que você informou não existe." 10 45

case $? in
    0) Usuario_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario grupo inexistente
UsuarioGrupo_Inexistente() {
Xdialog --title "Grupo inexistente"\
        --msgbox "O grupo que você informou não existe." 10 45

case $? in
    0) Usuario_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario login inexistente
UsuarioLogin_Inexistente() {
Xdialog --title "Login inexistente"\
        --msgbox "O login que você informou não existe." 10 45

case $? in
    0) Usuario_Login;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario senha alterado
UsuarioLogin_Alterado() {
Xdialog --title "Senha cadastrada/alterada"\
        --msgbox "A senha foi cadastrada/alterada com sucesso." 10 45

case $? in
    0) Usuario_Login;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Usuario senha errada
UsuarioLogin_SenhaErrada() {
Xdialog --title "Senhas diferentes"\
        --msgbox "A senha e a repetição \n da senha não coincidem. \n Por favor digite novamente." 10 45

case $? in
    0) Usuario_Login;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script individual adicionado
ScriptIndividual_Adicionado() {
Xdialog --title "Script adicionado"\
        --msgbox "O script foi adicionado com sucesso." 10 45

case $? in
    0) Script_Individual;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script individual - caminho inexistente
ScriptIndividual_CaminhoInexistente() {
Xdialog --title "Caminho inexistente"\
        --msgbox "O arquivo informado \n não existe em /HOME/NETLOGON." 10 45

case $? in
    0) Script_Individual;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script individual - usuario inexistente
ScriptIndividual_UsuarioInexistente() {
Xdialog --title "Usuário inexistente"\
        --msgbox "O login informado não existe." 10 45

case $? in
    0) Script_Individual;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script grupo adicionado
ScriptGrupo_Adicionado() {
Xdialog --title "Script adicionado"\
        --msgbox "O script foi adicionado com sucesso." 10 45

case $? in
    0) Script_Grupo;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script grupo - login inexistente
ScriptGrupo_LoginInexistente() {
Xdialog --title "Arquivo com login inexistente"\
        --msgbox "O arquivo de login informado \n não existe em /TMP." 10 45

case $? in
    0) Script_Grupo;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Script grupo - script inexistente
ScriptGrupo_ScriptInexistente() {
Xdialog --title "Script inexistente"\
        --msgbox "O arquivo de script informado \n não existe em /HOME/NETLOGON." 10 45

case $? in
    0) Script_Grupo;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Computador adicionado
Computador_Adicionado() {
Xdialog --title "Computador criado"\
        --msgbox "O computador foi adicionado com sucesso." 10 45

case $? in
    0) Computador_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Computador removido
Computador_Removido() {
Xdialog --title "Computador removido"\
        --msgbox "O computador foi removido com sucesso." 10 45

case $? in
    0) Computador_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Computador inexistente
Computador_Inexistente() {
Xdialog --title "Computador inexistente"\
        --msgbox "O computador que você informou não existe." 10 45

case $? in
    0) Computador_Remover;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Computador existente
Computador_Existente() {
Xdialog --title "Computador existente"\
        --msgbox "O computador que você informou já existe." 10 45

case $? in
    0) Computador_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}


################# Mensagem - Computador inexistente
ComputadorGrupo_Inexistente() {
Xdialog --title "Grupo inexistente"\
        --msgbox "O grupo que você informou não existe." 10 45

case $? in
    0) Computador_Adicionar;;
    255) Mensagem_Finalizar;;
esac
}





##################################
#            TAREFAS             #
##################################

################# Opcoes de trabalho iniciais
Menu_Inicial() {
Xdialog --title "Opções de Trabalho"\
        --ok-label "Continuar"\
        --cancel-label "Finalizar"\
        --menubox "\nEscolha uma opção de trabalho \n para administração de grupos e usuários do Samba:\n\n" 15 56 6 \
        "Grupo" "Administração de grupos de usuários do Samba"\
        "Usuário" "Administração de usuários do Samba"\
        "Computador" "Administração de computadores do Samba" 2> /tmp/menu.tmp.$$

opcao=$?
escolha=`cat /tmp/menu.tmp.$$`
rm -f /tmp/menu.tmp.$$

case $opcao in
    0) case $escolha in
            Grupo) Menu_Grupo;;
       Usuário) Menu_Usuario;;
            Computador) Menu_Computador;;
       esac;;
    1) Mensagem_Finalizar;;
    255) Mensagem_Finalizar;;
esac
}


##################
#     grupos     #
##################

################# Opções de trabalho - administracao de grupos
Menu_Grupo() {
Xdialog --title "Administração de Grupos"\
        --ok-label "Continuar"\
        --cancel-label "Menu anterior"\
        --menubox "\nEscolha uma opção de trabalho \n para administração de grupos do Samba:\n\n" 15 56 6 \
        "Listar" "Lista grupos do Samba"\
        "Adicionar" "Adiciona grupo ao Samba"\
        "Remover" "Remove grupo do Samba" 2> /tmp/menu.tmp.$$

opcao=$?
escolha=`cat /tmp/menu.tmp.$$`
rm -f /tmp/menu.tmp.$$

case $opcao in
    0) case $escolha in
            Listar) Grupo_Listar;;
       Adicionar) Grupo_Adicionar;;
            Remover) Grupo_Remover;;
       esac;;
    1) Menu_Inicial;;
    255) Mensagem_Finalizar;;
esac
}


################# Grupo - Listar grupos
Grupo_Listar() {

rm -f /tmp/grupos

cat /etc/group | grep 5[0-100] | awk -F: {'print $1'} | sort >> /tmp/grupos

Xdialog --title "Lista de Grupos"\
        --no-cancel\
        --tailbox "/tmp/grupos" 40 30

case $? in
    0) Menu_Grupo;;
    255) Mensagem_Finalizar;;
esac

}


################# Grupo - Adicionar grupo
Grupo_Adicionar() {
Xdialog --title "Novo Grupo"\
        --cancel-label "Menu anterior"\
        --inputbox "\nDigite o nome para o novo grupo. \n O nome do grupo deve ser uma única palavra \n e em letras minúsculas.\n\n" 13 45 2> /tmp/input.tmp.$$

opcao=$?
input=`cat /tmp/input.tmp.$$`
input_search=""$input\$""

rm -f /tmp/input.tmp.$$

case $opcao in
    0) NomeGrupo=`cat /etc/group | awk -F: {'print $1'} | grep "$input_search"`
       if [ -z $NomeGrupo ]; then
        groupadd $input;
             Grupo_Adicionado;
       else
             Grupo_Existente;
       fi;;
    1) Menu_Grupo;;
    255) Mensagem_Finalizar;;
esac
}


################# Grupo - Remover grupo
Grupo_Remover() {
Xdialog --title "Remover Grupo"\
        --cancel-label "Menu anterior"\
        --inputbox "\nDigite o nome do grupo que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$

opcao=$?
input=`cat /tmp/input.tmp.$$`
input_search=""$input\$""

rm -f /tmp/input.tmp.$$

case $opcao in
    0) NomeGrupo=`cat /etc/group | awk -F: {'print $1'} | grep "$input_search"`
       if [ ! -z $NomeGrupo ]; then
             groupdel $input;
             Grupo_Removido;
       else
             Grupo_Inexistente;
       fi;;
    1) Menu_Grupo;;
    255) Mensagem_Finalizar;;
esac
}


##################
#    usuarios    #
##################

################# Opções de trabalho - administracao de usuarios
Menu_Usuario() {
Xdialog --title "Administração de Usuários"\
        --ok-label "Continuar"\
        --cancel-label "Menu anterior"\
        --menubox "\nEscolha uma opção de trabalho \n para administração de usuários do Samba:\n\n" 17 56 6 \
        "Listar" "Lista usuários do Samba"\
        "Adicionar" "Adiciona usuário ao Samba"\
        "Remover" "Remove usuário do Samba"\
        "Logon" "Definir script de logon para usuário"\
        "Senha" "Cadastra ou altera a senha no Samba" 2> /tmp/menu.tmp.$$

opcao=$?
escolha=`cat /tmp/menu.tmp.$$`

rm -f /tmp/menu.tmp.$$

case $opcao in
    0) case $escolha in
            Listar) Usuario_Listar;;
       Adicionar) Usuario_Adicionar;;
            Remover) Usuario_Remover;;
            Logon) Menu_Script;;
       Senha) Usuario_Login;;
       esac;;
    1) Menu_Inicial;;
    255) Mensagem_Finalizar;;
esac
}


################# Usuario - Listar usuario
Usuario_Listar() {

rm -f /tmp/usuarios

sed -e '/^#/d' /etc/samba/smbpasswd | awk -F: {'print $1'} | sed -e '/[$]/d' | sort >> /tmp/usuarios

Xdialog --title "Lista de Usuários"\
        --fixed-font\
        --no-cancel\
        --tailbox "/tmp/usuarios" 40 40

case $? in
    0) Menu_Usuario;;
    255) Mensagem_Finalizar;;
esac

}


################# Usuario - Adicionar usuario
Usuario_Adicionar() {

Xdialog --title "Novo Usuário"\
        --cancel-label "Menu anterior"\
        --3inputsbox "\nPara cadastrar um novo usuário \n digite os dados abaixo." 20 48 "Nome completo:" "" "Login:" "" "Grupo:" "" 2> /tmp/novousuario

opcao=$?
name=`cat /tmp/novousuario | awk -F/ {'print $1'}`
login=`cat /tmp/novousuario | awk -F/ {'print $2'}`
login_search=""$login\$""
group=`cat /tmp/novousuario | awk -F/ {'print $3'}`
group_search=""$group\$""

rm -f /tmp/novousuario

case $opcao in
    0) Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep "$login_search"`
       Grupo=`cat /etc/group | awk -F: {'print $1'} | grep "$group_search"`
       if [ -z $Usuario ]; then
          if [ ! -z $Grupo ]; then
              useradd -c "$name" -g $group -d /dev/null -s /bin/false $login;
         smbpasswd -a -n $login;
         mkdir /home/$login;
              chmod -R 700 /home/$login;
              chown -R $login:$group /home/$login;
         Usuario_Adicionado;
         rm -f /tmp/novousuario;
          else
              UsuarioGrupo_Inexistente
          fi
       else
          Usuario_Existente;
          rm -f /tmp/novousuario;
       fi;;
    1) Menu_Usuario;;
    255) Mensagem_Finalizar;;
esac
}


################# Usuario - Remover usuario
Usuario_Remover() {
Xdialog --title "Remover Usuário"\
        --cancel-label "Menu anterior"\
        --inputbox "\nDigite o login do usuario que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$

opcao=$?
input=`cat /tmp/input.tmp.$$`
input_search=""$input\$""

rm -f /tmp/input.tmp.$$

case $opcao in
    0) Usuario=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep "$input_search"`
       if [ ! -z $Usuario ]; then
             smbpasswd -x $input;
             rm -fR /home/$input;
             rm -f /home/netlogon/$input.bat;
        userdel $input;
             Usuario_Removido;
       else
             Usuario_Inexistente;
       fi;;
    1) Menu_Usuario;;
    255) Mensagem_Finalizar;;
esac
}


################# Usuario - Cadastrar/Alterar Senha - Login
Usuario_Login() {

Xdialog --title "Usuário - Senha"\
        --cancel-label "Menu anterior"\
        --password\
        --password\
        --3inputsbox "\nPara cadastrar/alterar a senha do usuário \n digite os dados abaixo." 20 48 "Login:" "" "Senha:" "" "Repetição da senha:" "" 2> /tmp/senha

opcao=$?
login=`cat /tmp/senha | awk -F/ {'print $1'}`
login_search=""$login\$""
password_one=`cat /tmp/senha | awk -F/ {'print $2'}`
password_two=`cat /tmp/senha | awk -F/ {'print $3'}`

rm -f /tmp/senha

case $opcao in
    0) Usuario=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep "$login_search"`
       if [ ! -z $Usuario ]; then
        if [ "$password_one" = "$password_two" ]; then
                   ( echo $password_one ; echo $password_two ) | smbpasswd -s $login;
                   UsuarioLogin_Alterado;
             else
                   UsuarioLogin_SenhaErrada;
             fi
       else
             UsuarioLogin_Inexistente;
       fi;;
    1) Menu_Usuario;;
    255) Mensagem_Finalizar;;
esac
}


##########################
#    usuarios - script   #
##########################

################# Opções de trabalho - usuarios
Menu_Script() {
Xdialog --title "Script de logon"\
        --ok-label "Continuar"\
        --cancel-label "Menu anterior"\
        --menubox "\nEscolha uma opção de trabalho \n para definir o script de logon para usuários do Samba:\n\n" 17 56 6 \
        "Individual" "Atribui script para um único usuário"\
        "Grupo" "Atribui script para grupos de usuários" 2> /tmp/menu.tmp.$$

opcao=$?
escolha=`cat /tmp/menu.tmp.$$`

rm -f /tmp/menu.tmp.$$

case $opcao in
    0) case $escolha in
            Individual) Script_Individual;;
       Grupo) Script_Grupo;;
       esac;;
    1) Menu_Usuario;;
    255) Mensagem_Finalizar;;
esac
}


################# Script - individual
Script_Individual() {

Xdialog --title "Script individual"\
        --cancel-label "Menu anterior"\
        --2inputsbox "\nPara designar um script de logon \n a um usuário digite abaixo." 18 48 "Login do usuário:" "" "Arquivo de script \n (deve estar em /home/netlogon):" "" 2> /tmp/script

opcao=$?
login=`cat /tmp/script | awk -F/ {'print $1'}`
login_search=""$login\$""
file=`cat /tmp/script | awk -F/ {'print $2'}`

rm -f /tmp/script

case $opcao in
    0) Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$login_search"`
       if [ ! -z $Usuario ]; then
          if [ -r /home/netlogon/$file ]; then
              cp -f /home/netlogon/$file /home/netlogon/$login.bat
         ScriptIndividual_Adicionado;
          else
              ScriptIndividual_CaminhoInexistente
          fi
       else
          ScriptIndividual_UsuarioInexistente;
       fi;;
    1) Menu_Script;;
    255) Mensagem_Finalizar;;
esac
}


################# Script - grupo
Script_Grupo() {

Xdialog --title "Script individual"\
        --cancel-label "Menu anterior"\
        --2inputsbox "\nPara designar um script de logon \n a um grupo de usuários digite abaixo." 18 48 "Arquivo com login \n (deve estar em /tmp):" "" "Arquivo de script \n (deve estar em /home/netlogon):" "" 2> /tmp/script

opcao=$?
fileLogin=`cat /tmp/script | awk -F/ {'print $1'}`
fileScript=`cat /tmp/script | awk -F/ {'print $2'}`

rm -f /tmp/script

case $opcao in
    0) if [ -r /home/netlogon/$fileScript ]; then
          if [ -r /tmp/$fileLogin ]; then
             for login in `cat /tmp/$fileLogin` ; do
                login_search=""$login\$""
                Usuario=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$login_search"`
                if [ ! -z $Usuario ]; then
                   cp -f /home/netlogon/$fileScript /home/netlogon/$login.bat
                fi
             done
             ScriptGrupo_Adicionado
          else
             ScriptGrupo_LoginInexistente
          fi
       else
          ScriptGrupo_ScriptInexistente
       fi;;
    1) Menu_Script;;
    255) Mensagem_Finalizar;;
esac
}



##################
#  computadores  #
##################

################# Opções de trabalho - administracao de computadores
Menu_Computador() {
Xdialog --title "Administração de Computadores"\
        --ok-label "Continuar"\
        --cancel-label "Menu anterior"\
        --menubox "\nEscolha uma opção de trabalho \n para administração de usuários do Samba:\n\n" 15 56 6 \
        "Listar" "Lista computadores do Samba"\
        "Adicionar" "Adiciona computador ao Samba"\
        "Remover" "Remove computador do Samba" 2> /tmp/menu.tmp.$$

opcao=$?
escolha=`cat /tmp/menu.tmp.$$`

rm -f /tmp/menu.tmp.$$

case $opcao in
    0) case $escolha in
            Listar) Computador_Listar;;
       Adicionar) Computador_Adicionar;;
            Remover) Computador_Remover;;
       esac;;
    1) Menu_Inicial;;
    255) Mensagem_Finalizar;;
esac
}


################# Computador - Listar computador
Computador_Listar() {

rm -f /tmp/computadores

sed -e '/^#/d' /etc/samba/smbpasswd | awk -F: {'print $1'} | sed -n '/\$/p' | sort >> /tmp/computadores

Xdialog --title "Lista de Computadores"\
        --fixed-font\
        --no-cancel\
        --tailbox "/tmp/computadores" 40 40

case $? in
    0) Menu_Computador;;
    255) Mensagem_Finalizar;;
esac

}


################# Computador - Adicionar computador
Computador_Adicionar() {

Xdialog --title "Novo Computador"\
        --cancel-label "Menu anterior"\
        --3inputsbox "\nPara cadastrar um novo computador \n digite os dados abaixo." 18 48 "Computador:" "" "Comentário:" "" "Grupo:" "" 2> /tmp/novocomputador

opcao=$?
computer=`cat /tmp/novocomputador | awk -F/ {'print $1'}`
computer_search=""$computer\$""
comment=`cat /tmp/novocomputador | awk -F/ {'print $2'}`
group=`cat /tmp/novocomputador | awk -F/ {'print $3'}`
group_search=""$group\$""

rm -f /tmp/novocomputador

case $opcao in
    0) Computador=`cat /etc/passwd | awk -F: {'print $1'} | grep -e "$computer_search"`
       Grupo=`cat /etc/group | awk -F: {'print $1'} | grep -e "$group_search"`
       if [ -z $Computador ]; then
          if [ ! -z $Grupo ]; then
              useradd -c "$comment" -g $group -d /dev/null -s /bin/false $computer$;
         smbpasswd -a -m $computer;
         Computador_Adicionado;
         rm -f /tmp/novocomputador;
          else
              ComputadorGrupo_Inexistente
          fi
       else
          Computador_Existente;
          rm -f /tmp/novocomputador;
       fi;;
    1) Menu_Computador;;
    255) Mensagem_Finalizar;;
esac
}


################# Computador - Remover computador
Computador_Remover() {
Xdialog --title "Remover Computador"\
        --cancel-label "Menu anterior"\
        --inputbox "\nDigite o nome do computador que deve ser removido. \n\n ESTA AÇÃO NÃO PODERÁ SER DESFEITA.\n\n" 13 45 2> /tmp/input.tmp.$$

opcao=$?
input=`cat /tmp/input.tmp.$$`
input_search=""$input\$""

rm -f /tmp/input.tmp.$$

case $opcao in
    0) Computador=`cat /etc/samba/smbpasswd | awk -F: {'print $1'} | grep -e "$input_search"`
       if [ ! -z $Computador ]; then
             smbpasswd -x $input;
        userdel $input;
             Computador_Removido;
       else
             Computador_Inexistente;
       fi;;
    1) Menu_Computador;;
    255) Mensagem_Finalizar;;
esac
}


Mensagem_Inicial;

Scripts recomendados

Conversor numérico

Envio de backps de bancos por ftp com notificação por email

Monitorando processo do Squid em diferentes redes

MySamba Server 2.0

Sincronização entre Servidores de Impressão


  

Comentários
[1] Comentário enviado por removido em 13/06/2007 - 10:08h

como usar?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts