From 27546db2b4b599f2f5a2683c1216994cf2f89e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Fri, 25 Nov 2005 21:46:40 +0000 Subject: [PATCH] (krb5_kt_get_full_name): new function git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16295 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/keytab.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/krb5/keytab.c b/lib/krb5/keytab.c index 6fbab0136..edc999402 100644 --- a/lib/krb5/keytab.c +++ b/lib/krb5/keytab.c @@ -239,6 +239,40 @@ krb5_kt_get_name(krb5_context context, return (*keytab->get_name)(context, keytab, name, namesize); } +/* + * Retrieve the full name of the keytab `keytab' and store the name in + * `str'. `str' needs to be freed by the caller using free(3). + * Returns 0 or an error. On error, *str is set to NULL. + */ + +krb5_error_code KRB5_LIB_FUNCTION +krb5_kt_get_full_name(krb5_context context, + krb5_keytab keytab, + char **str) +{ + char type[KRB5_KT_PREFIX_MAX_LEN]; + char name[MAXPATHLEN]; + krb5_error_code ret; + + *str = NULL; + + ret = krb5_kt_get_type(context, keytab, type, sizeof(type)); + if (ret) + return ret; + + ret = krb5_kt_get_name(context, keytab, name, sizeof(name)); + if (ret) + return ret; + + if (asprintf(str, "%s:%s", type, name) == -1) { + krb5_set_error_string(context, "malloc - out of memory"); + *str = NULL; + return ENOMEM; + } + + return 0; +} + /* * Finish using the keytab in `id'. All resources will be released, * even on errors. Return 0 or an error.