krb5_wrap: Add smb_krb5_mk_error()
authorAndreas Schneider <asn@samba.org>
Mon, 13 Jun 2016 08:52:46 +0000 (10:52 +0200)
committerJeremy Allison <jra@samba.org>
Sat, 18 Jun 2016 21:32:26 +0000 (23:32 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/krb5_wrap/krb5_samba.c
lib/krb5_wrap/krb5_samba.h

index 3cb1ceebb8be2054627b5600636ba6fa6cf34e5d..79e9450f0ee6805a2b10a24c381e5931202cb8e8 100644 (file)
@@ -138,6 +138,43 @@ bool setup_kaddr( krb5_address *pkaddr, struct sockaddr_storage *paddr)
 #error UNKNOWN_ADDRTYPE
 #endif
 
+krb5_error_code smb_krb5_mk_error(krb5_context context,
+                                 krb5_error_code error_code,
+                                 const char *e_text,
+                                 krb5_data *e_data,
+                                 krb5_data *enc_err)
+{
+       krb5_error_code code = EINVAL;
+#ifdef SAMBA4_USES_HEIMDAL
+       code = krb5_mk_error(context,
+                            error_code,
+                            e_text,
+                            e_data,
+                            NULL, /* client */
+                            NULL, /* server */
+                            NULL, /* client_time */
+                            NULL, /* client_usec */
+                            enc_err);
+#else
+       krb5_error dec_err = {
+               .error = error_code,
+       };
+
+       if (e_text != NULL) {
+               dec_err.text.length = strlen(e_text);
+               dec_err.text.data = discard_const_p(e_text, char);
+       }
+       if (e_data != NULL) {
+               dec_err.e_data = *e_data;
+       }
+
+       code = krb5_mk_error(context,
+                            &dec_err,
+                            enc_err);
+#endif
+       return code;
+}
+
 /**
 * @brief Create a keyblock based on input parameters
 *
index 15da9a1408b3180189db0960b1301a3c77247bbb..41664f1f84b590a71e9ebbc26e8242cadf19f7a3 100644 (file)
@@ -145,6 +145,12 @@ void krb5_free_unparsed_name(krb5_context ctx, char *val);
 /* Samba wrapper functions for krb5 functionality. */
 bool setup_kaddr( krb5_address *pkaddr, struct sockaddr_storage *paddr);
 
+krb5_error_code smb_krb5_mk_error(krb5_context context,
+                                 krb5_error_code error_code,
+                                 const char *e_text,
+                                 krb5_data *e_data,
+                                 krb5_data *enc_err);
+
 krb5_error_code get_kerberos_allowed_etypes(krb5_context context, krb5_enctype **enctypes);
 bool get_krb5_smb_session_key(TALLOC_CTX *mem_ctx,
                              krb5_context context,