lib/krb5_wrap: add krb5_copy_data_contents.
authorGünther Deschner <gd@samba.org>
Thu, 8 May 2014 12:59:00 +0000 (14:59 +0200)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 8 Aug 2014 04:02:35 +0000 (06:02 +0200)
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>
lib/krb5_wrap/krb5_samba.c
lib/krb5_wrap/krb5_samba.h
source4/heimdal_build/wscript_configure
wscript_configure_system_mitkrb5

index ec44f9ade2671dea9004f00fe0c253d0f990838d..76e7ab53a82066e16974a5c11373030e804d3b82 100644 (file)
@@ -734,6 +734,39 @@ void kerberos_free_data_contents(krb5_context context, krb5_data *pdata)
 #endif
 }
 
+/*
+ * @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
 */
index 5a3d20e1b8e38949ff148fe720051071e15ec3b7..7835a3128fdc012be9caa4a5a0e6c57b0f0eb656 100644 (file)
@@ -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,
index cb53629480f526849636af37efc68aac43d05a69..5caef5c8c123fc0240dc1e822205751c221fa2b9 100755 (executable)
@@ -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 = []
index b971cf79b5facfe64e6afd7bc9951add16d89579..1c6cfc4c2576e30c12221b1decf4a4ca897982c7 100644 (file)
@@ -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