hg_filter.c
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:3k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* HostsGatherer
  2.  *
  3.  * Copyright (C) 1999 Renaud Deraison
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Library General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Library General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Library General Public
  16.  * License along with this library; if not, write to the Free
  17.  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  */
  20.  
  21. #include <includes.h>
  22. #include "hosts_gatherer.h"
  23. #include  "hg_subnet.h"
  24. /*
  25.  * Returns 1 if the host must be filtered,
  26.  * that is, it must NOT be included in the 
  27.  * list.
  28.  * Returns 0 if it must be included in the list
  29.  */
  30. int 
  31. hg_filter_host(globals, hostname, addr)
  32.  struct hg_globals * globals;
  33.  char * hostname;
  34.  struct in_addr addr;
  35. {
  36. #if DISABLED
  37.  struct hg_host * list = globals->host_list;
  38.  
  39. /* 
  40.  
  41.  int i;
  42.  char * copy;
  43. int len = strlen(hostname);
  44.  copy = malloc(len+1);
  45.  strncpy(copy, hostname, len);
  46.  
  47.   for(i=0;i<len;i++)copy[i]=tolower(copy[i]);
  48.  */
  49.  
  50.  
  51.  while(list->next)
  52.  {
  53.   if(list->use_max)
  54.   {
  55.    if((ntohl(addr.s_addr) >= ntohl(list->min.s_addr))&&
  56.       (ntohl(addr.s_addr) <= ntohl(list->max.s_addr)))
  57.        {
  58. /* free(copy); */
  59.  return 1;
  60. }
  61.   }
  62.   else if((list->addr.s_addr == addr.s_addr))
  63.     {
  64.      /* free(copy); */
  65.      return(1);
  66.     }
  67.   list = list->next;
  68.  }
  69.  /*free(copy);*/
  70. #endif
  71.  return(0);
  72. }
  73. /*
  74.  * Returns 1 if the subnet must NOT
  75.  * be tested
  76.  */
  77. int
  78. hg_filter_subnet(globals, addr, netmask)
  79.  struct hg_globals * globals;
  80.  struct in_addr addr;
  81.  int    netmask;
  82. {
  83.  struct hg_host * list = globals->tested;
  84.  struct in_addr subnet;
  85.  
  86.  while(list && list->next)
  87.  {
  88.   struct in_addr subnet_2;
  89.   if(list->addr.s_addr)
  90.   {
  91.    if(addr.s_addr != list->addr.s_addr)
  92.    {
  93.     int l_netmask = list->cidr_netmask < netmask ? list->cidr_netmask:netmask;
  94.     subnet   = cidr_get_first_ip(addr, l_netmask);
  95.     subnet_2 = cidr_get_first_ip(list->addr, l_netmask);
  96.     if(subnet.s_addr == subnet_2.s_addr)return(1);
  97.    }
  98.   }
  99.   list = list->next;
  100.  }
  101.  return(0);
  102. }
  103. /*
  104.  * Returns 1 if the domain must NOT
  105.  * be tested
  106.  */
  107. int
  108. hg_filter_domain(globals, domain)
  109.  struct hg_globals * globals;
  110.  char * domain;
  111. {
  112.  struct hg_host * list = globals->tested;
  113.  if(!domain)return(0);
  114.  while(list && list->next)
  115.  {
  116.   if(list->domain)if(!strcmp(list->domain, domain))return(1);
  117.   list = list->next;
  118.  }
  119.  return(0);
  120. }
  121.