示例#1
0
static krb5_boolean
need_referral(krb5_context context, krb5_principal server, krb5_realm **realms)
{
    if(server->name.name_type != KRB5_NT_SRV_INST ||
       server->name.name_string.len != 2)
	return FALSE;
 
    return _krb5_get_host_realm_int(context, server->name.name_string.val[1],
				    FALSE, realms) == 0;
}
示例#2
0
krb5_error_code KRB5_LIB_FUNCTION
krb5_get_host_realm(krb5_context context,
		    const char *host,
		    krb5_realm **realms)
{
    char hostname[MAXHOSTNAMELEN];

    if (host == NULL) {
	if (gethostname (hostname, sizeof(hostname)))
	    return errno;
	host = hostname;
    }

    return _krb5_get_host_realm_int (context, host, 1, realms);
}
示例#3
0
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_get_host_realm(krb5_context context,
		    const char *targethost,
		    krb5_realm **realms)
{
    const char *host = targethost;
    char hostname[MAXHOSTNAMELEN];
    krb5_error_code ret;
    int use_dns;

    if (host == NULL) {
	if (gethostname (hostname, sizeof(hostname))) {
	    *realms = NULL;
	    return errno;
	}
	host = hostname;
    }

    /*
     * If our local hostname is without components, don't even try to dns.
     */

    use_dns = (strchr(host, '.') != NULL);

    ret = _krb5_get_host_realm_int (context, host, use_dns, realms);
    if (ret && targethost != NULL) {
	/*
	 * If there was no realm mapping for the host (and we wasn't
	 * looking for ourself), guess at the local realm, maybe our
	 * KDC knows better then we do and we get a referral back.
	 */
	ret = krb5_get_default_realms(context, realms);
	if (ret) {
	    krb5_set_error_message(context, KRB5_ERR_HOST_REALM_UNKNOWN,
				   N_("Unable to find realm of host %s", ""),
				   host);
	    return KRB5_ERR_HOST_REALM_UNKNOWN;
	}
    }
    return ret;
}