Criando usuários através de arquivo texto
Publicado por Rodrigo Ferreira Valentim 06/09/2004
[ Hits: 8.782 ]
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;
}
Alocando espaço para uma matriz dinamicamente
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
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? (12)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)
Problema em SSD ao dar boot LinuxMint LMDE FAYE 64 (3)









