1/*	$OpenBSD: rnusers.x,v 1.15 2022/12/27 17:10:07 jmc Exp $	*/
2
3/*
4 * Copyright (c) 2010, Oracle America, Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 *     * Redistributions of source code must retain the above copyright
11 *       notice, this list of conditions and the following disclaimer.
12 *     * Redistributions in binary form must reproduce the above
13 *       copyright notice, this list of conditions and the following
14 *       disclaimer in the documentation and/or other materials
15 *       provided with the distribution.
16 *     * Neither the name of the "Oracle America, Inc." nor the names of its
17 *       contributors may be used to endorse or promote products derived
18 *       from this software without specific prior written permission.
19 *
20 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25 *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
27 *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/*
35 * Find out about remote users
36 */
37
38#ifndef RPC_HDR
39#endif
40
41
42#ifdef RPC_HDR
43%/*
44% * The following structures are used by version 2 of the rusersd protocol.
45% * They were not developed with rpcgen, so they do not appear as RPCL.
46% */
47%
48%#define	RUSERSVERS_ORIG 1	/* original version */
49%#define	RUSERSVERS_IDLE 2
50%#define	MAXUSERS 100
51%
52%/*
53% * This is the structure used in version 2 of the rusersd RPC service.
54% * It corresponds to the utmp structure for BSD systems.
55% */
56%
57%#define RNUSERS_MAXUSERLEN 8
58%#define RNUSERS_MAXLINELEN 8
59%#define RNUSERS_MAXHOSTLEN 16
60%
61%struct ru_utmp {
62%	char	*ut_line;		/* tty name */
63%	char	*ut_name;		/* user id */
64%	char	*ut_host;		/* host name, if remote */
65%	int	ut_time;		/* time on */
66%};
67%typedef struct ru_utmp rutmp;
68%
69%struct utmparr {
70%	struct ru_utmp **uta_arr;
71%	int uta_cnt;
72%};
73%typedef struct utmparr utmparr;
74%int	xdr_utmparr(XDR *, struct utmparr *);
75%
76%struct utmpidle {
77%	struct ru_utmp ui_utmp;
78%	unsigned ui_idle;
79%};
80%
81%struct utmpidlearr {
82%	struct utmpidle **uia_arr;
83%	int uia_cnt;
84%};
85%typedef struct utmpidlearr utmpidlearr;
86%int xdr_utmpidlearr(XDR *, struct utmpidlearr *);
87%
88%#define RUSERSVERS_1 ((u_long)1)
89%#define RUSERSVERS_2 ((u_long)2)
90%#ifndef RUSERSPROG
91%#define RUSERSPROG ((u_long)100002)
92%#endif
93%#ifndef RUSERSPROC_NUM
94%#define RUSERSPROC_NUM ((u_long)1)
95%#endif
96%#ifndef RUSERSPROC_NAMES
97%#define RUSERSPROC_NAMES ((u_long)2)
98%#endif
99%#ifndef RUSERSPROC_ALLNAMES
100%#define RUSERSPROC_ALLNAMES ((u_long)3)
101%#endif
102%
103#endif	/* RPC_HDR */
104
105#ifdef	RPC_XDR
106%bool_t	xdr_utmp(XDR *, struct ru_utmp *);
107%bool_t	xdr_utmpptr(XDR *, struct ru_utmp **);
108%bool_t	xdr_utmparr(XDR *, struct utmparr *);
109%bool_t	xdr_utmpidle(XDR *, struct utmpidle *);
110%bool_t	xdr_utmpidleptr(XDR *, struct utmpidle **);
111%
112%bool_t
113%xdr_utmp(XDR *xdrs, struct ru_utmp *objp)
114%{
115%	int size;
116%
117%	size = RNUSERS_MAXLINELEN;
118%	if (!xdr_bytes(xdrs, &objp->ut_line, &size, RNUSERS_MAXLINELEN))
119%		return (FALSE);
120%	size = RNUSERS_MAXUSERLEN;
121%	if (!xdr_bytes(xdrs, &objp->ut_name, &size, RNUSERS_MAXUSERLEN))
122%		return (FALSE);
123%	size = RNUSERS_MAXHOSTLEN;
124%	if (!xdr_bytes(xdrs, &objp->ut_host, &size, RNUSERS_MAXHOSTLEN))
125%		return (FALSE);
126%	if (!xdr_int(xdrs, &objp->ut_time))
127%		return (FALSE);
128%	return (TRUE);
129%}
130%
131%bool_t
132%xdr_utmpptr(XDR *xdrs, struct ru_utmp **objpp)
133%{
134%	if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct ru_utmp),
135%	    xdr_utmp))
136%		return (FALSE);
137%	return (TRUE);
138%}
139%
140%bool_t
141%xdr_utmparr(XDR *xdrs, struct utmparr *objp)
142%{
143%	if (!xdr_array(xdrs, (char **)&objp->uta_arr, (u_int *)&objp->uta_cnt,
144%	    MAXUSERS, sizeof(struct ru_utmp *), xdr_utmpptr))
145%		return (FALSE);
146%	return (TRUE);
147%}
148%
149%bool_t
150%xdr_utmpidle(XDR *xdrs, struct utmpidle *objp)
151%{
152%	if (!xdr_utmp(xdrs, &objp->ui_utmp))
153%		return (FALSE);
154%	if (!xdr_u_int(xdrs, &objp->ui_idle))
155%		return (FALSE);
156%	return (TRUE);
157%}
158%
159%bool_t
160%xdr_utmpidleptr(XDR *xdrs, struct utmpidle **objpp)
161%{
162%	if (!xdr_reference(xdrs, (char **) objpp, sizeof (struct utmpidle),
163%	    xdr_utmpidle))
164%		return (FALSE);
165%	return (TRUE);
166%}
167%
168%bool_t
169%xdr_utmpidlearr(XDR *xdrs, struct utmpidlearr *objp)
170%{
171%	if (!xdr_array(xdrs, (char **)&objp->uia_arr, (u_int *)&objp->uia_cnt,
172%	    MAXUSERS, sizeof(struct utmpidle *), xdr_utmpidleptr))
173%		return (FALSE);
174%	return (TRUE);
175%}
176#endif
177