Criando usuários através de arquivo texto

Publicado por Rodrigo Ferreira Valentim 06/09/2004

[ Hits: 8.465 ]

Homepage: http://www.unitech.pro.br

Download popula.tar




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.

  



Esconder código-fonte

/******************************************************************************\
                               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;
}

Scripts recomendados

Jogo da cobrinha (Snake II) refeito em C e C++

Comando strieql

Cálculo do dia da semana

Matrizes esparsas, produto por escalar e produto por um vetor

Um pouco de fisica


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts