1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 3*53ee8cc1Swenshuai.xi * unrestricted use provided that this legend is included on all tape 4*53ee8cc1Swenshuai.xi * media and as a part of the software program in whole or part. Users 5*53ee8cc1Swenshuai.xi * may copy or modify Sun RPC without charge, but are not authorized 6*53ee8cc1Swenshuai.xi * to license or distribute it to anyone else except as part of a product or 7*53ee8cc1Swenshuai.xi * program developed by the user. 8*53ee8cc1Swenshuai.xi * 9*53ee8cc1Swenshuai.xi * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 10*53ee8cc1Swenshuai.xi * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 11*53ee8cc1Swenshuai.xi * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 12*53ee8cc1Swenshuai.xi * 13*53ee8cc1Swenshuai.xi * Sun RPC is provided with no support and without any obligation on the 14*53ee8cc1Swenshuai.xi * part of Sun Microsystems, Inc. to assist in its use, correction, 15*53ee8cc1Swenshuai.xi * modification or enhancement. 16*53ee8cc1Swenshuai.xi * 17*53ee8cc1Swenshuai.xi * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 18*53ee8cc1Swenshuai.xi * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 19*53ee8cc1Swenshuai.xi * OR ANY PART THEREOF. 20*53ee8cc1Swenshuai.xi * 21*53ee8cc1Swenshuai.xi * In no event will Sun Microsystems, Inc. be liable for any lost revenue 22*53ee8cc1Swenshuai.xi * or profits or other special, indirect and consequential damages, even if 23*53ee8cc1Swenshuai.xi * Sun has been advised of the possibility of such damages. 24*53ee8cc1Swenshuai.xi * 25*53ee8cc1Swenshuai.xi * Sun Microsystems, Inc. 26*53ee8cc1Swenshuai.xi * 2550 Garcia Avenue 27*53ee8cc1Swenshuai.xi * Mountain View, California 94043 28*53ee8cc1Swenshuai.xi */ 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi %/* 31*53ee8cc1Swenshuai.xi % * Find out about remote users 32*53ee8cc1Swenshuai.xi % */ 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi const RUSERS_MAXUSERLEN = 32; 35*53ee8cc1Swenshuai.xi const RUSERS_MAXLINELEN = 32; 36*53ee8cc1Swenshuai.xi const RUSERS_MAXHOSTLEN = 257; 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi struct rusers_utmp { 39*53ee8cc1Swenshuai.xi string ut_user<RUSERS_MAXUSERLEN>; /* aka ut_name */ 40*53ee8cc1Swenshuai.xi string ut_line<RUSERS_MAXLINELEN>; /* device */ 41*53ee8cc1Swenshuai.xi string ut_host<RUSERS_MAXHOSTLEN>; /* host user logged on from */ 42*53ee8cc1Swenshuai.xi int ut_type; /* type of entry */ 43*53ee8cc1Swenshuai.xi int ut_time; /* time entry was made */ 44*53ee8cc1Swenshuai.xi unsigned int ut_idle; /* minutes idle */ 45*53ee8cc1Swenshuai.xi }; 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi typedef rusers_utmp utmp_array<>; 48*53ee8cc1Swenshuai.xi 49*53ee8cc1Swenshuai.xi #ifdef RPC_HDR 50*53ee8cc1Swenshuai.xi % 51*53ee8cc1Swenshuai.xi %/* 52*53ee8cc1Swenshuai.xi % * Values for ut_type field above. 53*53ee8cc1Swenshuai.xi % */ 54*53ee8cc1Swenshuai.xi #endif 55*53ee8cc1Swenshuai.xi const RUSERS_EMPTY = 0; 56*53ee8cc1Swenshuai.xi const RUSERS_RUN_LVL = 1; 57*53ee8cc1Swenshuai.xi const RUSERS_BOOT_TIME = 2; 58*53ee8cc1Swenshuai.xi const RUSERS_OLD_TIME = 3; 59*53ee8cc1Swenshuai.xi const RUSERS_NEW_TIME = 4; 60*53ee8cc1Swenshuai.xi const RUSERS_INIT_PROCESS = 5; 61*53ee8cc1Swenshuai.xi const RUSERS_LOGIN_PROCESS = 6; 62*53ee8cc1Swenshuai.xi const RUSERS_USER_PROCESS = 7; 63*53ee8cc1Swenshuai.xi const RUSERS_DEAD_PROCESS = 8; 64*53ee8cc1Swenshuai.xi const RUSERS_ACCOUNTING = 9; 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi program RUSERSPROG { 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi version RUSERSVERS_3 { 69*53ee8cc1Swenshuai.xi int 70*53ee8cc1Swenshuai.xi RUSERSPROC_NUM(void) = 1; 71*53ee8cc1Swenshuai.xi 72*53ee8cc1Swenshuai.xi utmp_array 73*53ee8cc1Swenshuai.xi RUSERSPROC_NAMES(void) = 2; 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi utmp_array 76*53ee8cc1Swenshuai.xi RUSERSPROC_ALLNAMES(void) = 3; 77*53ee8cc1Swenshuai.xi } = 3; 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi } = 100002; 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi #ifdef RPC_HDR 82*53ee8cc1Swenshuai.xi % 83*53ee8cc1Swenshuai.xi % 84*53ee8cc1Swenshuai.xi %#ifdef __cplusplus 85*53ee8cc1Swenshuai.xi %extern "C" { 86*53ee8cc1Swenshuai.xi %#endif 87*53ee8cc1Swenshuai.xi % 88*53ee8cc1Swenshuai.xi %#include <rpc/xdr.h> 89*53ee8cc1Swenshuai.xi % 90*53ee8cc1Swenshuai.xi %/* 91*53ee8cc1Swenshuai.xi % * The following structures are used by version 2 of the rusersd protocol. 92*53ee8cc1Swenshuai.xi % * They were not developed with rpcgen, so they do not appear as RPCL. 93*53ee8cc1Swenshuai.xi % */ 94*53ee8cc1Swenshuai.xi % 95*53ee8cc1Swenshuai.xi %#define RUSERSVERS_IDLE 2 96*53ee8cc1Swenshuai.xi %#define RUSERSVERS 3 /* current version */ 97*53ee8cc1Swenshuai.xi %#define MAXUSERS 100 98*53ee8cc1Swenshuai.xi % 99*53ee8cc1Swenshuai.xi %/* 100*53ee8cc1Swenshuai.xi % * This is the structure used in version 2 of the rusersd RPC service. 101*53ee8cc1Swenshuai.xi % * It corresponds to the utmp structure for BSD systems. 102*53ee8cc1Swenshuai.xi % */ 103*53ee8cc1Swenshuai.xi %struct ru_utmp { 104*53ee8cc1Swenshuai.xi % char ut_line[8]; /* tty name */ 105*53ee8cc1Swenshuai.xi % char ut_name[8]; /* user id */ 106*53ee8cc1Swenshuai.xi % char ut_host[16]; /* host name, if remote */ 107*53ee8cc1Swenshuai.xi % long int ut_time; /* time on */ 108*53ee8cc1Swenshuai.xi %}; 109*53ee8cc1Swenshuai.xi % 110*53ee8cc1Swenshuai.xi %struct utmparr { 111*53ee8cc1Swenshuai.xi % struct ru_utmp **uta_arr; 112*53ee8cc1Swenshuai.xi % int uta_cnt; 113*53ee8cc1Swenshuai.xi %}; 114*53ee8cc1Swenshuai.xi %typedef struct utmparr utmparr; 115*53ee8cc1Swenshuai.xi % 116*53ee8cc1Swenshuai.xi %extern bool_t xdr_utmparr (XDR *xdrs, struct utmparr *objp) __THROW; 117*53ee8cc1Swenshuai.xi % 118*53ee8cc1Swenshuai.xi %struct utmpidle { 119*53ee8cc1Swenshuai.xi % struct ru_utmp ui_utmp; 120*53ee8cc1Swenshuai.xi % unsigned int ui_idle; 121*53ee8cc1Swenshuai.xi %}; 122*53ee8cc1Swenshuai.xi % 123*53ee8cc1Swenshuai.xi %struct utmpidlearr { 124*53ee8cc1Swenshuai.xi % struct utmpidle **uia_arr; 125*53ee8cc1Swenshuai.xi % int uia_cnt; 126*53ee8cc1Swenshuai.xi %}; 127*53ee8cc1Swenshuai.xi % 128*53ee8cc1Swenshuai.xi %extern bool_t xdr_utmpidlearr (XDR *xdrs, struct utmpidlearr *objp) __THROW; 129*53ee8cc1Swenshuai.xi % 130*53ee8cc1Swenshuai.xi %#ifdef __cplusplus 131*53ee8cc1Swenshuai.xi %} 132*53ee8cc1Swenshuai.xi %#endif 133*53ee8cc1Swenshuai.xi #endif 134*53ee8cc1Swenshuai.xi 135*53ee8cc1Swenshuai.xi 136*53ee8cc1Swenshuai.xi #ifdef RPC_XDR 137*53ee8cc1Swenshuai.xi %bool_t xdr_utmp (XDR *xdrs, struct ru_utmp *objp); 138*53ee8cc1Swenshuai.xi % 139*53ee8cc1Swenshuai.xi %bool_t 140*53ee8cc1Swenshuai.xi %xdr_utmp(xdrs, objp) 141*53ee8cc1Swenshuai.xi % XDR *xdrs; 142*53ee8cc1Swenshuai.xi % struct ru_utmp *objp; 143*53ee8cc1Swenshuai.xi %{ 144*53ee8cc1Swenshuai.xi % /* Since the fields are char foo [xxx], we should not free them. */ 145*53ee8cc1Swenshuai.xi % if (xdrs->x_op != XDR_FREE) 146*53ee8cc1Swenshuai.xi % { 147*53ee8cc1Swenshuai.xi % char *ptr; 148*53ee8cc1Swenshuai.xi % unsigned int size; 149*53ee8cc1Swenshuai.xi % ptr = objp->ut_line; 150*53ee8cc1Swenshuai.xi % size = sizeof (objp->ut_line); 151*53ee8cc1Swenshuai.xi % if (!xdr_bytes (xdrs, &ptr, &size, size)) { 152*53ee8cc1Swenshuai.xi % return (FALSE); 153*53ee8cc1Swenshuai.xi % } 154*53ee8cc1Swenshuai.xi % ptr = objp->ut_name; 155*53ee8cc1Swenshuai.xi % size = sizeof (objp->ut_name); 156*53ee8cc1Swenshuai.xi % if (!xdr_bytes (xdrs, &ptr, &size, size)) { 157*53ee8cc1Swenshuai.xi % return (FALSE); 158*53ee8cc1Swenshuai.xi % } 159*53ee8cc1Swenshuai.xi % ptr = objp->ut_host; 160*53ee8cc1Swenshuai.xi % size = sizeof (objp->ut_host); 161*53ee8cc1Swenshuai.xi % if (!xdr_bytes (xdrs, &ptr, &size, size)) { 162*53ee8cc1Swenshuai.xi % return (FALSE); 163*53ee8cc1Swenshuai.xi % } 164*53ee8cc1Swenshuai.xi % } 165*53ee8cc1Swenshuai.xi % if (!xdr_long(xdrs, &objp->ut_time)) { 166*53ee8cc1Swenshuai.xi % return (FALSE); 167*53ee8cc1Swenshuai.xi % } 168*53ee8cc1Swenshuai.xi % return (TRUE); 169*53ee8cc1Swenshuai.xi %} 170*53ee8cc1Swenshuai.xi % 171*53ee8cc1Swenshuai.xi %bool_t xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp); 172*53ee8cc1Swenshuai.xi % 173*53ee8cc1Swenshuai.xi %bool_t 174*53ee8cc1Swenshuai.xi %xdr_utmpptr(xdrs, objpp) 175*53ee8cc1Swenshuai.xi % XDR *xdrs; 176*53ee8cc1Swenshuai.xi % struct ru_utmp **objpp; 177*53ee8cc1Swenshuai.xi %{ 178*53ee8cc1Swenshuai.xi % if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp), 179*53ee8cc1Swenshuai.xi % (xdrproc_t) xdr_utmp)) { 180*53ee8cc1Swenshuai.xi % return (FALSE); 181*53ee8cc1Swenshuai.xi % } 182*53ee8cc1Swenshuai.xi % return (TRUE); 183*53ee8cc1Swenshuai.xi %} 184*53ee8cc1Swenshuai.xi % 185*53ee8cc1Swenshuai.xi %bool_t 186*53ee8cc1Swenshuai.xi %xdr_utmparr(xdrs, objp) 187*53ee8cc1Swenshuai.xi % XDR *xdrs; 188*53ee8cc1Swenshuai.xi % struct utmparr *objp; 189*53ee8cc1Swenshuai.xi %{ 190*53ee8cc1Swenshuai.xi % if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt, 191*53ee8cc1Swenshuai.xi % MAXUSERS, sizeof(struct ru_utmp *), 192*53ee8cc1Swenshuai.xi % (xdrproc_t) xdr_utmpptr)) { 193*53ee8cc1Swenshuai.xi % return (FALSE); 194*53ee8cc1Swenshuai.xi % } 195*53ee8cc1Swenshuai.xi % return (TRUE); 196*53ee8cc1Swenshuai.xi %} 197*53ee8cc1Swenshuai.xi % 198*53ee8cc1Swenshuai.xi %bool_t xdr_utmpidle(XDR *xdrs, struct utmpidle *objp); 199*53ee8cc1Swenshuai.xi % 200*53ee8cc1Swenshuai.xi %bool_t 201*53ee8cc1Swenshuai.xi %xdr_utmpidle(xdrs, objp) 202*53ee8cc1Swenshuai.xi % XDR *xdrs; 203*53ee8cc1Swenshuai.xi % struct utmpidle *objp; 204*53ee8cc1Swenshuai.xi %{ 205*53ee8cc1Swenshuai.xi % if (!xdr_utmp(xdrs, &objp->ui_utmp)) { 206*53ee8cc1Swenshuai.xi % return (FALSE); 207*53ee8cc1Swenshuai.xi % } 208*53ee8cc1Swenshuai.xi % if (!xdr_u_int(xdrs, &objp->ui_idle)) { 209*53ee8cc1Swenshuai.xi % return (FALSE); 210*53ee8cc1Swenshuai.xi % } 211*53ee8cc1Swenshuai.xi % return (TRUE); 212*53ee8cc1Swenshuai.xi %} 213*53ee8cc1Swenshuai.xi % 214*53ee8cc1Swenshuai.xi %bool_t xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objp); 215*53ee8cc1Swenshuai.xi % 216*53ee8cc1Swenshuai.xi %bool_t 217*53ee8cc1Swenshuai.xi %xdr_utmpidleptr(xdrs, objpp) 218*53ee8cc1Swenshuai.xi % XDR *xdrs; 219*53ee8cc1Swenshuai.xi % struct utmpidle **objpp; 220*53ee8cc1Swenshuai.xi %{ 221*53ee8cc1Swenshuai.xi % if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle), 222*53ee8cc1Swenshuai.xi % (xdrproc_t) xdr_utmpidle)) { 223*53ee8cc1Swenshuai.xi % return (FALSE); 224*53ee8cc1Swenshuai.xi % } 225*53ee8cc1Swenshuai.xi % return (TRUE); 226*53ee8cc1Swenshuai.xi %} 227*53ee8cc1Swenshuai.xi % 228*53ee8cc1Swenshuai.xi %bool_t 229*53ee8cc1Swenshuai.xi %xdr_utmpidlearr(xdrs, objp) 230*53ee8cc1Swenshuai.xi % XDR *xdrs; 231*53ee8cc1Swenshuai.xi % struct utmpidlearr *objp; 232*53ee8cc1Swenshuai.xi %{ 233*53ee8cc1Swenshuai.xi % if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt, 234*53ee8cc1Swenshuai.xi % MAXUSERS, sizeof(struct utmpidle *), 235*53ee8cc1Swenshuai.xi % (xdrproc_t) xdr_utmpidleptr)) { 236*53ee8cc1Swenshuai.xi % return (FALSE); 237*53ee8cc1Swenshuai.xi % } 238*53ee8cc1Swenshuai.xi % return (TRUE); 239*53ee8cc1Swenshuai.xi %} 240*53ee8cc1Swenshuai.xi #endif 241