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; }
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); }
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; }