xref: /freebsd/crypto/krb5/src/plugins/kdb/ldap/libkdb_ldap/princ_xdr.c (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 
3 #include "kdb_ldap.h"
4 #include "ldap_principal.h"
5 #include "princ_xdr.h"
6 #include <kadm5/admin.h>
7 #include <kadm5/server_internal.h>
8 
9 void
ldap_osa_free_princ_ent(osa_princ_ent_t val)10 ldap_osa_free_princ_ent(osa_princ_ent_t val)
11 {
12     XDR xdrs;
13 
14     xdrmem_create(&xdrs, NULL, 0, XDR_FREE);
15     xdr_osa_princ_ent_rec(&xdrs, val);
16     xdr_destroy(&xdrs);
17 }
18 
19 krb5_error_code
krb5_lookup_tl_kadm_data(krb5_tl_data * tl_data,osa_princ_ent_rec * princ_entry)20 krb5_lookup_tl_kadm_data(krb5_tl_data *tl_data, osa_princ_ent_rec *princ_entry)
21 {
22 
23     XDR xdrs;
24 
25     xdrmem_create(&xdrs, (caddr_t)tl_data->tl_data_contents,
26                   tl_data->tl_data_length, XDR_DECODE);
27     if (!xdr_osa_princ_ent_rec(&xdrs, princ_entry)) {
28         xdr_destroy(&xdrs);
29         return KADM5_XDR_FAILURE;
30     }
31     xdr_destroy(&xdrs);
32 
33     return 0;
34 }
35 
36 krb5_error_code
krb5_update_tl_kadm_data(krb5_context context,krb5_db_entry * entry,osa_princ_ent_rec * princ_entry)37 krb5_update_tl_kadm_data(krb5_context context, krb5_db_entry *entry,
38                          osa_princ_ent_rec *princ_entry)
39 {
40     XDR xdrs;
41     krb5_tl_data tl_data;
42     krb5_error_code retval;
43 
44     xdralloc_create(&xdrs, XDR_ENCODE);
45     if (!xdr_osa_princ_ent_rec(&xdrs, princ_entry)) {
46         xdr_destroy(&xdrs);
47         return KADM5_XDR_FAILURE;
48     }
49     tl_data.tl_data_type = KRB5_TL_KADM_DATA;
50     tl_data.tl_data_length = xdr_getpos(&xdrs);
51     tl_data.tl_data_contents = (krb5_octet *)xdralloc_getdata(&xdrs);
52     retval = krb5_dbe_update_tl_data(context, entry, &tl_data);
53     xdr_destroy(&xdrs);
54     return retval;
55 }
56