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 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* from SunOS 4.1 */ 28 #pragma ident "%Z%%M% %I% %E% SMI" 29 30 /* 31 * modified for use by the boot program. 32 * 33 * auth_none.c 34 * Creates a client authentication handle for passing "null" 35 * credentials and verifiers to remote systems. 36 */ 37 38 #include <rpc/types.h> 39 #include <rpc/xdr.h> 40 #include <rpc/auth.h> 41 #include "clnt.h" 42 43 #define MAX_MARSHEL_SIZE 20 44 45 static struct auth_ops *authnone_ops(); 46 47 static struct authnone_private { 48 AUTH no_client; 49 char marshalled_client[MAX_MARSHEL_SIZE]; 50 uint_t mcnt; 51 } *authnone_private; 52 53 static struct authnone_private authnone_local; 54 55 AUTH * 56 authnone_create(void) 57 { 58 struct authnone_private *ap = authnone_private; 59 XDR xdr_stream; 60 XDR *xdrs; 61 62 if (ap == 0) { 63 ap = &authnone_local; 64 authnone_private = ap; 65 } 66 if (!ap->mcnt) { 67 ap->no_client.ah_cred = ap->no_client.ah_verf = _null_auth; 68 ap->no_client.ah_ops = authnone_ops(); 69 xdrs = &xdr_stream; 70 xdrmem_create(xdrs, ap->marshalled_client, 71 (uint_t)MAX_MARSHEL_SIZE, XDR_ENCODE); 72 (void) xdr_opaque_auth(xdrs, &ap->no_client.ah_cred); 73 (void) xdr_opaque_auth(xdrs, &ap->no_client.ah_verf); 74 ap->mcnt = XDR_GETPOS(xdrs); 75 XDR_DESTROY(xdrs); 76 } 77 return (&ap->no_client); 78 } 79 80 /*ARGSUSED*/ 81 static bool_t 82 authnone_marshal(AUTH *client, XDR *xdrs, struct cred *cr) 83 { 84 struct authnone_private *ap = authnone_private; 85 86 if (ap == 0) 87 return (0); 88 return ((*xdrs->x_ops->x_putbytes)(xdrs, 89 ap->marshalled_client, ap->mcnt)); 90 } 91 92 /* ARGSUSED */ 93 static void 94 authnone_verf(AUTH *foo) 95 { 96 } 97 98 /* ARGSUSED */ 99 static bool_t 100 authnone_validate(AUTH *foo, struct opaque_auth *bar) 101 { 102 return (TRUE); 103 } 104 105 /* ARGSUSED */ 106 static bool_t 107 authnone_refresh(AUTH *foo, struct rpc_msg *bar, cred_t *cr) 108 { 109 return (FALSE); 110 } 111 112 /* ARGSUSED */ 113 static void 114 authnone_destroy(AUTH *foo) 115 { 116 } 117 118 static struct auth_ops * 119 authnone_ops(void) 120 { 121 static struct auth_ops ops; 122 123 if (ops.ah_nextverf == NULL) { 124 ops.ah_nextverf = authnone_verf; 125 ops.ah_marshal = authnone_marshal; 126 ops.ah_validate = authnone_validate; 127 ops.ah_refresh = authnone_refresh; 128 ops.ah_destroy = authnone_destroy; 129 } 130 return (&ops); 131 } 132