- switch (host_errno) {
- case TRY_AGAIN:
- snprintf(errmsg, errmsg_size, "Host name lookup failure");
- break;
- case NO_RECOVERY:
- snprintf(errmsg, errmsg_size, "Unknown server error");
- break;
- case NO_ADDRESS:
- snprintf(errmsg, errmsg_size, "No address associated with name");
- break;
- default:
- snprintf(errmsg, errmsg_size, "Unknown DNS error %d", host_errno);
+ ret = ub_ctx_hosts(ctx, NULL);
+ if (ret != 0) {
+ if (errmsg)
+ snprintf(errmsg, errmsg_size,
+ "Host name lookup failure: Could not read hosts file "
+ "(resolver error: %s) (system error: %s)",
+ ub_strerror(ret), strerror(errno));
+ ub_ctx_delete(ctx);
+ return -1;
+ }
+
+ if (strlen(config.dnssec_public_key) != 0) {
+ ret = ub_ctx_add_ta_file(ctx, config.dnssec_public_key);
+ if (ret != 0) {
+ if (errmsg)
+ snprintf(errmsg, errmsg_size,
+ "Host name lookup failure: Error adding keys from %s "
+ "(resolver error: %s) (system error: %s)",
+ config.dnssec_public_key,
+ ub_strerror(ret), strerror(errno));
+ ub_ctx_delete(ctx);
+ return -1;