shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

adduser.awk --- Um clone do utilitario adduser.


From: .:::: Marcio ::::.
Subject: adduser.awk --- Um clone do utilitario adduser.
Date: Fri, 2 Jul 2004 18:13:39 -0300

Oi pessoal,


        Sou eu novamente com meus clones.

        Antes que alguém reclame: faço clones de outros 
programas utilizando o Awk, porque gosto da linguagem
e é um ótimo jeito de me aperfeiçoar na mesma.

        Abaixo, um clone do programa 'adduser'.

        Uso:

        # adduser.awk [user]


        OBS.: Executar como root.

######## INICIO

#!/bin/awk -f

# adduser.awk --- Simula o utilitário 'adduser'.
#
# Márcio Mendonça --- address@hidden
# 13-nov-2003
# 

#======================================================================#
# Função 'input' recebe uma string digitada pelo usuario.              #
# OBS.: Se não for passada nenhuma string de formatação e              #
# passar algum valor default, no lugar da string de formatação,        #
# coloar um "" .                                                       #
#======================================================================#

function input(str, strf, var_def,              var)
{
        if (strf)
                printf str, strf 
        else
                printf str

        if ((getline var))
                if (length(var) == 0)
                        if (var_def)
                                var = var_def
        else
                var = "null"
        return var
}
                
# Função 'ch_uid' checa pelo próximo uid após 500 disponivel.
function ch_uid(        oldfs, temp_uid, command)
{
        oldfs = FS
        FS = ":"
        while((getline < "/etc/passwd") > 0)
                if ($3 > 500)
                        temp_uid = $3
        close("/etc/passwd")

        FS = oldfs
        return temp_uid + 1
}

# Função 'ch_gid' checa pelo próximo gid apos 70 disponível.
function ch_gid(        oldfs, temp_gid, command)
{
        oldfs = FS
        FS = ":"
        while((getline < "/etc/passwd") > 0)
                if ($4 > 50)
                        temp_gid = $4
        close("/etc/passwd")

        FS = oldfs
        return temp_gid + 1
}

BEGIN \
{
        # Verificando se foi passado algum argumento ao adduser ...
        if (ARGC > 1)
        {
                arg = ARGV[1]
                ARGV[1] = ""
        }

        # Emitindo uma mensagem inicial...
        print "Adding a new user."
        print "The user name should not exceed 8 characters in length,"
        print "or you may run into problems later\n\n\n"

        if (!arg)
                login = input("Enter login name for new account(^C to quit): " )
        else
                login = arg

        group = input("Editing a new group for the user[%s]: ", login, login)

        name = input("Full name: ")

        new_gid = ch_gid()
        
        gid = input("GID[%d]: ", new_gid, new_gid) 

        print "Checking for available UID after 500 ..."
        new_uid = ch_uid()

        print "First unused UID is ", new_uid
        uid = input("UID[%d]: ", new_uid, new_uid)

        home_default = ("/home/" login)
        home = input("Home directory[%s]: ", home_default, home_default)

        shell_default = "/bin/bash"
        shell = input("Shell [/bin/bash]: ", "", shell_default)

        senha = input("Senha: ")
        

        # Formatando a linha de entrada para o arquivo /etc/passwd ...
        passwd_line = sprintf("%s::%d:%d:%s:%s:%s", login,
        uid, gid, name, home, shell)

        shadow_line = sprintf("%s::::::::", login)

        group_line = sprintf("%s::%d:", group, gid)

        printf "\n\nInformation for new user %s\n", login
        printf "Home directory: %s    Shell: %s\n", home, shell
        printf "Passwd: %s       uid: %d      gid: %d\n", senha, uid, gid

        yesno = input("\n\nIs this correct? [Y/n]: ", "", "y")

        if (yesno == "y" || yesno == "Y"){
                printf "\n\nAdding user [%s] and making directory [%s]\n", 
login, home
                print passwd_line >> "/etc/passwd"
                print shadow_line >> "/etc/shadow" 
                print group_line >> "/etc/group"
                
                # Processando a senha do usuário ...
                arq_senha = ("/tmp/" login "-passwd") 
                print senha > arq_senha
                system ("passwd --stdin " login "< " arq_senha)

                system("rm -f /tmp/*-passwd  &>/dev/null")
                
                system("mkdir " home)
                
                print "Adding the files from /etc/skel directory:"
                printf ("cp -v %s/.* %s", "/etc/skel", home) | "/bin/bash"
                close("/bin/bash") 

                system("chown " login "." group " " home " -R")}
        else
        {
                print "\n\nProgram aborted."
                exit
        }
}
        
############ FIM.
        

------
            ////
          ( O O )
=======oOO==(_)==OOo============
 Márcio Alexandre S. Mendonça
 address@hidden
 Linux User #298595
      .oooO   Oooo.
======(   )===(   )=============
       \ (     ) /
        \_)   (_/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]