xref: /openbsd/lib/librpcsvc/rnusers.x (revision d415bd75)
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