static void
http_resolve_cb(
AvahiServiceResolver *resolver, /* I - Resolver (unused) */
- AvahiIfIndex interface, /* I - Interface index (unused) */
+ AvahiIfIndex interface, /* I - Interface index */
AvahiProtocol protocol, /* I - Network protocol (unused) */
AvahiResolverEvent event, /* I - Event (found, etc.) */
const char *name, /* I - Service name */
*resdefault; /* Default path */
char resource[257], /* Remote path */
fqdn[256]; /* FQDN of the .local name */
+ char ifname[IF_NAMESIZE]; /* Interface name */
AvahiStringList *pair; /* Current TXT record key/value pair */
char *value; /* Value for "rp" key */
size_t valueLen = 0; /* Length of "rp" key */
strlcpy(resource, resdefault, sizeof(resource));
}
+ /*
+ * Check whether the interface is the loopback interface ("lo"), in this
+ * case set "localhost" as the host name
+ */
+
+ if (!if_indextoname((unsigned int)interface, ifname))
+ {
+ if (uribuf->options & _HTTP_RESOLVE_STDERR)
+ fprintf(stderr,
+ "DEBUG: Unable to find interface name for interface %d: %s\n",
+ interface, strerror(errno));
+ DEBUG_printf(("Unable to find interface name for interface %d: %s\n",
+ interface, strerror(errno)));
+ ifname[0] = '\0';
+ }
+
+ if (!strcmp(ifname, "lo")) {
+ if (uribuf->options & _HTTP_RESOLVE_STDERR)
+ fputs("DEBUG: Service comes from loopback interface \"lo\", setting \"localhost\" as host name.\n",
+ stderr);
+ DEBUG_puts("Service comes from loopback interface \"lo\", setting \"localhost\" as host name.");
+ hostTarget = "localhost";
+ }
+
/*
* Lookup the FQDN if needed...
*/
- if ((uribuf->options & _HTTP_RESOLVE_FQDN) &&
- (hostptr = hostTarget + strlen(hostTarget) - 6) > hostTarget &&
- !_cups_strcasecmp(hostptr, ".local"))
+ else if ((uribuf->options & _HTTP_RESOLVE_FQDN) &&
+ (hostptr = hostTarget + strlen(hostTarget) - 6) > hostTarget &&
+ !_cups_strcasecmp(hostptr, ".local"))
{
/*
* OK, we got a .local name but the caller needs a real domain. Start by