TRACE(c, "ccselect choosing default cache {ccache} for server " \
"principal {princ}", cache, server)
+#define TRACE_DNS_SRV_ANS(c, host, port, prio, weight) \
+ TRACE(c, "SRV answer: {int} {int} {int} \"{str}\"", prio, weight, \
+ port, host)
+#define TRACE_DNS_SRV_NOTFOUND(c) \
+ TRACE(c, "No SRV records found")
+#define TRACE_DNS_SRV_SEND(c, domain) \
+ TRACE(c, "Sending DNS SRV query for {str}", domain)
+#define TRACE_DNS_URI_ANS(c, uri, prio, weight) \
+ TRACE(c, "URI answer: {int} {int} \"{str}\"", prio, weight, uri)
+#define TRACE_DNS_URI_NOTFOUND(c) \
+ TRACE(c, "No URI records found")
+#define TRACE_DNS_URI_SEND(c, domain) \
+ TRACE(c, "Sending DNS URI query for {str}", domain)
+
#define TRACE_FAST_ARMOR_CCACHE(c, ccache_name) \
TRACE(c, "FAST armor ccache: {str}", ccache_name)
#define TRACE_FAST_ARMOR_CCACHE_KEY(c, keyblock) \
char *host;
};
-krb5_error_code krb5int_make_srv_query_realm(const krb5_data *realm,
- const char *service,
- const char *protocol,
- struct srv_dns_entry **answers);
+krb5_error_code
+krb5int_make_srv_query_realm(krb5_context context, const krb5_data *realm,
+ const char *service, const char *protocol,
+ struct srv_dns_entry **answers);
+
void krb5int_free_srv_dns_data(struct srv_dns_entry *);
krb5_error_code
-k5_make_uri_query(const krb5_data *realm, const char *service,
- struct srv_dns_entry **answers);
+k5_make_uri_query(krb5_context context, const krb5_data *realm,
+ const char *service, struct srv_dns_entry **answers);
#endif /* KRB5_DNS_LOOKUP */
#endif /* !defined(KRB5_DNSGLUE_H) */
/* Query the URI RR, collecting weight, priority, and target. */
krb5_error_code
-k5_make_uri_query(const krb5_data *realm, const char *service,
- struct srv_dns_entry **answers)
+k5_make_uri_query(krb5_context context, const krb5_data *realm,
+ const char *service, struct srv_dns_entry **answers)
{
const unsigned char *p = NULL, *base = NULL;
char host[MAXDNAME];
if (ret)
return 0;
+ TRACE_DNS_URI_SEND(context, host);
+
size = krb5int_dns_init(&ds, host, C_IN, T_URI);
if (size < 0)
goto out;
goto out;
}
+ TRACE_DNS_URI_ANS(context, uri->host, uri->priority, uri->weight);
place_srv_entry(&head, uri);
}
*/
krb5_error_code
-krb5int_make_srv_query_realm(const krb5_data *realm,
- const char *service,
- const char *protocol,
+krb5int_make_srv_query_realm(krb5_context context, const krb5_data *realm,
+ const char *service, const char *protocol,
struct srv_dns_entry **answers)
{
const unsigned char *p = NULL, *base = NULL;
if (ret)
return 0;
-#ifdef TEST
- fprintf(stderr, "sending DNS SRV query for %s\n", host);
-#endif
+ TRACE_DNS_SRV_SEND(context, host);
size = krb5int_dns_init(&ds, host, C_IN, T_SRV);
if (size < 0)
goto out;
}
+ TRACE_DNS_SRV_ANS(context, srv->host, srv->port, srv->priority,
+ srv->weight);
place_srv_entry(&head, srv);
}
#ifdef KRB5_DNS_LOOKUP
static krb5_error_code
-locate_srv_dns_1(const krb5_data *realm, const char *service,
- const char *protocol, struct serverlist *serverlist)
+locate_srv_dns_1(krb5_context context, const krb5_data *realm,
+ const char *service, const char *protocol,
+ struct serverlist *serverlist)
{
struct srv_dns_entry *head = NULL, *entry = NULL;
krb5_error_code code = 0;
k5_transport transport;
- code = krb5int_make_srv_query_realm(realm, service, protocol, &head);
+ code = krb5int_make_srv_query_realm(context, realm, service, protocol,
+ &head);
if (code)
return 0;
* and transport type. Problematic entries are skipped.
*/
static krb5_error_code
-locate_uri(const krb5_data *realm, const char *req_service,
- struct serverlist *serverlist, k5_transport req_transport,
- int default_port, krb5_boolean master_only)
+locate_uri(krb5_context context, const krb5_data *realm,
+ const char *req_service, struct serverlist *serverlist,
+ k5_transport req_transport, int default_port,
+ krb5_boolean master_only)
{
krb5_error_code ret;
k5_transport transport, host_trans;
const char *host_field, *path;
int port, def_port, master;
- ret = k5_make_uri_query(realm, req_service, &answers);
+ ret = k5_make_uri_query(context, realm, req_service, &answers);
if (ret || answers == NULL)
return ret;
return 0;
}
- ret = locate_uri(realm, svcname, serverlist, transport, def_port,
+ ret = locate_uri(context, realm, svcname, serverlist, transport, def_port,
find_master);
- if (ret)
- Tprintf("dns URI lookup returned error %d\n", ret);
+
+ if (serverlist->nservers == 0)
+ TRACE_DNS_URI_NOTFOUND(context);
return ret;
}
}
code = 0;
- if (transport == UDP || transport == TCP_OR_UDP) {
- code = locate_srv_dns_1(realm, dnsname, "_udp", serverlist);
- if (code)
- Tprintf("dns udp lookup returned error %d\n", code);
- }
- if ((transport == TCP || transport == TCP_OR_UDP) && code == 0) {
- code = locate_srv_dns_1(realm, dnsname, "_tcp", serverlist);
- if (code)
- Tprintf("dns tcp lookup returned error %d\n", code);
- }
+ if (transport == UDP || transport == TCP_OR_UDP)
+ code = locate_srv_dns_1(context, realm, dnsname, "_udp", serverlist);
+
+ if ((transport == TCP || transport == TCP_OR_UDP) && code == 0)
+ code = locate_srv_dns_1(context, realm, dnsname, "_tcp", serverlist);
+
+ if (serverlist->nservers == 0)
+ TRACE_DNS_SRV_NOTFOUND(context);
+
return code;
}
#endif /* KRB5_DNS_LOOKUP */
break;
case LOOKUP_DNS:
- err = locate_srv_dns_1(&realm, "_kerberos", "_udp", &sl);
+ err = locate_srv_dns_1(ctx, &realm, "_kerberos", "_udp", &sl);
break;
case LOOKUP_WHATEVER: