Add krb5_unparse_name_flags and krb5_unparse_name_fixed_flags.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@18534 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2006-10-17 17:07:30 +00:00
parent 09e22d8efd
commit d95330bb65

View File

@@ -292,10 +292,13 @@ unparse_name_fixed(krb5_context context,
krb5_const_principal principal, krb5_const_principal principal,
char *name, char *name,
size_t len, size_t len,
krb5_boolean short_form) int flags)
{ {
size_t idx = 0; size_t idx = 0;
int i; int i;
int short_form = (flags & KRB5_PRINCIPAL_UNPARSE_SHORT) != 0;
int no_realm = (flags & KRB5_PRINCIPAL_UNPARSE_NO_REALM) != 0;
for(i = 0; i < princ_num_comp(principal); i++){ for(i = 0; i < princ_num_comp(principal); i++){
if(i) if(i)
add_char(name, idx, len, '/'); add_char(name, idx, len, '/');
@@ -304,7 +307,7 @@ unparse_name_fixed(krb5_context context,
return ERANGE; return ERANGE;
} }
/* add realm if different from default realm */ /* add realm if different from default realm */
if(short_form) { if(short_form && !no_realm) {
krb5_realm r; krb5_realm r;
krb5_error_code ret; krb5_error_code ret;
ret = krb5_get_default_realm(context, &r); ret = krb5_get_default_realm(context, &r);
@@ -314,7 +317,7 @@ unparse_name_fixed(krb5_context context,
short_form = 0; short_form = 0;
free(r); free(r);
} }
if(!short_form) { if(!short_form && !no_realm) {
add_char(name, idx, len, '@'); add_char(name, idx, len, '@');
idx = quote_string(princ_realm(principal), name, idx, len); idx = quote_string(princ_realm(principal), name, idx, len);
if(idx == len) if(idx == len)
@@ -329,7 +332,7 @@ krb5_unparse_name_fixed(krb5_context context,
char *name, char *name,
size_t len) size_t len)
{ {
return unparse_name_fixed(context, principal, name, len, FALSE); return unparse_name_fixed(context, principal, name, len, 0);
} }
krb5_error_code KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_FUNCTION
@@ -338,14 +341,25 @@ krb5_unparse_name_fixed_short(krb5_context context,
char *name, char *name,
size_t len) size_t len)
{ {
return unparse_name_fixed(context, principal, name, len, TRUE); return unparse_name_fixed(context, principal, name, len,
KRB5_PRINCIPAL_UNPARSE_SHORT);
}
krb5_error_code KRB5_LIB_FUNCTION
krb5_unparse_name_fixed_flags(krb5_context context,
krb5_const_principal principal,
int flags,
char *name,
size_t len)
{
return unparse_name_fixed(context, principal, name, len, flags);
} }
static krb5_error_code static krb5_error_code
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) int flags)
{ {
size_t len = 0, plen; size_t len = 0, plen;
int i; int i;
@@ -371,7 +385,7 @@ unparse_name(krb5_context context,
krb5_set_error_string (context, "malloc: out of memory"); krb5_set_error_string (context, "malloc: out of memory");
return ENOMEM; return ENOMEM;
} }
ret = unparse_name_fixed(context, principal, *name, len, short_flag); ret = unparse_name_fixed(context, principal, *name, len, flags);
if(ret) { if(ret) {
free(*name); free(*name);
*name = NULL; *name = NULL;
@@ -384,7 +398,16 @@ krb5_unparse_name(krb5_context context,
krb5_const_principal principal, krb5_const_principal principal,
char **name) char **name)
{ {
return unparse_name(context, principal, name, FALSE); return unparse_name(context, principal, name, 0);
}
krb5_error_code KRB5_LIB_FUNCTION
krb5_unparse_name_flags(krb5_context context,
krb5_const_principal principal,
int flags,
char **name)
{
return unparse_name(context, principal, name, flags);
} }
krb5_error_code KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_FUNCTION
@@ -392,7 +415,7 @@ krb5_unparse_name_short(krb5_context context,
krb5_const_principal principal, krb5_const_principal principal,
char **name) char **name)
{ {
return unparse_name(context, principal, name, TRUE); return unparse_name(context, principal, name, KRB5_PRINCIPAL_UNPARSE_SHORT);
} }
#if 0 /* not implemented */ #if 0 /* not implemented */
@@ -408,7 +431,7 @@ krb5_unparse_name_ext(krb5_context context,
#endif #endif
krb5_realm* krb5_realm * KRB5_LIB_FUNCTION
krb5_princ_realm(krb5_context context, krb5_princ_realm(krb5_context context,
krb5_principal principal) krb5_principal principal)
{ {