X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Frr.c;h=1a30146bbe68ddfede2ca83001ec5da5da7d5e54;hb=61eb92b1ba30fd4da9be7e9dc9714125c1576cca;hp=2a25321f4c2dc1ae971701efbaf62edf8ba4eb1c;hpb=14f8d9beb7ef14b0aab5512345e09109bdd8cb0c;p=catta diff --git a/avahi-common/rr.c b/avahi-common/rr.c index 2a25321..1a30146 100644 --- a/avahi-common/rr.c +++ b/avahi-common/rr.c @@ -182,7 +182,6 @@ const gchar *avahi_dns_type_to_string(guint16 type) { } } - gchar *avahi_key_to_string(const AvahiKey *k) { g_assert(k); g_assert(k->ref >= 1); @@ -553,3 +552,49 @@ gboolean avahi_record_is_goodbye(AvahiRecord *r) { return r->ttl == 0; } + +gboolean avahi_key_valid(AvahiKey *k) { + g_assert(k); + + if (!avahi_valid_domain_name(k->name)) + return FALSE; + + return TRUE; +} + +gboolean avahi_record_valid(AvahiRecord *r) { + g_assert(r); + + if (!avahi_key_valid(r->key)) + return FALSE; + + switch (r->key->type) { + + case AVAHI_DNS_TYPE_PTR: + case AVAHI_DNS_TYPE_CNAME: + return avahi_valid_domain_name(r->data.ptr.name); + + case AVAHI_DNS_TYPE_SRV: + return avahi_valid_domain_name(r->data.srv.name); + + case AVAHI_DNS_TYPE_HINFO: + return + strlen(r->data.hinfo.os) <= 255 && + strlen(r->data.hinfo.cpu) <= 255; + + + case AVAHI_DNS_TYPE_TXT: { + + AvahiStringList *strlst; + + for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next) + if (strlst->size > 255) + return FALSE; + + return TRUE; + } + } + + + return TRUE; +}