diff options
-rw-r--r-- | source/include/includes.h | 4 | ||||
-rw-r--r-- | source/libsmb/clikrb5.c | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/source/include/includes.h b/source/include/includes.h index 61ca937138c..d3e8b3350d1 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -1221,6 +1221,10 @@ krb5_error_code smb_krb5_open_keytab(krb5_context context, const char *keytab_name, bool write_access, krb5_keytab *keytab); +krb5_error_code smb_krb5_keytab_name(TALLOC_CTX *mem_ctx, + krb5_context context, + krb5_keytab keytab, + const char **keytab_name); int smb_krb5_kt_add_entry(krb5_context context, krb5_keytab keytab, krb5_kvno kvno, diff --git a/source/libsmb/clikrb5.c b/source/libsmb/clikrb5.c index 52c729625c1..2aae9df53ed 100644 --- a/source/libsmb/clikrb5.c +++ b/source/libsmb/clikrb5.c @@ -1727,6 +1727,28 @@ done: return ret; } +krb5_error_code smb_krb5_keytab_name(TALLOC_CTX *mem_ctx, + krb5_context context, + krb5_keytab keytab, + const char **keytab_name) +{ + char keytab_string[MAX_KEYTAB_NAME_LEN]; + krb5_error_code ret = 0; + + ret = krb5_kt_get_name(context, keytab, + keytab_string, MAX_KEYTAB_NAME_LEN - 2); + if (ret) { + return ret; + } + + *keytab_name = talloc_strdup(mem_ctx, keytab_string); + if (!*keytab_name) { + return ENOMEM; + } + + return ret; +} + #else /* HAVE_KRB5 */ /* this saves a few linking headaches */ int cli_krb5_get_ticket(const char *principal, time_t time_offset, |