Sprinkle _krb5_debug() for more info about what the framework is actually doing behind our back
This commit is contained in:
		@@ -86,8 +86,11 @@ srv_find_realm(krb5_context context, krb5_krbhst_info ***res, int *count,
 | 
			
		||||
    snprintf(domain, sizeof(domain), "_%s._%s.%s.", service, proto, realm);
 | 
			
		||||
 | 
			
		||||
    r = rk_dns_lookup(domain, dns_type);
 | 
			
		||||
    if(r == NULL)
 | 
			
		||||
    if(r == NULL) {
 | 
			
		||||
	_krb5_debug(context, 0,
 | 
			
		||||
		    "DNS lookup failed domain: %s", domain);
 | 
			
		||||
	return KRB5_KDC_UNREACH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for(num_srv = 0, rr = r->head; rr; rr = rr->next)
 | 
			
		||||
	if(rr->type == rk_ns_t_srv)
 | 
			
		||||
@@ -384,11 +387,15 @@ static void
 | 
			
		||||
srv_get_hosts(krb5_context context, struct krb5_krbhst_data *kd,
 | 
			
		||||
	      const char *proto, const char *service)
 | 
			
		||||
{
 | 
			
		||||
    krb5_error_code ret;
 | 
			
		||||
    krb5_krbhst_info **res;
 | 
			
		||||
    int count, i;
 | 
			
		||||
 | 
			
		||||
    if (srv_find_realm(context, &res, &count, kd->realm, "SRV", proto, service,
 | 
			
		||||
		       kd->port))
 | 
			
		||||
    ret = srv_find_realm(context, &res, &count, kd->realm, "SRV", proto, service,
 | 
			
		||||
			 kd->port);
 | 
			
		||||
    _krb5_debug(context, 2, "searching DNS for realm %s %s.%s -> %d",
 | 
			
		||||
		kd->realm, proto, service, ret);
 | 
			
		||||
    if (ret)
 | 
			
		||||
	return;
 | 
			
		||||
    for(i = 0; i < count; i++)
 | 
			
		||||
	append_host_hostinfo(kd, res[i]);
 | 
			
		||||
@@ -405,11 +412,13 @@ config_get_hosts(krb5_context context, struct krb5_krbhst_data *kd,
 | 
			
		||||
		 const char *conf_string)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
	
 | 
			
		||||
    char **hostlist;
 | 
			
		||||
    hostlist = krb5_config_get_strings(context, NULL,
 | 
			
		||||
				       "realms", kd->realm, conf_string, NULL);
 | 
			
		||||
 | 
			
		||||
    _krb5_debug(context, 2, "configuration file for realm %s%s found",
 | 
			
		||||
		kd->realm, hostlist ? "" : " not");
 | 
			
		||||
 | 
			
		||||
    if(hostlist == NULL)
 | 
			
		||||
	return;
 | 
			
		||||
    kd->flags |= KD_CONFIG_EXISTS;
 | 
			
		||||
@@ -436,6 +445,9 @@ fallback_get_hosts(krb5_context context, struct krb5_krbhst_data *kd,
 | 
			
		||||
    struct addrinfo hints;
 | 
			
		||||
    char portstr[NI_MAXSERV];
 | 
			
		||||
 | 
			
		||||
    _krb5_debug(context, 2, "fallback lookup %d for realm %s (service %s)",
 | 
			
		||||
		kd->fallback_count, kd->realm, serv_string);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Don't try forever in case the DNS server keep returning us
 | 
			
		||||
     * entries (like wildcard entries or the .nu TLD)
 | 
			
		||||
@@ -555,8 +567,10 @@ plugin_get_hosts(krb5_context context,
 | 
			
		||||
				   N_("Locate plugin failed to lookup realm %s: %d", ""),
 | 
			
		||||
				   kd->realm, ret);
 | 
			
		||||
	    break;
 | 
			
		||||
	} else if (ret == 0)
 | 
			
		||||
	} else if (ret == 0) {
 | 
			
		||||
	    _krb5_debug(context, 2, "plugin found result for realm %s", kd->realm);
 | 
			
		||||
	    kd->flags |= KD_CONFIG_EXISTS;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    _krb5_plugin_free(list);
 | 
			
		||||
@@ -587,8 +601,12 @@ kdc_get_next(krb5_context context,
 | 
			
		||||
	    return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS)
 | 
			
		||||
	return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS) {
 | 
			
		||||
	_krb5_debug(context, 1,
 | 
			
		||||
		    "Configuration exists for realm %s, wont go to DNS",
 | 
			
		||||
		    kd->realm);
 | 
			
		||||
	return KRB5_KDC_UNREACH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(context->srv_lookup) {
 | 
			
		||||
	if((kd->flags & KD_SRV_UDP) == 0 && (kd->flags & KD_LARGE_MSG) == 0) {
 | 
			
		||||
@@ -622,6 +640,8 @@ kdc_get_next(krb5_context context,
 | 
			
		||||
	    return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _krb5_debug(context, 0, "No KDC entries found for %s", kd->realm);
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -646,8 +666,12 @@ admin_get_next(krb5_context context,
 | 
			
		||||
	    return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS)
 | 
			
		||||
	return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS) {
 | 
			
		||||
	_krb5_debug(context, 1,
 | 
			
		||||
		    "Configuration exists for realm %s, wont go to DNS",
 | 
			
		||||
		    kd->realm);
 | 
			
		||||
	return KRB5_KDC_UNREACH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(context->srv_lookup) {
 | 
			
		||||
	if((kd->flags & KD_SRV_TCP) == 0) {
 | 
			
		||||
@@ -670,6 +694,8 @@ admin_get_next(krb5_context context,
 | 
			
		||||
	    return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _krb5_debug(context, 0, "No admin entries found for realm %s", kd->realm);
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH;	/* XXX */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -694,8 +720,12 @@ kpasswd_get_next(krb5_context context,
 | 
			
		||||
	    return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS)
 | 
			
		||||
	return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS) {
 | 
			
		||||
	_krb5_debug(context, 1,
 | 
			
		||||
		    "Configuration exists for realm %s, wont go to DNS",
 | 
			
		||||
		    kd->realm);
 | 
			
		||||
	return KRB5_KDC_UNREACH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(context->srv_lookup) {
 | 
			
		||||
	if((kd->flags & KD_SRV_UDP) == 0) {
 | 
			
		||||
@@ -724,7 +754,9 @@ kpasswd_get_next(krb5_context context,
 | 
			
		||||
	return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    _krb5_debug(context, 0, "No kpasswd entries found for realm %s", kd->realm);
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static krb5_error_code
 | 
			
		||||
@@ -746,8 +778,12 @@ krb524_get_next(krb5_context context,
 | 
			
		||||
	kd->flags |= KD_CONFIG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS)
 | 
			
		||||
	return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    if (kd->flags & KD_CONFIG_EXISTS) {
 | 
			
		||||
	_krb5_debug(context, 1,
 | 
			
		||||
		    "Configuration exists for realm %s, wont go to DNS",
 | 
			
		||||
		    kd->realm);
 | 
			
		||||
	return KRB5_KDC_UNREACH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(context->srv_lookup) {
 | 
			
		||||
	if((kd->flags & KD_SRV_UDP) == 0) {
 | 
			
		||||
@@ -774,11 +810,14 @@ krb524_get_next(krb5_context context,
 | 
			
		||||
	return (*kd->get_next)(context, kd, host);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH; /* XXX */
 | 
			
		||||
    _krb5_debug(context, 0, "No kpasswd entries found for realm %s", kd->realm);
 | 
			
		||||
 | 
			
		||||
    return KRB5_KDC_UNREACH;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct krb5_krbhst_data*
 | 
			
		||||
common_init(krb5_context context,
 | 
			
		||||
	    const char *service,
 | 
			
		||||
	    const char *realm,
 | 
			
		||||
	    int flags)
 | 
			
		||||
{
 | 
			
		||||
@@ -792,6 +831,9 @@ common_init(krb5_context context,
 | 
			
		||||
	return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    _krb5_debug(context, 2, "Trying to find service %s for realm %s flags %x",
 | 
			
		||||
		service, realm, flags);
 | 
			
		||||
 | 
			
		||||
    /* For 'realms' without a . do not even think of going to DNS */
 | 
			
		||||
    if (!strchr(realm, '.'))
 | 
			
		||||
	kd->flags |= KD_CONFIG_EXISTS;
 | 
			
		||||
@@ -826,32 +868,37 @@ krb5_krbhst_init_flags(krb5_context context,
 | 
			
		||||
    krb5_error_code (*next)(krb5_context, struct krb5_krbhst_data *,
 | 
			
		||||
			    krb5_krbhst_info **);
 | 
			
		||||
    int def_port;
 | 
			
		||||
    const char *service;
 | 
			
		||||
 | 
			
		||||
    switch(type) {
 | 
			
		||||
    case KRB5_KRBHST_KDC:
 | 
			
		||||
	next = kdc_get_next;
 | 
			
		||||
	def_port = ntohs(krb5_getportbyname (context, "kerberos", "udp", 88));
 | 
			
		||||
	service = "kdc";
 | 
			
		||||
	break;
 | 
			
		||||
    case KRB5_KRBHST_ADMIN:
 | 
			
		||||
	next = admin_get_next;
 | 
			
		||||
	def_port = ntohs(krb5_getportbyname (context, "kerberos-adm",
 | 
			
		||||
					     "tcp", 749));
 | 
			
		||||
	service = "admin";
 | 
			
		||||
	break;
 | 
			
		||||
    case KRB5_KRBHST_CHANGEPW:
 | 
			
		||||
	next = kpasswd_get_next;
 | 
			
		||||
	def_port = ntohs(krb5_getportbyname (context, "kpasswd", "udp",
 | 
			
		||||
					     KPASSWD_PORT));
 | 
			
		||||
	service = "change_password";
 | 
			
		||||
	break;
 | 
			
		||||
    case KRB5_KRBHST_KRB524:
 | 
			
		||||
	next = krb524_get_next;
 | 
			
		||||
	def_port = ntohs(krb5_getportbyname (context, "krb524", "udp", 4444));
 | 
			
		||||
	service = "524";
 | 
			
		||||
	break;
 | 
			
		||||
    default:
 | 
			
		||||
	krb5_set_error_message(context, ENOTTY,
 | 
			
		||||
			       N_("unknown krbhst type (%u)", ""), type);
 | 
			
		||||
	return ENOTTY;
 | 
			
		||||
    }
 | 
			
		||||
    if((kd = common_init(context, realm, flags)) == NULL)
 | 
			
		||||
    if((kd = common_init(context, service, realm, flags)) == NULL)
 | 
			
		||||
	return ENOMEM;
 | 
			
		||||
    kd->get_next = next;
 | 
			
		||||
    kd->def_port = def_port;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user