Skip to content

Commit cf34645

Browse files
author
Pavel Filipenský
committed
lib:krb5_wrap: Add smb_krb5_parse_name_flags()
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15727 Signed-off-by: Pavel Filipenský <[email protected]> Reviewed-by: Stefan Metzmacher <[email protected]> Reviewed-by: Alexander Bokovoy <[email protected]>
1 parent 8831eec commit cf34645

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

lib/krb5_wrap/krb5_samba.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -836,24 +836,49 @@ krb5_error_code smb_krb5_get_allowed_etypes(krb5_context context,
836836
krb5_error_code smb_krb5_parse_name(krb5_context context,
837837
const char *name,
838838
krb5_principal *principal)
839+
{
840+
return smb_krb5_parse_name_flags(context, name, 0, principal);
841+
}
842+
843+
/**
844+
* @brief Convert a string principal name to a Kerberos principal.
845+
*
846+
* @param[in] context The library context
847+
*
848+
* @param[in] name The principal as a unix charset string.
849+
*
850+
* @param[in] flags Flags for krb5_parse_name_flags()
851+
*
852+
* @param[out] principal The newly allocated principal.
853+
*
854+
* Use krb5_free_principal() to free a principal when it is no longer needed.
855+
*
856+
* @return 0 on success, a Kerberos error code otherwise.
857+
*/
858+
krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
859+
const char *name,
860+
int flags,
861+
krb5_principal *principal)
839862
{
840863
krb5_error_code ret;
841864
char *utf8_name;
842865
size_t converted_size;
843866
TALLOC_CTX *frame = talloc_stackframe();
844867

845868
if (!push_utf8_talloc(frame, &utf8_name, name, &converted_size)) {
846-
talloc_free(frame);
869+
TALLOC_FREE(frame);
847870
return ENOMEM;
848871
}
872+
TALLOC_FREE(frame);
849873

850-
ret = krb5_parse_name(context, utf8_name, principal);
851-
if (ret == KRB5_PARSE_MALFORMED) {
852-
ret = krb5_parse_name_flags(context, utf8_name,
853-
KRB5_PRINCIPAL_PARSE_ENTERPRISE,
854-
principal);
874+
ret = krb5_parse_name_flags(context, utf8_name, flags, principal);
875+
if (ret != KRB5_PARSE_MALFORMED) {
876+
return ret;
855877
}
856-
TALLOC_FREE(frame);
878+
879+
flags |= KRB5_PRINCIPAL_PARSE_ENTERPRISE;
880+
ret = krb5_parse_name_flags(context, utf8_name, flags, principal);
881+
857882
return ret;
858883
}
859884

lib/krb5_wrap/krb5_samba.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ krb5_error_code smb_krb5_parse_name(krb5_context context,
186186
const char *name, /* in unix charset */
187187
krb5_principal *principal);
188188

189+
krb5_error_code smb_krb5_parse_name_flags(krb5_context context,
190+
const char *name, /* unix charset */
191+
int flags,
192+
krb5_principal *principal);
193+
189194
krb5_error_code smb_krb5_unparse_name(TALLOC_CTX *mem_ctx,
190195
krb5_context context,
191196
krb5_const_principal principal,

0 commit comments

Comments
 (0)