Beispiel #1
0
void *dnsbl_table_search(struct ci_lookup_table *table, void *key, void ***vals)
{
    char dnsname[CI_MAXHOSTNAMELEN + 1];
    char *server;
    ci_str_vector_t  *v;
    struct dnsbl_data *dnsbl_data = table->data;

    if(table->key_ops != &ci_str_ops) {
	ci_debug_printf(1,"Only keys of type string allowed in this type of table:\n");
	return NULL;
    }
    server = (char *)key;

    if (dnsbl_data->cache && ci_cache_search(dnsbl_data->cache, server, (void **)&v, table->allocator)) {
	ci_debug_printf(6,"dnsbl_table_search: cache hit for %s value %p\n", server,  v);
        if (!v) {
            *vals = NULL;
            return NULL;
        }
        *vals = (void **)ci_vector_cast_to_voidvoid(v);
        return key;
    }

    snprintf(dnsname, CI_MAXHOSTNAMELEN, "%s.%s", server, dnsbl_data->check_domain);
    dnsname[CI_MAXHOSTNAMELEN] = '\0';
    v = resolv_hostname(dnsname);
    if (dnsbl_data->cache)
        ci_cache_update(dnsbl_data->cache, server, v);
    
    if (!v)
        return NULL;

    *vals = (void **)ci_vector_cast_to_voidvoid(v);
    return key;
}
Beispiel #2
0
int open_connection_to( const char *remote_name, int remote_port ){
  int fd;
  struct sockaddr_in serv_addr;

  if( (fd = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) < 0 ){
    perror( "ERROR opening socket" );
    return 0;
  }

  serv_addr.sin_family = AF_INET;
  serv_addr.sin_port   = htons( remote_port );

  if( resolv_hostname( remote_name, &serv_addr ) == -1 ){
    return 0;
  }

  if( connect( fd, (struct sockaddr *)&serv_addr, sizeof( serv_addr )) == -1 ){
    perror( "ERROR connecting" );
    return 0;
  }

  return fd;
}