Criando usuários através de arquivo texto
Publicado por Rodrigo Ferreira Valentim 06/09/2004
[ Hits: 8.690 ]
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; }
Balanceamento de parênteses utilizando Pilha
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)
Gestão de Ambiente em uma rede Linux (3)