1: /* 2: * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 3: * unrestricted use provided that this legend is included on all tape 4: * media and as a part of the software program in whole or part. Users 5: * may copy or modify Sun RPC without charge, but are not authorized 6: * to license or distribute it to anyone else except as part of a product or 7: * program developed by the user. 8: * 9: * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 10: * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 11: * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 12: * 13: * Sun RPC is provided with no support and without any obligation on the 14: * part of Sun Microsystems, Inc. to assist in its use, correction, 15: * modification or enhancement. 16: * 17: * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 18: * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 19: * OR ANY PART THEREOF. 20: * 21: * In no event will Sun Microsystems, Inc. be liable for any lost revenue 22: * or profits or other special, indirect and consequential damages, even if 23: * Sun has been advised of the possibility of such damages. 24: * 25: * Sun Microsystems, Inc. 26: * 2550 Garcia Avenue 27: * Mountain View, California 94043 28: */ 29: /* @(#)auth.h 1.3 85/03/28 SMI */ 30: 31: /* 32: * auth.h, Authentication interface. 33: 34: * Copyright (C) 1984, Sun Microsystems, Inc. 35: * 36: * The data structures are completely opaque to the client. The client 37: * is required to pass a AUTH * to routines that create rpc 38: * "sessions". 39: */ 40: 41: 42: #define MAX_AUTH_BYTES 400 43: 44: 45: /* 46: * Status returned from authentication check 47: */ 48: enum auth_stat { 49: AUTH_OK=0, 50: /* 51: * failed at remote end 52: */ 53: AUTH_BADCRED=1, /* bogus credentials (seal broken) */ 54: AUTH_REJECTEDCRED=2, /* client should begin new session */ 55: AUTH_BADVERF=3, /* bogus verifier (seal broken) */ 56: AUTH_REJECTEDVERF=4, /* verifier expired or was replayed */ 57: AUTH_TOOWEAK=5, /* rejected due to security reasons */ 58: /* 59: * failed locally 60: */ 61: AUTH_INVALIDRESP=6, /* bogus response verifier */ 62: AUTH_FAILED=7 /* some unknown reason */ 63: }; 64: 65: 66: union des_block { 67: struct { 68: u_long high; 69: u_long low; 70: } key; 71: char c[8]; 72: }; 73: 74: 75: /* 76: * Authentication info. Opaque to client. 77: */ 78: struct opaque_auth { 79: enum_t oa_flavor; /* flavor of auth */ 80: caddr_t oa_base; /* address of more auth stuff */ 81: u_int oa_length; /* not to exceed MAX_AUTH_BYTES */ 82: }; 83: 84: 85: /* 86: * Auth handle, interface to client side authenticators. 87: */ 88: typedef struct { 89: struct opaque_auth ah_cred; 90: struct opaque_auth ah_verf; 91: union des_block ah_key; 92: struct auth_ops { 93: void (*ah_nextverf)(); 94: int (*ah_marshal)(); /* nextverf & serialize */ 95: int (*ah_validate)(); /* validate varifier */ 96: int (*ah_refresh)(); /* refresh credentials */ 97: void (*ah_destroy)(); /* destroy this structure */ 98: } *ah_ops; 99: caddr_t ah_private; 100: } AUTH; 101: 102: 103: /* 104: * Authentication ops. 105: * The ops and the auth handle provide the interface to the authenticators. 106: * 107: * AUTH *auth; 108: * XDR *xdrs; 109: * struct opaque_auth verf; 110: */ 111: #define AUTH_NEXTVERF(auth) \ 112: ((*((auth)->ah_ops->ah_nextverf))(auth)) 113: #define auth_nextverf(auth) \ 114: ((*((auth)->ah_ops->ah_nextverf))(auth)) 115: 116: #define AUTH_MARSHALL(auth, xdrs) \ 117: ((*((auth)->ah_ops->ah_marshal))(auth, xdrs)) 118: #define auth_marshall(auth, xdrs) \ 119: ((*((auth)->ah_ops->ah_marshal))(auth, xdrs)) 120: 121: #define AUTH_VALIDATE(auth, verfp) \ 122: ((*((auth)->ah_ops->ah_validate))((auth), verfp)) 123: #define auth_validate(auth, verfp) \ 124: ((*((auth)->ah_ops->ah_validate))((auth), verfp)) 125: 126: #define AUTH_REFRESH(auth) \ 127: ((*((auth)->ah_ops->ah_refresh))(auth)) 128: #define auth_refresh(auth) \ 129: ((*((auth)->ah_ops->ah_refresh))(auth)) 130: 131: #define AUTH_DESTROY(auth) \ 132: ((*((auth)->ah_ops->ah_destroy))(auth)) 133: #define auth_destroy(auth) \ 134: ((*((auth)->ah_ops->ah_destroy))(auth)) 135: 136: 137: extern struct opaque_auth _null_auth; 138: 139: 140: /* 141: * These are the various implementations of client side authenticators. 142: */ 143: 144: /* 145: * Null authentication 146: */ 147: extern AUTH *authnone_create(); /* takes no parameters */ 148: #define AUTH_NULL 0 149: 150: /* 151: * Unix style authentication 152: * AUTH *authunix_create(machname, uid, gid, len, aup_gids) 153: * char *machname; 154: * int uid; 155: * int gid; 156: * int len; 157: * int *aup_gids; 158: */ 159: extern AUTH *authunix_create(); 160: extern AUTH *authunix_create_default(); /* takes no parameters */ 161: #define AUTH_UNIX 1 /* unix style (uid, gids) */ 162: #define AUTH_SHORT 2 /* short hand unix style */