home *** CD-ROM | disk | FTP | other *** search
/ Power Hacker 2003 / Power_Hacker_2003.iso / E-zine / Magazines / crh / freebsd / rootkit / sniffit.0.3.5 / sn_cfgfile.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-05-27  |  12.1 KB  |  419 lines

  1. /* Sniffit Cfgfile source file                                            */
  2. /*   - by: Brecht Claerhout                                               */
  3.  
  4. #include "sn_config.h"
  5. #include <stdio.h>
  6. #include "sn_defines.h"
  7. #include "sn_structs.h"
  8. #include "sn_cfgfile.h"           
  9. /* #include "sn_generation.h" */
  10.  
  11. extern struct cfg_file_contense *select_from_list; /* pointers for cfg lists */ 
  12. extern struct cfg_file_contense *select_to_list;
  13. extern struct cfg_file_contense *deselect_from_list;
  14. extern struct cfg_file_contense *deselect_to_list;
  15.  
  16. extern int select_from_length;               /* length of cfg lists  */ 
  17. extern int select_to_length;
  18. extern int deselect_from_length;
  19. extern int deselect_to_length;
  20. extern int Priority;        /* The higher the priority, the more important */
  21. extern char dot_notation[20];                       /* for easy working, Q&D */
  22. extern char Logfile[250];                                                              
  23.  
  24. void clear_list_buffer (struct cfg_file_contense *help)
  25. {
  26. help->host[0]=0;
  27. help->priority=0;
  28. help->port=0;
  29. help->wildcard=0;
  30. }
  31.  
  32. struct cfg_file_contense *adjust_select_from_list (void)
  33. {
  34. Priority++;
  35. select_from_length++; 
  36.  
  37. if(select_from_list==NULL)
  38.      {
  39.      select_from_list=(struct cfg_file_contense *)malloc(sizeof(struct cfg_file_contense));
  40.      }
  41. else {
  42.      select_from_list=(struct cfg_file_contense *)realloc(select_from_list,
  43.             select_from_length*sizeof(struct cfg_file_contense));
  44.      }
  45. if(select_from_list==NULL)
  46.     {printf("Sniffit hartattack... out of memory!\n"); exit(1);}
  47. clear_list_buffer(&(select_from_list[select_from_length-1])); 
  48. return &(select_from_list[select_from_length-1]); 
  49. }
  50.  
  51. struct cfg_file_contense *adjust_select_to_list (void)
  52. {
  53. Priority++;
  54. select_to_length++; 
  55.  
  56. if(select_to_list==NULL)
  57.      {
  58.      select_to_list=(struct cfg_file_contense *)malloc(sizeof(struct cfg_file_contense));
  59.      }
  60. else
  61.      {
  62.      select_to_list=(struct cfg_file_contense *)realloc(select_to_list,
  63.             select_to_length*sizeof(struct cfg_file_contense));
  64.      };
  65. if(select_to_list==NULL)
  66.     {printf("Sniffit hartattack... out of memory!\n"); exit(1);}
  67. clear_list_buffer(&(select_to_list[select_to_length-1]));
  68. return &(select_to_list[select_to_length-1]);
  69. }
  70.  
  71. struct cfg_file_contense *adjust_deselect_from_list (void)
  72. {
  73. Priority++;
  74. deselect_from_length++; 
  75. if(deselect_from_list==NULL)
  76.      {
  77.      deselect_from_list=(struct cfg_file_contense *)malloc(sizeof(struct cfg_file_contense));
  78.      }
  79. else
  80.      {
  81.      deselect_from_list=(struct cfg_file_contense *)realloc(deselect_from_list,
  82.             deselect_from_length*sizeof(struct cfg_file_contense));
  83.      }
  84. if(deselect_from_list==NULL)
  85.     {printf("Sniffit hartattack... out of memory!\n"); exit(1);}
  86. clear_list_buffer(&(deselect_from_list[deselect_from_length-1]));
  87. return (&(deselect_from_list[deselect_from_length-1]));
  88. }
  89.  
  90. struct cfg_file_contense *adjust_deselect_to_list (void)
  91. {
  92. Priority++;
  93. deselect_to_length++; 
  94.  
  95. if(deselect_to_list==NULL)
  96.      {
  97.      deselect_to_list=(struct cfg_file_contense *)malloc(sizeof(struct cfg_file_contense));
  98.      }
  99. else
  100.      {
  101.      deselect_to_list=(struct cfg_file_contense *)realloc(deselect_to_list,
  102.             deselect_to_length*sizeof(struct cfg_file_contense));
  103.      }
  104. if(deselect_to_list==NULL)
  105.     {printf("Sniffit hartattack... out of memory!\n"); exit(1);}
  106. clear_list_buffer(&(deselect_to_list[deselect_to_length-1]));
  107. return &(deselect_to_list[deselect_to_length-1]);
  108. }
  109.  
  110. char *clean_string (char *string)
  111. {
  112. char help[20];
  113. int i, j;
  114.  
  115. j=0;
  116. for(i=0;i<strlen(string);i++)
  117.     {
  118.     if( (isalnum(string[i]))||(string[i]=='.') )
  119.         {
  120.         help[j]=string[i];
  121.         help[j+1]=0;
  122.         }
  123.     j++;
  124.     }
  125. strcpy(string, help);
  126. return string;
  127. }
  128.  
  129. char *clean_filename (char *string)
  130. {
  131. char help[20];
  132. int i, j;
  133.  
  134. j=0;
  135. for(i=0;i<strlen(string);i++)
  136.     {
  137.     if( !(iscntrl(string[i])) && !(isspace(string[i])) )
  138.         {
  139.         help[j]=string[i];
  140.         help[j+1]=0;
  141.         }
  142.     j++;
  143.     }
  144. strcpy(string, help);
  145. return string;
  146. }
  147.  
  148. void make_nr_dot (char *host)
  149. {
  150. unsigned long hostnr;
  151. unsigned char *digit;
  152. char help[255];
  153.  
  154. strcpy(help, host);
  155. clean_string(help);
  156. hostnr=getaddrbyname(help);
  157. digit=(char *)&hostnr;
  158. sprintf(dot_notation,"%u.%u.%u.%u",digit[0],digit[1],digit[2],digit[3]);
  159. }
  160.  
  161. void interprete_line (char *line)
  162. {
  163. struct cfg_file_contense *help, *helpp; 
  164. char *field;
  165. size_t i;
  166.  
  167. field=strtok(line," ");
  168. if(field!=NULL)
  169.     {
  170.     strlower(field);
  171.     if(strcmp(strlower(field),"logfile")==0)
  172.       {
  173.       field=clean_filename(strtok(NULL," "));
  174.            if(field != NULL) strcpy(Logfile,field);
  175.       }
  176.     if(strcmp(strlower(field),"select")==0)
  177.       {
  178.       field=strtok(NULL," ");
  179.           if(strcmp(strlower(field),"from")==0)
  180.         {
  181.             field=strtok(NULL," ");
  182.             if(strcmp(strlower(field),"host")==0)  /* select from host */
  183.           {
  184.           help=adjust_select_from_list();
  185.               make_nr_dot(strtok(NULL," "));
  186.               strcpy(help->host,dot_notation);
  187.               if( (field=strtok(NULL," "))!=NULL) 
  188.             help->port=atoi(field);
  189.           help->priority=Priority;
  190.               return;
  191.            }
  192.             if(strcmp(strlower(field),"port")==0)  /* select from port */
  193.           {                           
  194.           help=adjust_select_from_list();
  195.           help->port=atoi( strtok(NULL," ") ); 
  196.           help->priority=Priority;
  197.           return;
  198.           }
  199.             if(strcmp(strlower(field),"mhosts")==0)  /* select from mhosts */
  200.           {
  201.           help=adjust_select_from_list();
  202.           strcpy(help->host, clean_string(strtok(NULL," ")));
  203.           if( (field=strtok(NULL," "))!=NULL)
  204.             help->port=atoi(field);
  205.           help->priority=Priority;
  206.           help->wildcard=1;
  207.            return;
  208.           }
  209.          }
  210.           if(strcmp(strlower(field),"to")==0)
  211.         {
  212.             field=strtok(NULL," ");
  213.             if(strcmp(strlower(field),"host")==0)  /* select to host */
  214.           {
  215.           help=adjust_select_to_list();
  216.               make_nr_dot(strtok(NULL," "));
  217.           strcpy(help->host,dot_notation);
  218.           if( (field=strtok(NULL," "))!=NULL)
  219.             help->port=atoi(field);
  220.           help->priority=Priority;
  221.               return;
  222.            }
  223.             if(strcmp(strlower(field),"port")==0)  /* select to port */
  224.           {                           
  225.           help=adjust_select_to_list();
  226.           help->port=atoi( strtok(NULL," ") ); 
  227.           help->priority=Priority;
  228.               return;
  229.            }
  230.             if(strcmp(strlower(field),"mhosts")==0)  /* select to mhosts */
  231.           {                           
  232.           help=adjust_select_to_list();
  233.           strcpy(help->host, clean_string(strtok(NULL," ")));
  234.           if( (field=strtok(NULL," "))!=NULL)
  235.             help->port=atoi(field);
  236.           help->priority=Priority;
  237.           help->wildcard=1;
  238.               return;
  239.            }
  240.          }
  241.           if(strcmp(strlower(field),"both")==0)
  242.         {
  243.             field=strtok(NULL," ");
  244.             if(strcmp(strlower(field),"host")==0)  /* select both host */
  245.           {
  246.           help=adjust_select_from_list();
  247.           helpp=adjust_select_to_list();
  248.               make_nr_dot(strtok(NULL," "));
  249.           strcpy(help->host,dot_notation);
  250.           strcpy(helpp->host,dot_notation);
  251.           if( (field=strtok(NULL," "))!=NULL)
  252.             {help->port=atoi(field); helpp->port=atoi(field);}
  253.           help->priority=Priority;
  254.            helpp->priority=Priority;
  255.               return;
  256.           }
  257.             if(strcmp(strlower(field),"port")==0)  /* select both port */
  258.           {                           
  259.           help=adjust_select_from_list();
  260.           helpp=adjust_select_to_list();
  261.           field=strtok(NULL," "); 
  262.           help->port=atoi(field); 
  263.           helpp->port=atoi(field); 
  264.           help->priority=Priority;
  265.           helpp->priority=Priority;
  266.               return;
  267.            }
  268.             if(strcmp(strlower(field),"mhosts")==0)  /* select both mhosts */
  269.           {                           
  270.           help=adjust_select_from_list();
  271.           helpp=adjust_select_to_list();
  272.           field=clean_string(strtok(NULL," "));
  273.           strcpy(help->host, field);
  274.           strcpy(helpp->host, field);
  275.           if( (field=strtok(NULL," "))!=NULL)
  276.             {help->port=atoi(field); helpp->port=atoi(field);}
  277.           help->priority=Priority;
  278.           helpp->priority=Priority;
  279.            help->wildcard=1;
  280.           helpp->wildcard=1;
  281.               return;
  282.           }
  283.          }
  284.       }
  285.     if(strcmp(strlower(field),"deselect")==0)
  286.       {
  287.       field=strtok(NULL," ");
  288.           if(strcmp(strlower(field),"from")==0)
  289.         {
  290.             field=strtok(NULL," ");
  291.             if(strcmp(strlower(field),"host")==0)  /* select from host */
  292.           {
  293.           help=adjust_deselect_from_list();
  294.               make_nr_dot(strtok(NULL," "));
  295.           strcpy(help->host,dot_notation);
  296.           if( (field=strtok(NULL," "))!=NULL)
  297.             help->port=atoi(field);
  298.           help->priority=Priority;
  299.               return;
  300.            }
  301.             if(strcmp(strlower(field),"port")==0)  /* select from port */
  302.           {                           
  303.           help=adjust_deselect_from_list();
  304.           help->port=atoi(strtok(NULL," ")); 
  305.           help->priority=Priority;
  306.               return;
  307.            }
  308.             if(strcmp(strlower(field),"mhosts")==0)  /* select from mhosts */
  309.           {                           
  310.           help=adjust_deselect_from_list();
  311.           strcpy(help->host, clean_string(strtok(NULL," ")));
  312.           if( (field=strtok(NULL," "))!=NULL)
  313.             help->port=atoi(field);
  314.           help->priority=Priority;
  315.            help->wildcard=1;
  316.               return;
  317.            }
  318.          }
  319.           if(strcmp(strlower(field),"to")==0)
  320.         {
  321.             field=strtok(NULL," ");
  322.             if(strcmp(strlower(field),"host")==0)  /* deselect to host */
  323.           {
  324.           help=adjust_deselect_to_list();
  325.               make_nr_dot(strtok(NULL," "));
  326.           strcpy(help->host,dot_notation);
  327.           if( (field=strtok(NULL," "))!=NULL)
  328.             help->port=atoi(field);
  329.           help->priority=Priority;
  330.               return;
  331.            }
  332.             if(strcmp(strlower(field),"port")==0)  /* deselect to port */
  333.           {                           
  334.           help=adjust_deselect_to_list();
  335.           help->port=atoi(strtok(NULL," ")); 
  336.           help->priority=Priority;
  337.               return;
  338.            }
  339.             if(strcmp(strlower(field),"mhosts")==0)  /* deselect to mhosts */
  340.           {                           
  341.           help=adjust_deselect_to_list();
  342.           strcpy(help->host, clean_string(strtok(NULL," ")));
  343.           if( (field=strtok(NULL," "))!=NULL)
  344.             help->port=atoi(field);
  345.           help->priority=Priority;
  346.            help->wildcard=1;
  347.               return;
  348.           }
  349.          }
  350.           if(strcmp(strlower(field),"both")==0)
  351.         {
  352.             field=strtok(NULL," ");
  353.             if(strcmp(strlower(field),"host")==0)  /* deselect both host */
  354.           {
  355.           help=adjust_deselect_from_list();
  356.           helpp=adjust_deselect_to_list();
  357.               make_nr_dot(strtok(NULL," "));
  358.           strcpy(help->host,dot_notation);
  359.           strcpy(helpp->host,dot_notation);
  360.           if( (field=strtok(NULL," "))!=NULL)
  361.             {help->port=atoi(field); helpp->port=atoi(field);}
  362.           help->priority=Priority;
  363.           helpp->priority=Priority;
  364.               return;
  365.            }
  366.             if(strcmp(strlower(field),"port")==0)  /* deselect both port */
  367.           {                           
  368.           help=adjust_deselect_from_list();
  369.           helpp=adjust_deselect_to_list();
  370.           field=strtok(NULL," "); 
  371.           help->port=atoi(field); 
  372.           helpp->port=atoi(field); 
  373.           help->priority=Priority;
  374.           helpp->priority=Priority;
  375.               return;
  376.           }
  377.             if(strcmp(strlower(field),"mhosts")==0)  /* deselect both mhosts */
  378.           {                           
  379.           help=adjust_deselect_from_list();
  380.           helpp=adjust_deselect_to_list();
  381.           field=clean_string(strtok(NULL," "));
  382.           strcpy(help->host, field);
  383.           strcpy(helpp->host, field);
  384.           if( (field=strtok(NULL," "))!=NULL)
  385.             {help->port=atoi(field); helpp->port=atoi(field);}
  386.           help->priority=Priority;
  387.           helpp->priority=Priority;
  388.            help->wildcard=1;
  389.            helpp->wildcard=1;
  390.               return;
  391.            }
  392.          }
  393.        }
  394.     }
  395. }
  396.  
  397. void read_cfg_file (char *file)
  398. {
  399. FILE *cfgfile;
  400. size_t line_length;
  401. char lineptr[260];
  402.  
  403. select_from_list=NULL; select_to_list=NULL;
  404. deselect_from_list=NULL; deselect_to_list=NULL;
  405. Priority=0;
  406.  
  407. if((cfgfile = fopen(file,"r"))==NULL)
  408.     {printf("Couldn't find config file... giving up.\n"); exit(1);}
  409. while(feof(cfgfile)==0)
  410.     {
  411.     fgets(lineptr,259,cfgfile);
  412.         if(feof(cfgfile)==0)
  413.        {
  414.        interprete_line(lineptr);}
  415.     }
  416. fclose(cfgfile);
  417. };
  418.  
  419.