(internal_setspent): Set FD_CLOEXEC for stream on input file.
[kopensolaris-gnu/glibc.git] / nis / yp_xdr.c
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
30 #include <rpcsvc/yp.h>
31
32 bool_t
33 xdr_ypstat (XDR *xdrs, ypstat *objp)
34 {
35   if (!xdr_enum(xdrs, (enum_t *)objp))
36     return (FALSE);
37   return (TRUE);
38 }
39
40 bool_t
41 xdr_ypxfrstat(XDR *xdrs, ypxfrstat *objp)
42 {
43   if (!xdr_enum(xdrs, (enum_t *)objp)) {
44     return (FALSE);
45   }
46   return (TRUE);
47 }
48
49 bool_t
50 xdr_domainname(XDR *xdrs, domainname *objp)
51 {
52   if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) {
53     return (FALSE);
54   }
55   return (TRUE);
56 }
57
58 bool_t
59 xdr_mapname(XDR *xdrs, mapname *objp)
60 {
61   if (!xdr_string(xdrs, objp, YPMAXMAP)) {
62     return (FALSE);
63   }
64   return (TRUE);
65 }
66
67 bool_t
68 xdr_peername(XDR *xdrs, peername *objp)
69 {
70   if (!xdr_string(xdrs, objp, YPMAXPEER)) {
71     return (FALSE);
72   }
73   return (TRUE);
74 }
75
76 bool_t
77 xdr_keydat(XDR *xdrs, keydat *objp)
78 {
79   if (!xdr_bytes(xdrs, (char **)&objp->keydat_val, (u_int *)&objp->keydat_len, YPMAXRECORD)) {
80     return (FALSE);
81   }
82   return (TRUE);
83 }
84
85 bool_t
86 xdr_valdat(XDR *xdrs, valdat *objp)
87 {
88   if (!xdr_bytes(xdrs, (char **)&objp->valdat_val, (u_int *)&objp->valdat_len, YPMAXRECORD)) {
89     return (FALSE);
90   }
91   return (TRUE);
92 }
93
94 bool_t
95 xdr_ypmap_parms(XDR *xdrs, ypmap_parms *objp)
96 {
97   if (!xdr_domainname(xdrs, &objp->domain)) {
98     return (FALSE);
99   }
100   if (!xdr_mapname(xdrs, &objp->map)) {
101     return (FALSE);
102   }
103   if (!xdr_u_int(xdrs, &objp->ordernum)) {
104     return (FALSE);
105   }
106   if (!xdr_peername(xdrs, &objp->peer)) {
107     return (FALSE);
108   }
109   return (TRUE);
110 }
111
112 bool_t
113 xdr_ypreq_key(XDR *xdrs, ypreq_key *objp)
114 {
115   if (!xdr_domainname(xdrs, &objp->domain)) {
116     return (FALSE);
117   }
118   if (!xdr_mapname(xdrs, &objp->map)) {
119     return (FALSE);
120   }
121   if (!xdr_keydat(xdrs, &objp->key)) {
122     return (FALSE);
123   }
124   return (TRUE);
125 }
126
127 bool_t
128 xdr_ypreq_nokey(XDR *xdrs, ypreq_nokey *objp)
129 {
130   if (!xdr_domainname(xdrs, &objp->domain)) {
131     return (FALSE);
132   }
133   if (!xdr_mapname(xdrs, &objp->map)) {
134     return (FALSE);
135   }
136   return (TRUE);
137 }
138
139 bool_t
140 xdr_ypreq_xfr(XDR *xdrs, ypreq_xfr *objp)
141 {
142   if (!xdr_ypmap_parms(xdrs, &objp->map_parms)) {
143     return (FALSE);
144   }
145   if (!xdr_u_int(xdrs, &objp->transid)) {
146     return (FALSE);
147   }
148   if (!xdr_u_int(xdrs, &objp->prog)) {
149     return (FALSE);
150   }
151   if (!xdr_u_int(xdrs, &objp->port)) {
152     return (FALSE);
153   }
154   return (TRUE);
155 }
156
157 bool_t
158 xdr_ypresp_val(XDR *xdrs, ypresp_val *objp)
159 {
160   if (!xdr_ypstat(xdrs, &objp->stat)) {
161     return (FALSE);
162   }
163   if (!xdr_valdat(xdrs, &objp->val)) {
164     return (FALSE);
165   }
166   return (TRUE);
167 }
168
169 bool_t
170 xdr_ypresp_key_val(XDR *xdrs, ypresp_key_val *objp)
171 {
172   if (!xdr_ypstat(xdrs, &objp->stat)) {
173     return (FALSE);
174   }
175   if (!xdr_valdat(xdrs, &objp->val)) {
176     return (FALSE);
177   }
178   if (!xdr_keydat(xdrs, &objp->key)) {
179     return (FALSE);
180   }
181   return (TRUE);
182 }
183
184 bool_t
185 xdr_ypresp_master(XDR *xdrs, ypresp_master *objp)
186 {
187   if (!xdr_ypstat(xdrs, &objp->stat)) {
188     return (FALSE);
189   }
190   if (!xdr_peername(xdrs, &objp->peer)) {
191     return (FALSE);
192   }
193   return (TRUE);
194 }
195
196 bool_t
197 xdr_ypresp_order(XDR *xdrs, ypresp_order *objp)
198 {
199   if (!xdr_ypstat(xdrs, &objp->stat)) {
200     return (FALSE);
201   }
202   if (!xdr_u_int(xdrs, &objp->ordernum)) {
203     return (FALSE);
204   }
205   return (TRUE);
206 }
207
208 bool_t
209 xdr_ypresp_all(XDR *xdrs, ypresp_all *objp)
210 {
211   if (!xdr_bool(xdrs, &objp->more)) {
212     return (FALSE);
213   }
214   switch (objp->more) {
215   case TRUE:
216     if (!xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) {
217       return (FALSE);
218     }
219     break;
220   case FALSE:
221     break;
222   default:
223     return (FALSE);
224   }
225   return (TRUE);
226 }
227
228 bool_t
229 xdr_ypresp_xfr(XDR *xdrs, ypresp_xfr *objp)
230 {
231   if (!xdr_u_int(xdrs, &objp->transid)) {
232     return (FALSE);
233   }
234   if (!xdr_ypxfrstat(xdrs, &objp->xfrstat)) {
235     return (FALSE);
236   }
237   return (TRUE);
238 }
239
240 bool_t
241 xdr_ypmaplist(XDR *xdrs, ypmaplist *objp)
242 {
243   if (!xdr_mapname(xdrs, &objp->map)) {
244     return (FALSE);
245   }
246   if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) {
247     return (FALSE);
248   }
249   return (TRUE);
250 }
251
252 bool_t
253 xdr_ypresp_maplist(XDR *xdrs, ypresp_maplist *objp)
254 {
255   if (!xdr_ypstat(xdrs, &objp->stat)) {
256     return (FALSE);
257   }
258   if (!xdr_pointer(xdrs, (char **)&objp->maps, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) {
259     return (FALSE);
260   }
261   return (TRUE);
262 }
263
264 bool_t
265 xdr_yppush_status(XDR *xdrs, yppush_status *objp)
266 {
267   if (!xdr_enum(xdrs, (enum_t *)objp)) {
268     return (FALSE);
269   }
270   return (TRUE);
271 }
272
273 bool_t
274 xdr_yppushresp_xfr(XDR *xdrs, yppushresp_xfr *objp)
275 {
276   if (!xdr_u_int(xdrs, &objp->transid)) {
277     return (FALSE);
278   }
279   if (!xdr_yppush_status(xdrs, &objp->status)) {
280     return (FALSE);
281   }
282   return (TRUE);
283 }
284
285 bool_t
286 xdr_ypbind_resptype(XDR *xdrs, ypbind_resptype *objp)
287 {
288   if (!xdr_enum(xdrs, (enum_t *)objp)) {
289     return (FALSE);
290   }
291   return (TRUE);
292 }
293
294 bool_t
295 xdr_ypbind_binding(XDR *xdrs, ypbind_binding *objp)
296 {
297   if (!xdr_opaque(xdrs, objp->ypbind_binding_addr, 4)) {
298     return (FALSE);
299   }
300   if (!xdr_opaque(xdrs, objp->ypbind_binding_port, 2)) {
301     return (FALSE);
302   }
303   return (TRUE);
304 }
305
306 bool_t
307 xdr_ypbind_resp(XDR *xdrs, ypbind_resp *objp)
308 {
309   if (!xdr_ypbind_resptype(xdrs, &objp->ypbind_status)) {
310     return (FALSE);
311   }
312   switch (objp->ypbind_status) {
313   case YPBIND_FAIL_VAL:
314     if (!xdr_u_int(xdrs, &objp->ypbind_resp_u.ypbind_error)) {
315       return (FALSE);
316                  }
317     break;
318   case YPBIND_SUCC_VAL:
319     if (!xdr_ypbind_binding(xdrs, &objp->ypbind_resp_u.ypbind_bindinfo)) {
320       return (FALSE);
321     }
322     break;
323   default:
324     return (FALSE);
325   }
326   return (TRUE);
327 }
328
329 bool_t
330 xdr_ypbind_setdom(XDR *xdrs, ypbind_setdom *objp)
331 {
332   if (!xdr_domainname(xdrs, &objp->ypsetdom_domain)) {
333     return (FALSE);
334   }
335   if (!xdr_ypbind_binding(xdrs, &objp->ypsetdom_binding)) {
336     return (FALSE);
337   }
338   if (!xdr_u_int(xdrs, &objp->ypsetdom_vers)) {
339     return (FALSE);
340   }
341   return (TRUE);
342 }