From 43e3b9ca501a727a9ae60ffce2381b03368c9c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 30 Jun 2005 01:38:15 +0000 Subject: [PATCH] add krb5_425_conv_principal_ext2 that work just like krb5_425_conv_principal_ext but takes a context variable for the verification function git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@15531 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/principal.c | 56 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/lib/krb5/principal.c b/lib/krb5/principal.c index 016d94263..2b882bc47 100644 --- a/lib/krb5/principal.c +++ b/lib/krb5/principal.c @@ -695,13 +695,15 @@ get_name_conversion(krb5_context context, const char *realm, const char *name) */ krb5_error_code KRB5_LIB_FUNCTION -krb5_425_conv_principal_ext(krb5_context context, - const char *name, - const char *instance, - const char *realm, - krb5_boolean (*func)(krb5_context, krb5_principal), - krb5_boolean resolve, - krb5_principal *princ) +krb5_425_conv_principal_ext2(krb5_context context, + const char *name, + const char *instance, + const char *realm, + krb5_boolean (*func)(krb5_context, + void *, krb5_principal), + void *funcctx, + krb5_boolean resolve, + krb5_principal *princ) { const char *p; krb5_error_code ret; @@ -732,7 +734,7 @@ krb5_425_conv_principal_ext(krb5_context context, if(p){ instance = p; ret = krb5_make_principal(context, &pr, realm, name, instance, NULL); - if(func == NULL || (*func)(context, pr)){ + if(func == NULL || (*func)(context, funcctx, pr)){ *princ = pr; return 0; } @@ -789,7 +791,7 @@ krb5_425_conv_principal_ext(krb5_context context, NULL); free (inst); if(ret == 0) { - if(func == NULL || (*func)(context, pr)){ + if(func == NULL || (*func)(context, funcctx, pr)){ *princ = pr; return 0; } @@ -801,7 +803,7 @@ krb5_425_conv_principal_ext(krb5_context context, snprintf(host, sizeof(host), "%s.%s", instance, realm); strlwr(host); ret = krb5_make_principal(context, &pr, realm, name, host, NULL); - if((*func)(context, pr)){ + if((*func)(context, funcctx, pr)){ *princ = pr; return 0; } @@ -828,7 +830,7 @@ krb5_425_conv_principal_ext(krb5_context context, for(d = domains; d && *d; d++){ snprintf(host, sizeof(host), "%s.%s", instance, *d); ret = krb5_make_principal(context, &pr, realm, name, host, NULL); - if(func == NULL || (*func)(context, pr)){ + if(func == NULL || (*func)(context, funcctx, pr)){ *princ = pr; krb5_config_free_strings(domains); return 0; @@ -852,7 +854,7 @@ krb5_425_conv_principal_ext(krb5_context context, snprintf(host, sizeof(host), "%s.%s", instance, p); local_host: ret = krb5_make_principal(context, &pr, realm, name, host, NULL); - if(func == NULL || (*func)(context, pr)){ + if(func == NULL || (*func)(context, funcctx, pr)){ *princ = pr; return 0; } @@ -878,7 +880,7 @@ no_host: name = p; ret = krb5_make_principal(context, &pr, realm, name, instance, NULL); - if(func == NULL || (*func)(context, pr)){ + if(func == NULL || (*func)(context, funcctx, pr)){ *princ = pr; return 0; } @@ -887,6 +889,34 @@ no_host: return HEIM_ERR_V4_PRINC_NO_CONV; } +static krb5_boolean +convert_func(krb5_context conxtext, void *funcctx, krb5_principal principal) +{ + krb5_boolean (*func)(krb5_context, krb5_principal) = funcctx; + return (*func)(conxtext, principal); +} + +krb5_error_code KRB5_LIB_FUNCTION +krb5_425_conv_principal_ext(krb5_context context, + const char *name, + const char *instance, + const char *realm, + krb5_boolean (*func)(krb5_context, krb5_principal), + krb5_boolean resolve, + krb5_principal *principal) +{ + return krb5_425_conv_principal_ext2(context, + name, + instance, + realm, + func ? convert_func : NULL, + func, + resolve, + principal); +} + + + krb5_error_code KRB5_LIB_FUNCTION krb5_425_conv_principal(krb5_context context, const char *name,