key_prot.c revision 1219:f89f56c2d9ac
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#pragma ident "%Z%%M% %I% %E% SMI" 29 30#include "mt.h" 31#include <rpc/rpc.h> 32#include <rpc/key_prot.h> 33 34/* 35 * Originally ompiled from key_prot.x using rpcgen. 36 */ 37 38bool_t 39xdr_keystatus(XDR *xdrs, keystatus *objp) 40{ 41 return (xdr_enum(xdrs, (enum_t *)objp)); 42} 43 44bool_t 45xdr_keybuf(XDR *xdrs, keybuf objp) 46{ 47 return (xdr_opaque(xdrs, objp, HEXKEYBYTES)); 48} 49 50bool_t 51xdr_keybuf3(XDR *xdrs, keybuf3 *objp) 52{ 53 return (xdr_bytes(xdrs, (char **)&objp->keybuf3_val, 54 (uint_t *)&objp->keybuf3_len, ~0)); 55} 56 57bool_t 58xdr_netnamestr(XDR *xdrs, netnamestr *objp) 59{ 60 return (xdr_string(xdrs, objp, MAXNETNAMELEN)); 61} 62 63bool_t 64xdr_keylen_t(XDR *xdrs, keylen_t *objp) 65{ 66 return (xdr_int(xdrs, objp)); 67} 68 69bool_t 70xdr_algtype_t(XDR *xdrs, algtype_t *objp) 71{ 72 return (xdr_int(xdrs, objp)); 73} 74 75bool_t 76xdr_mechtype(XDR *xdrs, mechtype *objp) 77{ 78 if (!xdr_keylen_t(xdrs, &objp->keylen)) 79 return (FALSE); 80 return (xdr_algtype_t(xdrs, &objp->algtype)); 81} 82 83bool_t 84xdr_keynum_t(XDR *xdrs, keynum_t *objp) 85{ 86 return (xdr_int(xdrs, objp)); 87} 88 89bool_t 90xdr_deskeyarray(XDR *xdrs, deskeyarray *objp) 91{ 92 return (xdr_array(xdrs, (char **)&objp->deskeyarray_val, 93 (uint_t *)&objp->deskeyarray_len, ~0, 94 sizeof (des_block), (xdrproc_t)xdr_des_block)); 95} 96 97bool_t 98xdr_cryptkeyarg(XDR *xdrs, cryptkeyarg *objp) 99{ 100 if (!xdr_netnamestr(xdrs, &objp->remotename)) 101 return (FALSE); 102 return (xdr_des_block(xdrs, &objp->deskey)); 103} 104 105bool_t 106xdr_cryptkeyarg2(XDR *xdrs, cryptkeyarg2 *objp) 107{ 108 if (!xdr_netnamestr(xdrs, &objp->remotename)) 109 return (FALSE); 110 if (!xdr_netobj(xdrs, &objp->remotekey)) 111 return (FALSE); 112 return (xdr_des_block(xdrs, &objp->deskey)); 113} 114 115bool_t 116xdr_cryptkeyarg3(XDR *xdrs, cryptkeyarg3 *objp) 117{ 118 if (!xdr_netnamestr(xdrs, &objp->remotename)) 119 return (FALSE); 120 if (!xdr_keybuf3(xdrs, &objp->remotekey)) 121 return (FALSE); 122 if (!xdr_deskeyarray(xdrs, &objp->deskey)) 123 return (FALSE); 124 if (!xdr_algtype_t(xdrs, &objp->algtype)) 125 return (FALSE); 126 return (xdr_keylen_t(xdrs, &objp->keylen)); 127} 128 129bool_t 130xdr_cryptkeyres(XDR *xdrs, cryptkeyres *objp) 131{ 132 if (!xdr_keystatus(xdrs, &objp->status)) 133 return (FALSE); 134 if (objp->status != KEY_SUCCESS) 135 return (TRUE); 136 return (xdr_des_block(xdrs, &objp->cryptkeyres_u.deskey)); 137} 138 139bool_t 140xdr_cryptkeyres3(XDR *xdrs, cryptkeyres3 *objp) 141{ 142 if (!xdr_keystatus(xdrs, &objp->status)) 143 return (FALSE); 144 if (objp->status != KEY_SUCCESS) 145 return (TRUE); 146 return (xdr_deskeyarray(xdrs, &objp->cryptkeyres3_u.deskey)); 147} 148 149bool_t 150xdr_unixcred(XDR *xdrs, unixcred *objp) 151{ 152 if (!xdr_u_int(xdrs, &objp->uid)) 153 return (FALSE); 154 if (!xdr_u_int(xdrs, &objp->gid)) 155 return (FALSE); 156 return (xdr_array(xdrs, (char **)&objp->gids.gids_val, 157 (uint_t *)&objp->gids.gids_len, MAXGIDS, 158 sizeof (uint_t), (xdrproc_t)xdr_u_int)); 159} 160 161bool_t 162xdr_unixcred3(XDR *xdrs, unixcred3 *objp) 163{ 164 if (!xdr_u_int(xdrs, &objp->uid)) 165 return (FALSE); 166 if (!xdr_u_int(xdrs, &objp->gid)) 167 return (FALSE); 168 return (xdr_array(xdrs, (char **)&objp->gids.gids_val, 169 (uint_t *)&objp->gids.gids_len, ~0, 170 sizeof (uint_t), (xdrproc_t)xdr_u_int)); 171} 172 173bool_t 174xdr_getcredres(XDR *xdrs, getcredres *objp) 175{ 176 if (!xdr_keystatus(xdrs, &objp->status)) 177 return (FALSE); 178 if (objp->status != KEY_SUCCESS) 179 return (TRUE); 180 return (xdr_unixcred(xdrs, &objp->getcredres_u.cred)); 181} 182 183bool_t 184xdr_getcredres3(XDR *xdrs, getcredres3 *objp) 185{ 186 if (!xdr_keystatus(xdrs, &objp->status)) 187 return (FALSE); 188 if (objp->status != KEY_SUCCESS) 189 return (TRUE); 190 return (xdr_unixcred3(xdrs, &objp->getcredres3_u.cred)); 191} 192 193bool_t 194xdr_key_netstarg(XDR *xdrs, key_netstarg *objp) 195{ 196 if (!xdr_keybuf(xdrs, objp->st_priv_key)) 197 return (FALSE); 198 if (!xdr_keybuf(xdrs, objp->st_pub_key)) 199 return (FALSE); 200 return (xdr_netnamestr(xdrs, &objp->st_netname)); 201} 202 203bool_t 204xdr_key_netstarg3(XDR *xdrs, key_netstarg3 *objp) 205{ 206 if (!xdr_keybuf3(xdrs, &objp->st_priv_key)) 207 return (FALSE); 208 if (!xdr_keybuf3(xdrs, &objp->st_pub_key)) 209 return (FALSE); 210 if (!xdr_netnamestr(xdrs, &objp->st_netname)) 211 return (FALSE); 212 if (!xdr_algtype_t(xdrs, &objp->algtype)) 213 return (FALSE); 214 if (!xdr_keylen_t(xdrs, &objp->keylen)) 215 return (FALSE); 216 return (xdr_des_block(xdrs, &objp->userkey)); 217} 218 219bool_t 220xdr_key_netstres(XDR *xdrs, key_netstres *objp) 221{ 222 if (!xdr_keystatus(xdrs, &objp->status)) 223 return (FALSE); 224 switch (objp->status) { 225 case KEY_SUCCESS: 226 if (!xdr_key_netstarg(xdrs, &objp->key_netstres_u.knet)) 227 return (FALSE); 228 break; 229 } 230 return (TRUE); 231} 232 233bool_t 234xdr_key_netstres3(XDR *xdrs, key_netstres3 *objp) 235{ 236 if (!xdr_keystatus(xdrs, &objp->status)) 237 return (FALSE); 238 if (objp->status != KEY_SUCCESS) 239 return (TRUE); 240 return (xdr_key_netstarg3(xdrs, &objp->key_netstres3_u.knet)); 241} 242 243bool_t 244xdr_deskeyarg3(XDR *xdrs, deskeyarg3 *objp) 245{ 246 if (!xdr_keybuf3(xdrs, &objp->pub_key)) 247 return (FALSE); 248 if (!xdr_int(xdrs, &objp->nkeys)) 249 return (FALSE); 250 if (!xdr_algtype_t(xdrs, &objp->algtype)) 251 return (FALSE); 252 return (xdr_keylen_t(xdrs, &objp->keylen)); 253} 254 255bool_t 256xdr_setkeyarg3(XDR *xdrs, setkeyarg3 *objp) 257{ 258 if (!xdr_keybuf3(xdrs, &objp->key)) 259 return (FALSE); 260 if (!xdr_des_block(xdrs, &objp->userkey)) 261 return (FALSE); 262 if (!xdr_algtype_t(xdrs, &objp->algtype)) 263 return (FALSE); 264 return (xdr_keylen_t(xdrs, &objp->keylen)); 265} 266