Criando usuários através de arquivo texto
Publicado por Rodrigo Ferreira Valentim 06/09/2004
[ Hits: 8.778 ]
Homepage: http://www.unitech.pro.br
Esse script tem como objetivo lêr um arquivo texto e através dele criar usuários com suas senhas criptografadas pelo crypt.
No fonte está um exemplo considerando o primeiro campo do arquivo um número de matricula, segundo o nome e terceiro o endereço. O separador entre esses campos é o ;.
Para diferenciar cada usuário, foi escolhida a matricula como usuário e o primeiro nome como senha, mas através dos comentários isso é facilmente configurável.
Para mais detalhes me mande um e-mail.
/******************************************************************************\
UniTech
Projeto.....: Contribuicao para o site Viva o Linux
Modulo......: popula
Descricao...: Atraves de um arquivo texto, popula o cadastro de usuarios no
sistema com nome e senha criptografada
Autor.......: Rodrigo Ferreira Valentim
Data........: 06/09/2004
Compilacao..: gcc -lcrypt -o popula popula.c
Teste.......: ./popula arq
\******************************************************************************/
#include <stdio.h>
#include <unistd.h>
#define SEPARADOR ';'
void AdicionaUser( char *Nom, char *Sen)
{
char *p;
char Sys[128];
char Salt[3];
char rndChar[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./";
// Faz uma pausa de 1 segundo para o time nao se repetir em srandom
// isso devido a srandom nao ser exatamente randomico e sim baseado
// em um equacao que permitiria repetir o mesmo valor se chamado em
// um instante de tempo muito curto
sleep(1);
// Pega um numero randomico de acordo com o tempo
srandom(time(0));
// Seta o salt de crypt de forma randomica
// Para mais informacoes: man 3 crypt
Salt[0] = rndChar[random() % 64];
Salt[1] = rndChar[random() % 64];
Salt[3] = 0;
// Configuro a string que sera executada para cadastro do usuario
snprintf(Sys, sizeof(Sys), "useradd u%s -p %s", Nom, crypt(Sen, Salt));
// Acompanho pela tela o nome e a senha do usuario em forma de texto
// Acompanho tambem a string de execucao com a senha criptografada
printf(" Nom = [%s]\n Sen = [%s]\n Sys = [%s]\n", Nom, Sen, Sys);
// Executo a string de comando como se estivesse no console
system(Sys);
}
void PopulaDados( char *Reg )
{
char *p;
char *pp;
// p fica com a posicao do fim do primeiro registro
p = strchr (Reg, SEPARADOR);
// Se encontrou o fim do primeiro registro
if (p) {
// Separa o primeiro registro do resto com um NULL em Reg
*p = 0x00;
// p se posiciona no inicio do segundo registro em Reg
++p;
// pp se posiciona no fim do primeiro nome do usuario em p
pp = strchr (p, ' ');
if (pp) {
// pp separa o primeiro nome do resto do registro em p
*pp = 0x00;
// Chama funcao que vai adicionar o usuario no sistema
AdicionaUser (Reg, p);
}
}
}
int main(int argc, char *argv[])
{
char sAux[202];
FILE *fd;
// Consiste se foi passado como parametro somente o nome do arquivo
if (argc != 2) {
printf("Parametro invalido.\n\nChame popula <arquivo>\n\n");
return;
}
// Abre o arquivo, se nao conseguir avisa
if( (fd = fopen(argv[1], "r")) == NULL) {
printf("Nao foi encontrado o arquivo de configuracao.\n\n");
return 0;
}
// Le linha a linha do arquivo chamando a funcao PopulaDados
while(fgets(sAux, 200, fd))
PopulaDados(sAux);
// Fecha o arquivo
fclose(fd);
return 1;
}
Agenda eletronica com banco de dados em arquivo texto
Organizar variáveis em ordem crescente
Programa para demonstrar operadores
Exceções em C através de try-throw-catch
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (4)
Warcraft II Remastered no Linux? (3)









