xref: /freebsd/crypto/krb5/src/lib/kadm5/srv/adb_xdr.c (revision f1c4c3daccbaf3820f0e2224de53df12fc952fcc)
1 /* -*- mode: c; c-file-style: "bsd"; indent-tabs-mode: t -*- */
2 /*
3  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
4  *
5  * $Header$
6  */
7 
8 #include <sys/types.h>
9 #include <krb5.h>
10 #include <gssrpc/rpc.h>
11 #include	"server_internal.h"
12 #include "admin_xdr.h"
13 #ifdef HAVE_MEMORY_H
14 #include <memory.h>
15 #endif
16 
17 bool_t
xdr_krb5_key_data(XDR * xdrs,krb5_key_data * objp)18 xdr_krb5_key_data(XDR *xdrs, krb5_key_data *objp)
19 {
20     unsigned int tmp;
21 
22     if (!xdr_krb5_int16(xdrs, &objp->key_data_ver))
23 	return(FALSE);
24     if (!xdr_krb5_ui_2(xdrs, &objp->key_data_kvno))
25 	return(FALSE);
26     if (!xdr_krb5_int16(xdrs, &objp->key_data_type[0]))
27 	return(FALSE);
28     if (!xdr_krb5_int16(xdrs, &objp->key_data_type[1]))
29 	return(FALSE);
30     if (!xdr_krb5_ui_2(xdrs, &objp->key_data_length[0]))
31 	return(FALSE);
32     if (!xdr_krb5_ui_2(xdrs, &objp->key_data_length[1]))
33 	return(FALSE);
34 
35     tmp = (unsigned int) objp->key_data_length[0];
36     if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[0],
37 		   &tmp, ~0))
38 	return FALSE;
39     if (tmp != objp->key_data_length[0])
40 	return FALSE;
41 
42     tmp = (unsigned int) objp->key_data_length[1];
43     if (!xdr_bytes(xdrs, (char **) &objp->key_data_contents[1],
44 		   &tmp, ~0))
45 	return FALSE;
46     if (tmp != objp->key_data_length[1])
47 	return FALSE;
48 
49     /* don't need to copy tmp out, since key_data_length will be set
50        by the above encoding. */
51 
52     return(TRUE);
53 }
54 
55 bool_t
xdr_osa_pw_hist_ent(XDR * xdrs,osa_pw_hist_ent * objp)56 xdr_osa_pw_hist_ent(XDR *xdrs, osa_pw_hist_ent *objp)
57 {
58     if (!xdr_array(xdrs, (caddr_t *) &objp->key_data,
59 		   (u_int *) &objp->n_key_data, ~0,
60 		   sizeof(krb5_key_data), (xdrproc_t)xdr_krb5_key_data))
61 	return (FALSE);
62     return (TRUE);
63 }
64 
65 bool_t
xdr_osa_princ_ent_rec(XDR * xdrs,osa_princ_ent_t objp)66 xdr_osa_princ_ent_rec(XDR *xdrs, osa_princ_ent_t objp)
67 {
68     switch (xdrs->x_op) {
69     case XDR_ENCODE:
70 	 objp->version = OSA_ADB_PRINC_VERSION_1;
71 	 /* fall through */
72     case XDR_FREE:
73 	 if (!xdr_int(xdrs, &objp->version))
74 	      return FALSE;
75 	 break;
76     case XDR_DECODE:
77 	 if (!xdr_int(xdrs, &objp->version))
78 	      return FALSE;
79 	 if (objp->version != OSA_ADB_PRINC_VERSION_1)
80 	      return FALSE;
81 	 break;
82     }
83 
84     if (!xdr_nullstring(xdrs, &objp->policy))
85 	return (FALSE);
86     if (!xdr_long(xdrs, &objp->aux_attributes))
87 	return (FALSE);
88     if (!xdr_u_int(xdrs, &objp->old_key_next))
89 	return (FALSE);
90     if (!xdr_krb5_kvno(xdrs, &objp->admin_history_kvno))
91 	return (FALSE);
92     if (!xdr_array(xdrs, (caddr_t *) &objp->old_keys,
93 		   (unsigned int *) &objp->old_key_len, ~0,
94 		   sizeof(osa_pw_hist_ent), (xdrproc_t)xdr_osa_pw_hist_ent))
95 	return (FALSE);
96     return (TRUE);
97 }
98 
99 void
osa_free_princ_ent(osa_princ_ent_t val)100 osa_free_princ_ent(osa_princ_ent_t val)
101 {
102     XDR xdrs;
103 
104     xdrmem_create(&xdrs, NULL, 0, XDR_FREE);
105 
106     xdr_osa_princ_ent_rec(&xdrs, val);
107     free(val);
108 }
109