1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22
23 /*
24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 */
27
28 #include "mt.h"
29 #include <rpc/rpc.h>
30 #include <rpc/key_prot.h>
31
32 /*
33 * Originally ompiled from key_prot.x using rpcgen.
34 */
35
36 bool_t
xdr_keystatus(XDR * xdrs,keystatus * objp)37 xdr_keystatus(XDR *xdrs, keystatus *objp)
38 {
39 return (xdr_enum(xdrs, (enum_t *)objp));
40 }
41
42 bool_t
xdr_keybuf(XDR * xdrs,keybuf objp)43 xdr_keybuf(XDR *xdrs, keybuf objp)
44 {
45 return (xdr_opaque(xdrs, objp, HEXKEYBYTES));
46 }
47
48 bool_t
xdr_keybuf3(XDR * xdrs,keybuf3 * objp)49 xdr_keybuf3(XDR *xdrs, keybuf3 *objp)
50 {
51 return (xdr_bytes(xdrs, (char **)&objp->keybuf3_val,
52 (uint_t *)&objp->keybuf3_len, ~0));
53 }
54
55 bool_t
xdr_netnamestr(XDR * xdrs,netnamestr * objp)56 xdr_netnamestr(XDR *xdrs, netnamestr *objp)
57 {
58 return (xdr_string(xdrs, objp, MAXNETNAMELEN));
59 }
60
61 bool_t
xdr_keylen_t(XDR * xdrs,keylen_t * objp)62 xdr_keylen_t(XDR *xdrs, keylen_t *objp)
63 {
64 return (xdr_int(xdrs, objp));
65 }
66
67 bool_t
xdr_algtype_t(XDR * xdrs,algtype_t * objp)68 xdr_algtype_t(XDR *xdrs, algtype_t *objp)
69 {
70 return (xdr_int(xdrs, objp));
71 }
72
73 bool_t
xdr_mechtype(XDR * xdrs,mechtype * objp)74 xdr_mechtype(XDR *xdrs, mechtype *objp)
75 {
76 if (!xdr_keylen_t(xdrs, &objp->keylen))
77 return (FALSE);
78 return (xdr_algtype_t(xdrs, &objp->algtype));
79 }
80
81 bool_t
xdr_keynum_t(XDR * xdrs,keynum_t * objp)82 xdr_keynum_t(XDR *xdrs, keynum_t *objp)
83 {
84 return (xdr_int(xdrs, objp));
85 }
86
87 bool_t
xdr_deskeyarray(XDR * xdrs,deskeyarray * objp)88 xdr_deskeyarray(XDR *xdrs, deskeyarray *objp)
89 {
90 return (xdr_array(xdrs, (char **)&objp->deskeyarray_val,
91 (uint_t *)&objp->deskeyarray_len, ~0,
92 sizeof (des_block), (xdrproc_t)xdr_des_block));
93 }
94
95 bool_t
xdr_cryptkeyarg(XDR * xdrs,cryptkeyarg * objp)96 xdr_cryptkeyarg(XDR *xdrs, cryptkeyarg *objp)
97 {
98 if (!xdr_netnamestr(xdrs, &objp->remotename))
99 return (FALSE);
100 return (xdr_des_block(xdrs, &objp->deskey));
101 }
102
103 bool_t
xdr_cryptkeyarg2(XDR * xdrs,cryptkeyarg2 * objp)104 xdr_cryptkeyarg2(XDR *xdrs, cryptkeyarg2 *objp)
105 {
106 if (!xdr_netnamestr(xdrs, &objp->remotename))
107 return (FALSE);
108 if (!xdr_netobj(xdrs, &objp->remotekey))
109 return (FALSE);
110 return (xdr_des_block(xdrs, &objp->deskey));
111 }
112
113 bool_t
xdr_cryptkeyarg3(XDR * xdrs,cryptkeyarg3 * objp)114 xdr_cryptkeyarg3(XDR *xdrs, cryptkeyarg3 *objp)
115 {
116 if (!xdr_netnamestr(xdrs, &objp->remotename))
117 return (FALSE);
118 if (!xdr_keybuf3(xdrs, &objp->remotekey))
119 return (FALSE);
120 if (!xdr_deskeyarray(xdrs, &objp->deskey))
121 return (FALSE);
122 if (!xdr_algtype_t(xdrs, &objp->algtype))
123 return (FALSE);
124 return (xdr_keylen_t(xdrs, &objp->keylen));
125 }
126
127 bool_t
xdr_cryptkeyres(XDR * xdrs,cryptkeyres * objp)128 xdr_cryptkeyres(XDR *xdrs, cryptkeyres *objp)
129 {
130 if (!xdr_keystatus(xdrs, &objp->status))
131 return (FALSE);
132 if (objp->status != KEY_SUCCESS)
133 return (TRUE);
134 return (xdr_des_block(xdrs, &objp->cryptkeyres_u.deskey));
135 }
136
137 bool_t
xdr_cryptkeyres3(XDR * xdrs,cryptkeyres3 * objp)138 xdr_cryptkeyres3(XDR *xdrs, cryptkeyres3 *objp)
139 {
140 if (!xdr_keystatus(xdrs, &objp->status))
141 return (FALSE);
142 if (objp->status != KEY_SUCCESS)
143 return (TRUE);
144 return (xdr_deskeyarray(xdrs, &objp->cryptkeyres3_u.deskey));
145 }
146
147 bool_t
xdr_unixcred(XDR * xdrs,unixcred * objp)148 xdr_unixcred(XDR *xdrs, unixcred *objp)
149 {
150 if (!xdr_u_int(xdrs, &objp->uid))
151 return (FALSE);
152 if (!xdr_u_int(xdrs, &objp->gid))
153 return (FALSE);
154 return (xdr_array(xdrs, (char **)&objp->gids.gids_val,
155 (uint_t *)&objp->gids.gids_len, MAXGIDS,
156 sizeof (uint_t), (xdrproc_t)xdr_u_int));
157 }
158
159 bool_t
xdr_unixcred3(XDR * xdrs,unixcred3 * objp)160 xdr_unixcred3(XDR *xdrs, unixcred3 *objp)
161 {
162 if (!xdr_u_int(xdrs, &objp->uid))
163 return (FALSE);
164 if (!xdr_u_int(xdrs, &objp->gid))
165 return (FALSE);
166 return (xdr_array(xdrs, (char **)&objp->gids.gids_val,
167 (uint_t *)&objp->gids.gids_len, ~0,
168 sizeof (uint_t), (xdrproc_t)xdr_u_int));
169 }
170
171 bool_t
xdr_getcredres(XDR * xdrs,getcredres * objp)172 xdr_getcredres(XDR *xdrs, getcredres *objp)
173 {
174 if (!xdr_keystatus(xdrs, &objp->status))
175 return (FALSE);
176 if (objp->status != KEY_SUCCESS)
177 return (TRUE);
178 return (xdr_unixcred(xdrs, &objp->getcredres_u.cred));
179 }
180
181 bool_t
xdr_getcredres3(XDR * xdrs,getcredres3 * objp)182 xdr_getcredres3(XDR *xdrs, getcredres3 *objp)
183 {
184 if (!xdr_keystatus(xdrs, &objp->status))
185 return (FALSE);
186 if (objp->status != KEY_SUCCESS)
187 return (TRUE);
188 return (xdr_unixcred3(xdrs, &objp->getcredres3_u.cred));
189 }
190
191 bool_t
xdr_key_netstarg(XDR * xdrs,key_netstarg * objp)192 xdr_key_netstarg(XDR *xdrs, key_netstarg *objp)
193 {
194 if (!xdr_keybuf(xdrs, objp->st_priv_key))
195 return (FALSE);
196 if (!xdr_keybuf(xdrs, objp->st_pub_key))
197 return (FALSE);
198 return (xdr_netnamestr(xdrs, &objp->st_netname));
199 }
200
201 bool_t
xdr_key_netstarg3(XDR * xdrs,key_netstarg3 * objp)202 xdr_key_netstarg3(XDR *xdrs, key_netstarg3 *objp)
203 {
204 if (!xdr_keybuf3(xdrs, &objp->st_priv_key))
205 return (FALSE);
206 if (!xdr_keybuf3(xdrs, &objp->st_pub_key))
207 return (FALSE);
208 if (!xdr_netnamestr(xdrs, &objp->st_netname))
209 return (FALSE);
210 if (!xdr_algtype_t(xdrs, &objp->algtype))
211 return (FALSE);
212 if (!xdr_keylen_t(xdrs, &objp->keylen))
213 return (FALSE);
214 return (xdr_des_block(xdrs, &objp->userkey));
215 }
216
217 bool_t
xdr_key_netstres(XDR * xdrs,key_netstres * objp)218 xdr_key_netstres(XDR *xdrs, key_netstres *objp)
219 {
220 if (!xdr_keystatus(xdrs, &objp->status))
221 return (FALSE);
222 switch (objp->status) {
223 case KEY_SUCCESS:
224 if (!xdr_key_netstarg(xdrs, &objp->key_netstres_u.knet))
225 return (FALSE);
226 break;
227 }
228 return (TRUE);
229 }
230
231 bool_t
xdr_key_netstres3(XDR * xdrs,key_netstres3 * objp)232 xdr_key_netstres3(XDR *xdrs, key_netstres3 *objp)
233 {
234 if (!xdr_keystatus(xdrs, &objp->status))
235 return (FALSE);
236 if (objp->status != KEY_SUCCESS)
237 return (TRUE);
238 return (xdr_key_netstarg3(xdrs, &objp->key_netstres3_u.knet));
239 }
240
241 bool_t
xdr_deskeyarg3(XDR * xdrs,deskeyarg3 * objp)242 xdr_deskeyarg3(XDR *xdrs, deskeyarg3 *objp)
243 {
244 if (!xdr_keybuf3(xdrs, &objp->pub_key))
245 return (FALSE);
246 if (!xdr_int(xdrs, &objp->nkeys))
247 return (FALSE);
248 if (!xdr_algtype_t(xdrs, &objp->algtype))
249 return (FALSE);
250 return (xdr_keylen_t(xdrs, &objp->keylen));
251 }
252
253 bool_t
xdr_setkeyarg3(XDR * xdrs,setkeyarg3 * objp)254 xdr_setkeyarg3(XDR *xdrs, setkeyarg3 *objp)
255 {
256 if (!xdr_keybuf3(xdrs, &objp->key))
257 return (FALSE);
258 if (!xdr_des_block(xdrs, &objp->userkey))
259 return (FALSE);
260 if (!xdr_algtype_t(xdrs, &objp->algtype))
261 return (FALSE);
262 return (xdr_keylen_t(xdrs, &objp->keylen));
263 }
264