diff --git a/cups-avahi-address.patch b/cups-avahi-address.patch index a03d1ad..308ee89 100644 --- a/cups-avahi-address.patch +++ b/cups-avahi-address.patch @@ -1,6 +1,6 @@ diff -up cups-1.6.2/cups/http-support.c.avahi-address cups-1.6.2/cups/http-support.c --- cups-1.6.2/cups/http-support.c.avahi-address 2013-03-11 18:44:36.000000000 +0000 -+++ cups-1.6.2/cups/http-support.c 2013-04-04 15:39:06.651847041 +0100 ++++ cups-1.6.2/cups/http-support.c 2013-06-28 13:42:15.834715511 +0100 @@ -2121,7 +2121,7 @@ http_resolve_cb( const char *type, /* I - Registration type */ const char *domain, /* I - Domain (unused) */ @@ -10,34 +10,54 @@ diff -up cups-1.6.2/cups/http-support.c.avahi-address cups-1.6.2/cups/http-suppo uint16_t port, /* I - Port number */ AvahiStringList *txt, /* I - TXT record */ AvahiLookupResultFlags flags, /* I - Lookup flags (unused) */ -@@ -2253,36 +2253,37 @@ http_resolve_cb( +@@ -2248,41 +2248,59 @@ http_resolve_cb( + * getting the IP address of the .local name and then do reverse-lookups... + */ + +- http_addrlist_t *addrlist, /* List of addresses */ +- *addr; /* Current address */ ++ http_addr_t addr; ++ size_t addrlen; ++ int error; DEBUG_printf(("8http_resolve_cb: Looking up \"%s\".", hostTarget)); - snprintf(fqdn, sizeof(fqdn), "%d", ntohs(port)); - if ((addrlist = httpAddrGetList(hostTarget, AF_UNSPEC, fqdn)) != NULL) -+ int error = getnameinfo(&(address->data), -+ address->proto == AVAHI_PROTO_INET ? -+ sizeof (AvahiIPv4Address) : -+ (address->proto == AVAHI_PROTO_INET6 ? -+ sizeof (AvahiIPv6Address) : -+ sizeof (address->data)), -+ fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD); -+ -+ if (!error) ++ switch (address->proto) { - for (addr = addrlist; addr; addr = addr->next) -+ DEBUG_printf(("8http_resolve_cb: Found \"%s\".", fqdn)); ++ case AVAHI_PROTO_INET: ++ addr.ipv4.sin_family = AF_INET; ++ addrlen = sizeof (addr.ipv4.sin_addr); ++ memcpy (&addr.ipv4.sin_addr, &address->data, addrlen); ++ break; ++ case AVAHI_PROTO_INET6: ++ addr.ipv6.sin6_family = AF_INET6; ++ addrlen = sizeof (addr.ipv6.sin6_addr); ++ memcpy (&addr.ipv6.sin6_addr, &address->data, addrlen); ++ break; ++ default: ++ DEBUG_printf(("8http_resolve_cb: unknown address family %d", ++ address->proto)); ++ addrlen = 0; ++ } + -+ if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn || -+ _cups_strcasecmp(hostptr, ".local")) ++ if (addrlen > 0) { ++ error = getnameinfo(&addr.addr, httpAddrLength (&addr), ++ fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD); ++ ++ if (!error) { - int error = getnameinfo(&(addr->addr.addr), - httpAddrLength(&(addr->addr)), - fqdn, sizeof(fqdn), NULL, 0, NI_NAMEREQD); -- ++ DEBUG_printf(("8http_resolve_cb: Found \"%s\".", fqdn)); + - if (!error) -- { ++ if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn || ++ _cups_strcasecmp(hostptr, ".local")) + { - DEBUG_printf(("8http_resolve_cb: Found \"%s\".", fqdn)); - - if ((hostptr = fqdn + strlen(fqdn) - 6) <= fqdn || @@ -46,28 +66,28 @@ diff -up cups-1.6.2/cups/http-support.c.avahi-address cups-1.6.2/cups/http-suppo - hostTarget = fqdn; - break; - } -- } ++ hostTarget = fqdn; + } ++ } else { ++ avahi_address_snprint (fqdn, sizeof (fqdn), address); + hostTarget = fqdn; -+ } -+ } #ifdef DEBUG - else - DEBUG_printf(("8http_resolve_cb: \"%s\" did not resolve: %d", - httpAddrString(&(addr->addr), fqdn, sizeof(fqdn)), - error)); -+ else -+ DEBUG_printf(("8http_resolve_cb: \"%s\" did not resolve: %d", -+ httpAddrString(&(addr->addr), fqdn, sizeof(fqdn)), -+ error)); ++ DEBUG_printf(("8http_resolve_cb: \"%s\" did not resolve: %d", ++ fqdn, error)); #endif /* DEBUG */ -- } + } +- +- httpAddrFreeList(addrlist); + } + } else { + /* + * Use the IP address that responded... + */ - -- httpAddrFreeList(addrlist); -- } ++ + avahi_address_snprint (fqdn, sizeof (fqdn), address); + hostTarget = fqdn; } diff --git a/cups.spec b/cups.spec index 246e767..68ed7dd 100644 --- a/cups.spec +++ b/cups.spec @@ -11,7 +11,7 @@ Summary: CUPS printing system Name: cups Epoch: 1 Version: 1.6.2 -Release: 13%{?dist} +Release: 14%{?dist} License: GPLv2 Group: System Environment/Daemons Url: http://www.cups.org/ @@ -645,6 +645,9 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man5/ipptoolfile.5.gz %changelog +* Fri Jun 28 2013 Tim Waugh 1:1.6.2-14 +- Fix for DNSSD name resolution. + * Wed Jun 26 2013 Tim Waugh 1:1.6.2-13 - Don't link against libgcrypt needlessly.