s4-kdc/wdc-samba4: add a copy of samba_kdc_build_edata_reply for Heimdal.
authorGünther Deschner <gd@samba.org>
Thu, 15 May 2014 07:13:06 +0000 (09:13 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 21 Jul 2015 17:04:14 +0000 (19:04 +0200)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
source4/kdc/wdc-samba4.c

index b8929e6047ac7084a1aef8e3bea49c2bc6617090..4e7ea4b09071fec58b3085dc5c3db2b5b32bcc1c 100644 (file)
@@ -225,6 +225,47 @@ static krb5_data fill_krb5_data(void *data, size_t length)
        return kdata;
 }
 
+/* this function allocates 'data' using malloc.
+ * The caller is responsible for freeing it */
+static void samba_kdc_build_edata_reply(NTSTATUS nt_status, DATA_BLOB *e_data)
+{
+       krb5_error_code ret = 0;
+       PA_DATA pa;
+       unsigned char *buf;
+       size_t len;
+
+       if (!e_data)
+               return;
+
+       e_data->data   = NULL;
+       e_data->length = 0;
+
+       pa.padata_type          = KRB5_PADATA_PW_SALT;
+       pa.padata_value.length  = 12;
+       pa.padata_value.data    = malloc(pa.padata_value.length);
+       if (!pa.padata_value.data) {
+               e_data->length = 0;
+               e_data->data = NULL;
+               return;
+       }
+
+       SIVAL(pa.padata_value.data, 0, NT_STATUS_V(nt_status));
+       SIVAL(pa.padata_value.data, 4, 0);
+       SIVAL(pa.padata_value.data, 8, 1);
+
+       ASN1_MALLOC_ENCODE(PA_DATA, buf, len, &pa, &len, ret);
+       free(pa.padata_value.data);
+       if (ret) {
+               return;
+       }
+
+       e_data->data   = buf;
+       e_data->length = len;
+
+       return;
+}
+
+
 static krb5_error_code samba_wdc_check_client_access(void *priv,
                                                     krb5_context context,
                                                     krb5_kdc_configuration *config,