files.c

Ir para a documentação deste ficheiro.
00001 
00010 #include "files.h"
00011   
00025 int parse_maquinas(FILE *file, HASHTABLE_T *maquinas)
00026   {
00027   char* line = NULL, chave[MAX_IP_LEN + 1] = {'\0'}, logins[MAX_LOGIN_LIST_LEN + 1] = {'\0'}, pastas[MAX_FOLDER_LIST_LEN + 1] = {'\0'};
00028   size_t size;
00029   LISTA_GENERICA_T *lista_pastas = NULL;
00030   HASHTABLE_T *hash_logins = NULL;
00031   size_t  bufsize = 512;
00032   char *token = NULL, *token_buf = NULL, *buf = (char *) malloc(sizeof(char) * bufsize);
00033   t_maquina *maquina;
00034   struct hostent ret, *result;
00035   int error, ip_error = 0;
00036   
00037   if (!file)
00038         return ERROR_VAL;
00039   
00040   #ifdef SHOW_DEBUG
00041     DEBUG("A inciar a leitura do ficheiro de maquinas.");
00042   #endif
00043   
00044   while ((getline(&line, &size, file)) != -1)
00045     if(sscanf(line, "%[^#]", line) > 0)
00046       {
00047       sscanf(line, "%[^;];%[^;];%s", chave, logins, pastas);
00048       if(strlen(chave) < 1 || strlen(logins) < 1 || strlen(pastas) < 1)
00049         {
00050         WARNING("Formato do ficheiro de maquinas incorrecto. IP, conjunto de logins ou pastas invalidos");
00051         continue;
00052         }
00053       result  = NULL; 
00054       if(validate_ip(chave))
00055         {
00056         while((ip_error = gethostbyname_r(chave, &ret, buf, bufsize, &result, &error)) == ERANGE)
00057           {
00058           bufsize *= 2;
00059           buf = (char *) malloc(sizeof(char) * bufsize);
00060           }
00061         if(ip_error || result == NULL)
00062           {
00063           WARNING("Erro ao resolver o ip da maquina %s", chave);
00064           continue;
00065           }
00066         }
00067       hash_logins = tabela_criar(HASHBASE, free);
00068       lista_pastas = lista_criar(free);
00069       token = strtok_r(logins, "|", &token_buf);
00070       tabela_inserir(hash_logins, strdup(token), strdup(token));
00071       while((token = strtok_r(NULL, "|", &token_buf)))
00072         {
00073         if(strlen(token) > MAX_LOGIN_LEN)
00074           {
00075           WARNING("Login demasiado grande.");
00076           continue;
00077           }
00078         tabela_inserir(hash_logins, strdup(token), strdup(token));
00079         }
00080 
00081       token = strtok_r(pastas, "|", &token_buf);
00082       lista_inserir(lista_pastas, strdup(token));
00083       while((token = strtok_r(NULL, "|", &token_buf)))
00084         lista_inserir(lista_pastas, strdup(token));
00085       
00086       /* Se foi necessario resolver o nome o IP da maquina estara na estrutura 'result'
00087        * caso contrario sera usado o valor existente na variavel 'chave'*/
00088       if(result)
00089         maquina = create_maquina(result->h_addr_list[0], hash_logins, lista_pastas);
00090       else
00091         maquina = create_maquina(chave, hash_logins, lista_pastas);
00092       tabela_inserir(maquinas, maquina->ip, maquina);
00093       }
00094   
00095   #ifdef SHOW_DEBUG
00096     DEBUG("A terminar a leitura do ficheiro de maquinas.");
00097   #endif
00098   
00099   if(!feof(file))
00100         return ERROR_VAL;
00101   if (line)
00102    free(line);
00103   free(buf);
00104   return ALL_GOES_WELL;
00105   }
00106 
00121 int parse_contas(FILE *file, HASHTABLE_T *contas)
00122   {
00123   char* line = NULL;
00124   size_t size;
00125   char login[MAX_LOGIN_LEN + 1] = {'\0'}, pass[MAX_PASS_LEN + 1] = {'\0'};
00126     
00127   if (!file)
00128         return ERROR_VAL;
00129 
00130   #ifdef SHOW_DEBUG
00131     DEBUG("A inciar a leitura do ficheiro de contas.");
00132   #endif
00133 
00134   while (getline(&line, &size, file) != -1)
00135     if(sscanf(line, "%[^#]", line) > 0)
00136       {
00137       sscanf(line, "%[^;];%s", login, pass);
00138       
00139       #ifdef SHOW_DEBUG
00140         DEBUG("Linha do ficheiro de contas lida: ^%s^", line);
00141       #endif
00142       
00143       if(strlen(login) < 1  || strlen(pass) < 1)
00144         {
00145         
00146         #ifdef SHOW_DEBUG
00147         DEBUG("LOGIN ou PASSWORD sem tamanho valido.");
00148         #endif
00149         
00150         WARNING("Formato do ficheiro de contas incorrecto. Login ou password invalidos.");
00151         continue;
00152         }
00153       if(strlen(login) > MAX_LOGIN_LEN  || strlen(pass) > MAX_PASS_LEN)
00154         {
00155         
00156         #ifdef SHOW_DEBUG
00157         DEBUG("LOGIN ou PASSWORD exederam o tamanho permitido.");
00158         #endif
00159         
00160         WARNING("Tamanho do login ou da password demasiado grande.");
00161         continue;
00162         }
00163       tabela_inserir(contas, login, create_conta(login, pass));
00164       }
00165   
00166   #ifdef SHOW_DEBUG
00167     DEBUG("A terminar a leitura do ficheiro de contas.");
00168   #endif
00169   
00170   if(!feof(file))
00171         return ERROR_VAL;
00172   if (line)
00173    free(line);
00174   return ALL_GOES_WELL;
00175   }

Gerado em Fri Nov 25 18:42:04 2005 para Securitas por  doxygen 1.4.4