/* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for * unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify Sun RPC without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun RPC is provided with no support and without any obligation on the * part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 */ %/* % * Find out about remote users % */ const RUSERS_MAXUSERLEN = 32; const RUSERS_MAXLINELEN = 32; const RUSERS_MAXHOSTLEN = 257; struct rusers_utmp { string ut_user; /* aka ut_name */ string ut_line; /* device */ string ut_host; /* host user logged on from */ int ut_type; /* type of entry */ int ut_time; /* time entry was made */ unsigned int ut_idle; /* minutes idle */ }; typedef rusers_utmp utmp_array<>; #ifdef RPC_HDR % %/* % * Values for ut_type field above. % */ #endif const RUSERS_EMPTY = 0; const RUSERS_RUN_LVL = 1; const RUSERS_BOOT_TIME = 2; const RUSERS_OLD_TIME = 3; const RUSERS_NEW_TIME = 4; const RUSERS_INIT_PROCESS = 5; const RUSERS_LOGIN_PROCESS = 6; const RUSERS_USER_PROCESS = 7; const RUSERS_DEAD_PROCESS = 8; const RUSERS_ACCOUNTING = 9; program RUSERSPROG { version RUSERSVERS_3 { int RUSERSPROC_NUM(void) = 1; utmp_array RUSERSPROC_NAMES(void) = 2; utmp_array RUSERSPROC_ALLNAMES(void) = 3; } = 3; } = 100002; #ifdef RPC_HDR % % %#ifdef __cplusplus %extern "C" { %#endif % %/* % * The following structures are used by version 2 of the rusersd protocol. % * They were not developed with rpcgen, so they do not appear as RPCL. % */ % %#define RUSERSVERS_IDLE 2 %#define RUSERSVERS 3 /* current version */ %#define MAXUSERS 100 % %/* % * This is the structure used in version 2 of the rusersd RPC service. % * It corresponds to the utmp structure for BSD sytems. % */ %struct ru_utmp { % char ut_line[8]; /* tty name */ % char ut_name[8]; /* user id */ % char ut_host[16]; /* host name, if remote */ % long ut_time; /* time on */ %}; % %struct utmparr { % struct ru_utmp **uta_arr; % int uta_cnt; %}; %typedef struct utmparr utmparr; %int xdr_utmparr(); % %struct utmpidle { % struct ru_utmp ui_utmp; % unsigned ui_idle; %}; % %struct utmpidlearr { % struct utmpidle **uia_arr; % int uia_cnt; %}; % %int xdr_utmpidlearr(); % %#ifdef __cplusplus %} %#endif #endif #ifdef RPC_XDR %bool_t %xdr_utmp(xdrs, objp) % XDR *xdrs; % struct ru_utmp *objp; %{ % /* Since the fields are char foo [xxx], we should not free them. */ % if (xdrs->x_op != XDR_FREE) % { % char *ptr; % ptr = objp->ut_line; % if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_line))) { % return (FALSE); % } % ptr = objp->ut_name; % if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_name))) { % return (FALSE); % } % ptr = objp->ut_host; % if (!xdr_string (xdrs, &ptr, sizeof (objp->ut_host))) { % return (FALSE); % } % } % if (!xdr_long(xdrs, &objp->ut_time)) { % return (FALSE); % } % return (TRUE); %} % %bool_t %xdr_utmpptr(xdrs, objpp) % XDR *xdrs; % struct ru_utmp **objpp; %{ % if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp), % xdr_utmp)) { % return (FALSE); % } % return (TRUE); %} % %bool_t %xdr_utmparr(xdrs, objp) % XDR *xdrs; % struct utmparr *objp; %{ % if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt, % MAXUSERS, sizeof(struct ru_utmp *), xdr_utmpptr)) { % return (FALSE); % } % return (TRUE); %} % %bool_t %xdr_utmpidle(xdrs, objp) % XDR *xdrs; % struct utmpidle *objp; %{ % if (!xdr_utmp(xdrs, &objp->ui_utmp)) { % return (FALSE); % } % if (!xdr_u_int(xdrs, &objp->ui_idle)) { % return (FALSE); % } % return (TRUE); %} % %bool_t %xdr_utmpidleptr(xdrs, objpp) % XDR *xdrs; % struct utmpidle **objpp; %{ % if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle), % xdr_utmpidle)) { % return (FALSE); % } % return (TRUE); %} % %bool_t %xdr_utmpidlearr(xdrs, objp) % XDR *xdrs; % struct utmpidlearr *objp; %{ % if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt, % MAXUSERS, sizeof(struct utmpidle *), xdr_utmpidleptr)) { % return (FALSE); % } % return (TRUE); %} #endif