[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.
======( )===( )=============
\ ( ) /
\_) (_/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- adduser.awk --- Um clone do utilitario adduser.,
.:::: Marcio ::::. <=