(krb5_425_conv_principal_ext): Use resolver to lookup hosts, so CNAMEs

can be ignored.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4550 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1998-03-06 00:52:36 +00:00
parent c8f395477f
commit 9792ae2d48

View File

@@ -37,6 +37,8 @@
*/
#include "krb5_locl.h"
#define USE_RESOLVER
#include "resolve.h"
RCSID("$Id$");
@@ -222,10 +224,11 @@ krb5_unparse_name_fixed_short(krb5_context context,
return unparse_name_fixed(context, principal, name, len, TRUE);
}
krb5_error_code
krb5_unparse_name(krb5_context context,
krb5_const_principal principal,
char **name)
static krb5_error_code
unparse_name(krb5_context context,
krb5_const_principal principal,
char **name,
krb5_boolean short_flag)
{
size_t len = 0, plen;
int i;
@@ -248,12 +251,28 @@ krb5_unparse_name(krb5_context context,
*name = malloc(len);
if(*name == NULL)
return ENOMEM;
ret = krb5_unparse_name_fixed(context, principal, *name, len);
ret = unparse_name_fixed(context, principal, *name, len, short_flag);
if(ret)
free(*name);
return ret;
}
krb5_error_code
krb5_unparse_name(krb5_context context,
krb5_const_principal principal,
char **name)
{
return unparse_name(context, principal, name, FALSE);
}
krb5_error_code
krb5_unparse_name_short(krb5_context context,
krb5_const_principal principal,
char **name)
{
return unparse_name(context, principal, name, TRUE);
}
#if 0 /* not implemented */
krb5_error_code
@@ -530,17 +549,34 @@ krb5_425_conv_principal_ext(krb5_context context,
return HEIM_ERR_V4_PRINC_NO_CONV;
}
if(resolve){
const char *inst = NULL;
#ifdef USE_RESOLVER
struct dns_reply *r;
r = dns_lookup(instance, "a");
if(r && r->head && r->head->type == T_A)
inst = r->head->domain;
#else
struct hostent *hp = roken_gethostbyname(instance);
if(hp){
instance = hp->h_name;
ret = krb5_make_principal(context, &pr,
realm, name, instance, NULL);
if(func == NULL || (*func)(context, pr)){
*princ = pr;
return 0;
if(hp)
inst = hp->h_name;
#endif
if(inst) {
ret = krb5_make_principal(context, &pr, realm, name, inst, NULL);
if(ret == 0) {
if(func == NULL || (*func)(context, pr)){
*princ = pr;
#ifdef USE_RESOLVER
dns_free_data(r);
#endif
return 0;
}
krb5_free_principal(context, pr);
}
krb5_free_principal(context, pr);
}
#ifdef USE_RESOLVER
if(r)
dns_free_data(r);
#endif
}
{
char **domains, **d;