X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fserver.c;h=b348269d59dd15544eace1b9c399f86b8fe67e9c;hb=9c0f9c65093cfa53d45f9b68782321eb8063a032;hp=569b44eb2c8f6abb389eeaa1acfd3071b7117b11;hpb=959f3aa980c6dc4a9d39b311638ca471d7ff310d;p=catta diff --git a/avahi-core/server.c b/avahi-core/server.c index 569b44e..b348269 100644 --- a/avahi-core/server.c +++ b/avahi-core/server.c @@ -513,12 +513,20 @@ static void reflect_response(AvahiServer *s, AvahiInterface *i, AvahiRecord *r, static void* reflect_cache_walk_callback(AvahiCache *c, AvahiKey *pattern, AvahiCacheEntry *e, void* userdata) { AvahiServer *s = userdata; + AvahiRecord* r; assert(c); assert(pattern); assert(e); assert(s); + /* Don't reflect cache entry with ipv6 link-local addresses. */ + r = e->record; + if ((r->key->type == AVAHI_DNS_TYPE_AAAA) && + (r->data.aaaa.address.address[0] == 0xFE) && + (r->data.aaaa.address.address[1] == 0x80)) + return NULL; + avahi_record_list_push(s->record_list, e->record, e->cache_flush, 0, 0); return NULL; } @@ -923,10 +931,9 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres if (avahi_dns_packet_is_query(p)) { int legacy_unicast = 0; - if (avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_ARCOUNT) != 0) { - avahi_log_warn("Invalid query packet."); - return; - } + /* For queries EDNS0 might allow ARCOUNT != 0. We ignore the + * AR section completely here, so far. Until the day we add + * EDNS0 support. */ if (port != AVAHI_MDNS_PORT) { /* Legacy Unicast */ @@ -1216,6 +1223,7 @@ static void register_stuff(AvahiServer *s) { register_browse_domain(s); avahi_interface_monitor_update_rrs(s->monitor, 0); + assert(s->n_host_rr_pending > 0); s->n_host_rr_pending --; if (s->n_host_rr_pending == 0) @@ -1387,6 +1395,7 @@ AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig s->need_entry_cleanup = 0; s->need_group_cleanup = 0; s->need_browser_cleanup = 0; + s->cleanup_time_event = NULL; s->hinfo_entry_group = NULL; s->browse_domain_entry_group = NULL; s->error = AVAHI_OK; @@ -1486,6 +1495,9 @@ void avahi_server_free(AvahiServer* s) { avahi_wide_area_engine_free(s->wide_area_lookup_engine); avahi_multicast_lookup_engine_free(s->multicast_lookup_engine); + if (s->cleanup_time_event) + avahi_time_event_free(s->cleanup_time_event); + avahi_time_event_queue_free(s->time_event_queue); /* Free watches */ @@ -1570,9 +1582,10 @@ AvahiServerConfig* avahi_server_config_init(AvahiServerConfig *c) { c->host_name = NULL; c->domain_name = NULL; c->check_response_ttl = 0; - c->publish_hinfo = 1; + c->publish_hinfo = 0; c->publish_addresses = 1; - c->publish_workstation = 1; + c->publish_no_reverse = 0; + c->publish_workstation = 0; c->publish_domain = 1; c->use_iff_running = 0; c->enable_reflector = 0; @@ -1587,6 +1600,8 @@ AvahiServerConfig* avahi_server_config_init(AvahiServerConfig *c) { c->publish_aaaa_on_ipv4 = 1; c->publish_a_on_ipv6 = 0; c->n_cache_entries_max = AVAHI_DEFAULT_CACHE_ENTRIES_MAX; + c->ratelimit_interval = 0; + c->ratelimit_burst = 0; return c; }