(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:
@@ -37,6 +37,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "krb5_locl.h"
|
#include "krb5_locl.h"
|
||||||
|
#define USE_RESOLVER
|
||||||
|
#include "resolve.h"
|
||||||
|
|
||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
|
|
||||||
@@ -222,10 +224,11 @@ krb5_unparse_name_fixed_short(krb5_context context,
|
|||||||
return unparse_name_fixed(context, principal, name, len, TRUE);
|
return unparse_name_fixed(context, principal, name, len, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
static krb5_error_code
|
||||||
krb5_unparse_name(krb5_context context,
|
unparse_name(krb5_context context,
|
||||||
krb5_const_principal principal,
|
krb5_const_principal principal,
|
||||||
char **name)
|
char **name,
|
||||||
|
krb5_boolean short_flag)
|
||||||
{
|
{
|
||||||
size_t len = 0, plen;
|
size_t len = 0, plen;
|
||||||
int i;
|
int i;
|
||||||
@@ -248,12 +251,28 @@ krb5_unparse_name(krb5_context context,
|
|||||||
*name = malloc(len);
|
*name = malloc(len);
|
||||||
if(*name == NULL)
|
if(*name == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
ret = krb5_unparse_name_fixed(context, principal, *name, len);
|
ret = unparse_name_fixed(context, principal, *name, len, short_flag);
|
||||||
if(ret)
|
if(ret)
|
||||||
free(*name);
|
free(*name);
|
||||||
return ret;
|
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 */
|
#if 0 /* not implemented */
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -530,17 +549,34 @@ krb5_425_conv_principal_ext(krb5_context context,
|
|||||||
return HEIM_ERR_V4_PRINC_NO_CONV;
|
return HEIM_ERR_V4_PRINC_NO_CONV;
|
||||||
}
|
}
|
||||||
if(resolve){
|
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);
|
struct hostent *hp = roken_gethostbyname(instance);
|
||||||
if(hp){
|
if(hp)
|
||||||
instance = hp->h_name;
|
inst = hp->h_name;
|
||||||
ret = krb5_make_principal(context, &pr,
|
#endif
|
||||||
realm, name, instance, NULL);
|
if(inst) {
|
||||||
if(func == NULL || (*func)(context, pr)){
|
ret = krb5_make_principal(context, &pr, realm, name, inst, NULL);
|
||||||
*princ = pr;
|
if(ret == 0) {
|
||||||
return 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;
|
char **domains, **d;
|
||||||
|
Reference in New Issue
Block a user