diff options
author | Günther Deschner <gd@samba.org> | 2014-05-08 14:59:00 +0200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-08-08 06:02:35 +0200 |
commit | 9fed7ed00eb74a82e822dca2c9f267fe0c47069f (patch) | |
tree | 85b415f1f3b02c49971542defe4856b0e673abd7 | |
parent | 57b6517441ae66bab6cab211ee8843fe7143b296 (diff) | |
download | samba-9fed7ed00eb74a82e822dca2c9f267fe0c47069f.tar.gz |
lib/krb5_wrap: add krb5_copy_data_contents.
This reuses krb5_data_copy() if available, choosed not to call it
krb5_data_copy as that is easily mixed up with krb5_copy_data (which allocs the
krb5_data pointer). Thanks Simo for proposing the better name.
Guenther
Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-rw-r--r-- | lib/krb5_wrap/krb5_samba.c | 33 | ||||
-rw-r--r-- | lib/krb5_wrap/krb5_samba.h | 4 | ||||
-rwxr-xr-x | source4/heimdal_build/wscript_configure | 1 | ||||
-rw-r--r-- | wscript_configure_system_mitkrb5 | 1 |
4 files changed, 39 insertions, 0 deletions
diff --git a/lib/krb5_wrap/krb5_samba.c b/lib/krb5_wrap/krb5_samba.c index ec44f9ade26..76e7ab53a82 100644 --- a/lib/krb5_wrap/krb5_samba.c +++ b/lib/krb5_wrap/krb5_samba.c @@ -735,6 +735,39 @@ void kerberos_free_data_contents(krb5_context context, krb5_data *pdata) } /* + * @brief copy a buffer into a krb5_data struct + * + * @param[in] p The krb5_data + * @param[in] data The data to copy + * @param[in] length The length of the data to copy + * @return krb5_error_code + * + * Caller has to free krb5_data with kerberos_free_data_contents(). + */ + +krb5_error_code krb5_copy_data_contents(krb5_data *p, + const void *data, + size_t len) +{ +#if defined(HAVE_KRB5_DATA_COPY) + return krb5_data_copy(p, data, len); +#else + if (len) { + p->data = malloc(len); + if (p->data == NULL) { + return ENOMEM; + } + memmove(p->data, data, len); + } else { + p->data = NULL; + } + p->length = len; + p->magic = KV5M_DATA; + return 0; +#endif +} + +/* get a kerberos5 ticket for the given service */ int cli_krb5_get_ticket(TALLOC_CTX *mem_ctx, diff --git a/lib/krb5_wrap/krb5_samba.h b/lib/krb5_wrap/krb5_samba.h index 5a3d20e1b8e..7835a3128fd 100644 --- a/lib/krb5_wrap/krb5_samba.h +++ b/lib/krb5_wrap/krb5_samba.h @@ -321,6 +321,10 @@ char *smb_krb5_principal_get_comp_string(TALLOC_CTX *mem_ctx, krb5_const_principal principal, unsigned int component); +krb5_error_code krb5_copy_data_contents(krb5_data *p, + const void *data, + size_t len); + #endif /* HAVE_KRB5 */ int cli_krb5_get_ticket(TALLOC_CTX *mem_ctx, diff --git a/source4/heimdal_build/wscript_configure b/source4/heimdal_build/wscript_configure index cb53629480f..5caef5c8c12 100755 --- a/source4/heimdal_build/wscript_configure +++ b/source4/heimdal_build/wscript_configure @@ -163,6 +163,7 @@ conf.define('HAVE_KRB5_PRINCIPAL_GET_NUM_COMP', 1) conf.define('HAVE_GSSAPI_GSSAPI_SPNEGO_H', 1) conf.define('HAVE_FLAGS_IN_KRB5_CREDS', 1) conf.define('HAVE_KRB5_CONFIG_GET_BOOL_DEFAULT', 1) +conf.define('HAVE_KRB5_DATA_COPY', 1) heimdal_includedirs = [] heimdal_libdirs = [] diff --git a/wscript_configure_system_mitkrb5 b/wscript_configure_system_mitkrb5 index b971cf79b5f..1c6cfc4c257 100644 --- a/wscript_configure_system_mitkrb5 +++ b/wscript_configure_system_mitkrb5 @@ -107,6 +107,7 @@ conf.CHECK_FUNCS(''' krb5_cc_get_lifetime krb5_cc_retrieve_cred krb5_free_checksum_contents krb5_c_make_checksum krb5_create_checksum krb5_config_get_bool_default krb5_get_profile + krb5_data_copy ''', lib='krb5 k5crypto') conf.CHECK_DECLS('''krb5_get_credentials_for_user |