--- dir.c.orig 2005-02-10 21:14:29.000000000 +0100 +++ dir.c.orig 2012-04-23 21:33:51.000000000 +0200 @@ -44,10 +44,17 @@ if (qtype < 1 || qtype > 41) return 1; s = (unsigned char *) try_reverse_in_arpa ((char *) s); - if (*s) - snprintf (buf, len, SHEERDNS_DIR "/%s/%s/%s", hex_hash (s), s, qtype_name[qtype]); - else + char str[1024]; + int fd = -1; + sprintf(str, "%s/%s/%s/%s", SHEERDNS_DIR, hex_hash (s), s, qtype_name[qtype]); + if (*s) { + if ( (fd = open(str, O_RDONLY)) != -1 ) + snprintf (buf, len, SHEERDNS_DIR "/%s/%s/%s", hex_hash (s), s, qtype_name[qtype]); + else + snprintf (buf, len, SHEERDNS_DIR "/default/%s", qtype_name[qtype]); + } else { snprintf (buf, len, SHEERDNS_DIR "/%s", qtype_name[qtype]); + }; free (s); return 0; }