1132Srobinson /*
2132Srobinson * CDDL HEADER START
3132Srobinson *
4132Srobinson * The contents of this file are subject to the terms of the
5132Srobinson * Common Development and Distribution License, Version 1.0 only
6132Srobinson * (the "License"). You may not use this file except in compliance
7132Srobinson * with the License.
8132Srobinson *
9132Srobinson * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10132Srobinson * or http://www.opensolaris.org/os/licensing.
11132Srobinson * See the License for the specific language governing permissions
12132Srobinson * and limitations under the License.
13132Srobinson *
14132Srobinson * When distributing Covered Code, include this CDDL HEADER in each
15132Srobinson * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16132Srobinson * If applicable, add the following below this CDDL HEADER, with the
17132Srobinson * fields enclosed by brackets "[]" replaced with your own identifying
18132Srobinson * information: Portions Copyright [yyyy] [name of copyright owner]
19132Srobinson *
20132Srobinson * CDDL HEADER END
21132Srobinson */
22132Srobinson
23132Srobinson /*
24*1219Sraf * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25132Srobinson * Use is subject to license terms.
26132Srobinson */
27132Srobinson
28132Srobinson #pragma ident "%Z%%M% %I% %E% SMI"
29132Srobinson
30*1219Sraf #include "mt.h"
31132Srobinson #include <rpc/rpc.h>
32132Srobinson #include <rpc/key_prot.h>
33132Srobinson
34132Srobinson /*
35132Srobinson * Originally ompiled from key_prot.x using rpcgen.
36132Srobinson */
37132Srobinson
38132Srobinson bool_t
xdr_keystatus(XDR * xdrs,keystatus * objp)39132Srobinson xdr_keystatus(XDR *xdrs, keystatus *objp)
40132Srobinson {
41132Srobinson return (xdr_enum(xdrs, (enum_t *)objp));
42132Srobinson }
43132Srobinson
44132Srobinson bool_t
xdr_keybuf(XDR * xdrs,keybuf objp)45132Srobinson xdr_keybuf(XDR *xdrs, keybuf objp)
46132Srobinson {
47132Srobinson return (xdr_opaque(xdrs, objp, HEXKEYBYTES));
48132Srobinson }
49132Srobinson
50132Srobinson bool_t
xdr_keybuf3(XDR * xdrs,keybuf3 * objp)51132Srobinson xdr_keybuf3(XDR *xdrs, keybuf3 *objp)
52132Srobinson {
53132Srobinson return (xdr_bytes(xdrs, (char **)&objp->keybuf3_val,
54132Srobinson (uint_t *)&objp->keybuf3_len, ~0));
55132Srobinson }
56132Srobinson
57132Srobinson bool_t
xdr_netnamestr(XDR * xdrs,netnamestr * objp)58132Srobinson xdr_netnamestr(XDR *xdrs, netnamestr *objp)
59132Srobinson {
60132Srobinson return (xdr_string(xdrs, objp, MAXNETNAMELEN));
61132Srobinson }
62132Srobinson
63132Srobinson bool_t
xdr_keylen_t(XDR * xdrs,keylen_t * objp)64132Srobinson xdr_keylen_t(XDR *xdrs, keylen_t *objp)
65132Srobinson {
66132Srobinson return (xdr_int(xdrs, objp));
67132Srobinson }
68132Srobinson
69132Srobinson bool_t
xdr_algtype_t(XDR * xdrs,algtype_t * objp)70132Srobinson xdr_algtype_t(XDR *xdrs, algtype_t *objp)
71132Srobinson {
72132Srobinson return (xdr_int(xdrs, objp));
73132Srobinson }
74132Srobinson
75132Srobinson bool_t
xdr_mechtype(XDR * xdrs,mechtype * objp)76132Srobinson xdr_mechtype(XDR *xdrs, mechtype *objp)
77132Srobinson {
78132Srobinson if (!xdr_keylen_t(xdrs, &objp->keylen))
79132Srobinson return (FALSE);
80132Srobinson return (xdr_algtype_t(xdrs, &objp->algtype));
81132Srobinson }
82132Srobinson
83132Srobinson bool_t
xdr_keynum_t(XDR * xdrs,keynum_t * objp)84132Srobinson xdr_keynum_t(XDR *xdrs, keynum_t *objp)
85132Srobinson {
86132Srobinson return (xdr_int(xdrs, objp));
87132Srobinson }
88132Srobinson
89132Srobinson bool_t
xdr_deskeyarray(XDR * xdrs,deskeyarray * objp)90132Srobinson xdr_deskeyarray(XDR *xdrs, deskeyarray *objp)
91132Srobinson {
92132Srobinson return (xdr_array(xdrs, (char **)&objp->deskeyarray_val,
93132Srobinson (uint_t *)&objp->deskeyarray_len, ~0,
94132Srobinson sizeof (des_block), (xdrproc_t)xdr_des_block));
95132Srobinson }
96132Srobinson
97132Srobinson bool_t
xdr_cryptkeyarg(XDR * xdrs,cryptkeyarg * objp)98132Srobinson xdr_cryptkeyarg(XDR *xdrs, cryptkeyarg *objp)
99132Srobinson {
100132Srobinson if (!xdr_netnamestr(xdrs, &objp->remotename))
101132Srobinson return (FALSE);
102132Srobinson return (xdr_des_block(xdrs, &objp->deskey));
103132Srobinson }
104132Srobinson
105132Srobinson bool_t
xdr_cryptkeyarg2(XDR * xdrs,cryptkeyarg2 * objp)106132Srobinson xdr_cryptkeyarg2(XDR *xdrs, cryptkeyarg2 *objp)
107132Srobinson {
108132Srobinson if (!xdr_netnamestr(xdrs, &objp->remotename))
109132Srobinson return (FALSE);
110132Srobinson if (!xdr_netobj(xdrs, &objp->remotekey))
111132Srobinson return (FALSE);
112132Srobinson return (xdr_des_block(xdrs, &objp->deskey));
113132Srobinson }
114132Srobinson
115132Srobinson bool_t
xdr_cryptkeyarg3(XDR * xdrs,cryptkeyarg3 * objp)116132Srobinson xdr_cryptkeyarg3(XDR *xdrs, cryptkeyarg3 *objp)
117132Srobinson {
118132Srobinson if (!xdr_netnamestr(xdrs, &objp->remotename))
119132Srobinson return (FALSE);
120132Srobinson if (!xdr_keybuf3(xdrs, &objp->remotekey))
121132Srobinson return (FALSE);
122132Srobinson if (!xdr_deskeyarray(xdrs, &objp->deskey))
123132Srobinson return (FALSE);
124132Srobinson if (!xdr_algtype_t(xdrs, &objp->algtype))
125132Srobinson return (FALSE);
126132Srobinson return (xdr_keylen_t(xdrs, &objp->keylen));
127132Srobinson }
128132Srobinson
129132Srobinson bool_t
xdr_cryptkeyres(XDR * xdrs,cryptkeyres * objp)130132Srobinson xdr_cryptkeyres(XDR *xdrs, cryptkeyres *objp)
131132Srobinson {
132132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
133132Srobinson return (FALSE);
134132Srobinson if (objp->status != KEY_SUCCESS)
135132Srobinson return (TRUE);
136132Srobinson return (xdr_des_block(xdrs, &objp->cryptkeyres_u.deskey));
137132Srobinson }
138132Srobinson
139132Srobinson bool_t
xdr_cryptkeyres3(XDR * xdrs,cryptkeyres3 * objp)140132Srobinson xdr_cryptkeyres3(XDR *xdrs, cryptkeyres3 *objp)
141132Srobinson {
142132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
143132Srobinson return (FALSE);
144132Srobinson if (objp->status != KEY_SUCCESS)
145132Srobinson return (TRUE);
146132Srobinson return (xdr_deskeyarray(xdrs, &objp->cryptkeyres3_u.deskey));
147132Srobinson }
148132Srobinson
149132Srobinson bool_t
xdr_unixcred(XDR * xdrs,unixcred * objp)150132Srobinson xdr_unixcred(XDR *xdrs, unixcred *objp)
151132Srobinson {
152132Srobinson if (!xdr_u_int(xdrs, &objp->uid))
153132Srobinson return (FALSE);
154132Srobinson if (!xdr_u_int(xdrs, &objp->gid))
155132Srobinson return (FALSE);
156132Srobinson return (xdr_array(xdrs, (char **)&objp->gids.gids_val,
157132Srobinson (uint_t *)&objp->gids.gids_len, MAXGIDS,
158132Srobinson sizeof (uint_t), (xdrproc_t)xdr_u_int));
159132Srobinson }
160132Srobinson
161132Srobinson bool_t
xdr_unixcred3(XDR * xdrs,unixcred3 * objp)162132Srobinson xdr_unixcred3(XDR *xdrs, unixcred3 *objp)
163132Srobinson {
164132Srobinson if (!xdr_u_int(xdrs, &objp->uid))
165132Srobinson return (FALSE);
166132Srobinson if (!xdr_u_int(xdrs, &objp->gid))
167132Srobinson return (FALSE);
168132Srobinson return (xdr_array(xdrs, (char **)&objp->gids.gids_val,
169132Srobinson (uint_t *)&objp->gids.gids_len, ~0,
170132Srobinson sizeof (uint_t), (xdrproc_t)xdr_u_int));
171132Srobinson }
172132Srobinson
173132Srobinson bool_t
xdr_getcredres(XDR * xdrs,getcredres * objp)174132Srobinson xdr_getcredres(XDR *xdrs, getcredres *objp)
175132Srobinson {
176132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
177132Srobinson return (FALSE);
178132Srobinson if (objp->status != KEY_SUCCESS)
179132Srobinson return (TRUE);
180132Srobinson return (xdr_unixcred(xdrs, &objp->getcredres_u.cred));
181132Srobinson }
182132Srobinson
183132Srobinson bool_t
xdr_getcredres3(XDR * xdrs,getcredres3 * objp)184132Srobinson xdr_getcredres3(XDR *xdrs, getcredres3 *objp)
185132Srobinson {
186132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
187132Srobinson return (FALSE);
188132Srobinson if (objp->status != KEY_SUCCESS)
189132Srobinson return (TRUE);
190132Srobinson return (xdr_unixcred3(xdrs, &objp->getcredres3_u.cred));
191132Srobinson }
192132Srobinson
193132Srobinson bool_t
xdr_key_netstarg(XDR * xdrs,key_netstarg * objp)194132Srobinson xdr_key_netstarg(XDR *xdrs, key_netstarg *objp)
195132Srobinson {
196132Srobinson if (!xdr_keybuf(xdrs, objp->st_priv_key))
197132Srobinson return (FALSE);
198132Srobinson if (!xdr_keybuf(xdrs, objp->st_pub_key))
199132Srobinson return (FALSE);
200132Srobinson return (xdr_netnamestr(xdrs, &objp->st_netname));
201132Srobinson }
202132Srobinson
203132Srobinson bool_t
xdr_key_netstarg3(XDR * xdrs,key_netstarg3 * objp)204132Srobinson xdr_key_netstarg3(XDR *xdrs, key_netstarg3 *objp)
205132Srobinson {
206132Srobinson if (!xdr_keybuf3(xdrs, &objp->st_priv_key))
207132Srobinson return (FALSE);
208132Srobinson if (!xdr_keybuf3(xdrs, &objp->st_pub_key))
209132Srobinson return (FALSE);
210132Srobinson if (!xdr_netnamestr(xdrs, &objp->st_netname))
211132Srobinson return (FALSE);
212132Srobinson if (!xdr_algtype_t(xdrs, &objp->algtype))
213132Srobinson return (FALSE);
214132Srobinson if (!xdr_keylen_t(xdrs, &objp->keylen))
215132Srobinson return (FALSE);
216132Srobinson return (xdr_des_block(xdrs, &objp->userkey));
217132Srobinson }
218132Srobinson
219132Srobinson bool_t
xdr_key_netstres(XDR * xdrs,key_netstres * objp)220132Srobinson xdr_key_netstres(XDR *xdrs, key_netstres *objp)
221132Srobinson {
222132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
223132Srobinson return (FALSE);
224132Srobinson switch (objp->status) {
225132Srobinson case KEY_SUCCESS:
226132Srobinson if (!xdr_key_netstarg(xdrs, &objp->key_netstres_u.knet))
227132Srobinson return (FALSE);
228132Srobinson break;
229132Srobinson }
230132Srobinson return (TRUE);
231132Srobinson }
232132Srobinson
233132Srobinson bool_t
xdr_key_netstres3(XDR * xdrs,key_netstres3 * objp)234132Srobinson xdr_key_netstres3(XDR *xdrs, key_netstres3 *objp)
235132Srobinson {
236132Srobinson if (!xdr_keystatus(xdrs, &objp->status))
237132Srobinson return (FALSE);
238132Srobinson if (objp->status != KEY_SUCCESS)
239132Srobinson return (TRUE);
240132Srobinson return (xdr_key_netstarg3(xdrs, &objp->key_netstres3_u.knet));
241132Srobinson }
242132Srobinson
243132Srobinson bool_t
xdr_deskeyarg3(XDR * xdrs,deskeyarg3 * objp)244132Srobinson xdr_deskeyarg3(XDR *xdrs, deskeyarg3 *objp)
245132Srobinson {
246132Srobinson if (!xdr_keybuf3(xdrs, &objp->pub_key))
247132Srobinson return (FALSE);
248132Srobinson if (!xdr_int(xdrs, &objp->nkeys))
249132Srobinson return (FALSE);
250132Srobinson if (!xdr_algtype_t(xdrs, &objp->algtype))
251132Srobinson return (FALSE);
252132Srobinson return (xdr_keylen_t(xdrs, &objp->keylen));
253132Srobinson }
254132Srobinson
255132Srobinson bool_t
xdr_setkeyarg3(XDR * xdrs,setkeyarg3 * objp)256132Srobinson xdr_setkeyarg3(XDR *xdrs, setkeyarg3 *objp)
257132Srobinson {
258132Srobinson if (!xdr_keybuf3(xdrs, &objp->key))
259132Srobinson return (FALSE);
260132Srobinson if (!xdr_des_block(xdrs, &objp->userkey))
261132Srobinson return (FALSE);
262132Srobinson if (!xdr_algtype_t(xdrs, &objp->algtype))
263132Srobinson return (FALSE);
264132Srobinson return (xdr_keylen_t(xdrs, &objp->keylen));
265132Srobinson }
266