Criando usuários através de arquivo texto

Publicado por Rodrigo Ferreira Valentim 06/09/2004

[ Hits: 8.557 ]

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

Os cincos primeiros termos da séries de fourier

Utilizando acentuação na linguagem C

Pipeling

Resposta Dinâmica!

Agenda em C


  

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