]>
Commit | Line | Data |
---|---|---|
91eee4dd | 1 | /* Copyright (c) 1997, 1998 Free Software Foundation, Inc. |
e61abf83 UD |
2 | This file is part of the GNU C Library. |
3 | Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. | |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Library General Public License as | |
7 | published by the Free Software Foundation; either version 2 of the | |
8 | License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Library General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Library General Public | |
16 | License along with the GNU C Library; see the file COPYING.LIB. If not, | |
17 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
18 | Boston, MA 02111-1307, USA. */ | |
19 | ||
20 | #include <rpcsvc/nis.h> | |
91eee4dd | 21 | #include <rpcsvc/nis_callback.h> /* for "official" Solaris xdr functions */ |
e61abf83 | 22 | |
91eee4dd UD |
23 | /* This functions do exist without beginning "_" under Solaris 2.x, but |
24 | we have no prototypes for them. To avoid the same problems as with the | |
25 | YP xdr functions, we don't make them public. */ | |
26 | #include "nis_xdr.h" | |
27 | ||
28 | static bool_t | |
e61abf83 UD |
29 | xdr_nis_attr (XDR *xdrs, nis_attr *objp) |
30 | { | |
31 | if (!xdr_string (xdrs, &objp->zattr_ndx, ~0)) | |
32 | return FALSE; | |
33 | if (!xdr_bytes (xdrs, (char **) &objp->zattr_val.zattr_val_val, | |
34 | (u_int *) & objp->zattr_val.zattr_val_len, ~0)) | |
35 | return FALSE; | |
36 | return TRUE; | |
37 | } | |
38 | ||
39 | bool_t | |
91eee4dd | 40 | _xdr_nis_name (XDR *xdrs, nis_name *objp) |
e61abf83 UD |
41 | { |
42 | if (!xdr_string (xdrs, objp, ~0)) | |
43 | return FALSE; | |
44 | return TRUE; | |
45 | } | |
46 | ||
91eee4dd | 47 | static bool_t |
e61abf83 UD |
48 | xdr_zotypes (XDR *xdrs, zotypes *objp) |
49 | { | |
50 | if (!xdr_enum (xdrs, (enum_t *) objp)) | |
51 | return FALSE; | |
52 | return TRUE; | |
53 | } | |
54 | ||
91eee4dd | 55 | static bool_t |
e61abf83 UD |
56 | xdr_nstype (XDR *xdrs, nstype *objp) |
57 | { | |
58 | if (!xdr_enum (xdrs, (enum_t *) objp)) | |
59 | return FALSE; | |
60 | return TRUE; | |
61 | } | |
62 | ||
91eee4dd | 63 | static bool_t |
e61abf83 UD |
64 | xdr_oar_mask (XDR *xdrs, oar_mask *objp) |
65 | { | |
a1129917 | 66 | if (!xdr_u_int (xdrs, &objp->oa_rights)) |
e61abf83 UD |
67 | return FALSE; |
68 | if (!xdr_zotypes (xdrs, &objp->oa_otype)) | |
69 | return FALSE; | |
70 | return TRUE; | |
71 | } | |
72 | ||
91eee4dd | 73 | static bool_t |
e61abf83 UD |
74 | xdr_endpoint (XDR *xdrs, endpoint *objp) |
75 | { | |
76 | if (!xdr_string (xdrs, &objp->uaddr, ~0)) | |
77 | return FALSE; | |
78 | if (!xdr_string (xdrs, &objp->family, ~0)) | |
79 | return FALSE; | |
80 | if (!xdr_string (xdrs, &objp->proto, ~0)) | |
81 | return FALSE; | |
82 | return TRUE; | |
83 | } | |
84 | ||
85 | bool_t | |
91eee4dd | 86 | _xdr_nis_server (XDR *xdrs, nis_server *objp) |
e61abf83 | 87 | { |
91eee4dd | 88 | if (!_xdr_nis_name (xdrs, &objp->name)) |
e61abf83 UD |
89 | return FALSE; |
90 | if (!xdr_array (xdrs, (char **) &objp->ep.ep_val, (u_int *) &objp->ep.ep_len, | |
91 | ~0, sizeof (endpoint), (xdrproc_t) xdr_endpoint)) | |
92 | return FALSE; | |
a1129917 | 93 | if (!xdr_u_int (xdrs, &objp->key_type)) |
e61abf83 UD |
94 | return FALSE; |
95 | if (!xdr_netobj (xdrs, &objp->pkey)) | |
96 | return FALSE; | |
97 | return TRUE; | |
98 | } | |
99 | ||
100 | bool_t | |
91eee4dd | 101 | _xdr_directory_obj (XDR *xdrs, directory_obj *objp) |
e61abf83 | 102 | { |
91eee4dd | 103 | if (!_xdr_nis_name (xdrs, &objp->do_name)) |
e61abf83 UD |
104 | return FALSE; |
105 | if (!xdr_nstype (xdrs, &objp->do_type)) | |
106 | return FALSE; | |
107 | if (!xdr_array (xdrs, (char **) &objp->do_servers.do_servers_val, | |
108 | (u_int *) & objp->do_servers.do_servers_len, ~0, | |
91eee4dd | 109 | sizeof (nis_server), (xdrproc_t) _xdr_nis_server)) |
e61abf83 UD |
110 | return FALSE; |
111 | ||
a1129917 | 112 | if (!xdr_uint32_t (xdrs, &objp->do_ttl)) |
e61abf83 UD |
113 | return FALSE; |
114 | if (!xdr_array (xdrs, (char **) &objp->do_armask.do_armask_val, | |
115 | (u_int *) & objp->do_armask.do_armask_len, ~0, | |
116 | sizeof (oar_mask), (xdrproc_t) xdr_oar_mask)) | |
117 | return FALSE; | |
118 | return TRUE; | |
119 | } | |
120 | ||
91eee4dd | 121 | static bool_t |
e61abf83 UD |
122 | xdr_entry_col (XDR *xdrs, entry_col *objp) |
123 | { | |
a1129917 | 124 | if (!xdr_u_int (xdrs, &objp->ec_flags)) |
e61abf83 UD |
125 | return FALSE; |
126 | if (!xdr_bytes (xdrs, (char **) &objp->ec_value.ec_value_val, | |
127 | (u_int *) &objp->ec_value.ec_value_len, ~0)) | |
128 | return FALSE; | |
129 | return TRUE; | |
130 | } | |
131 | ||
91eee4dd | 132 | static bool_t |
e61abf83 UD |
133 | xdr_entry_obj (XDR *xdrs, entry_obj *objp) |
134 | { | |
135 | if (!xdr_string (xdrs, &objp->en_type, ~0)) | |
136 | return FALSE; | |
137 | if (!xdr_array (xdrs, (char **) &objp->en_cols.en_cols_val, | |
138 | (u_int *) &objp->en_cols.en_cols_len, ~0, | |
139 | sizeof (entry_col), (xdrproc_t) xdr_entry_col)) | |
140 | return FALSE; | |
141 | return TRUE; | |
142 | } | |
143 | ||
91eee4dd | 144 | static bool_t |
e61abf83 UD |
145 | xdr_group_obj (XDR *xdrs, group_obj *objp) |
146 | { | |
a1129917 | 147 | if (!xdr_u_int (xdrs, &objp->gr_flags)) |
e61abf83 UD |
148 | return FALSE; |
149 | if (!xdr_array (xdrs, (char **) &objp->gr_members.gr_members_val, | |
150 | (u_int *) &objp->gr_members.gr_members_len, ~0, | |
91eee4dd | 151 | sizeof (nis_name), (xdrproc_t) _xdr_nis_name)) |
e61abf83 UD |
152 | return FALSE; |
153 | return TRUE; | |
154 | } | |
155 | ||
91eee4dd | 156 | static bool_t |
e61abf83 UD |
157 | xdr_link_obj (XDR *xdrs, link_obj *objp) |
158 | { | |
159 | if (!xdr_zotypes (xdrs, &objp->li_rtype)) | |
160 | return FALSE; | |
161 | if (!xdr_array (xdrs, (char **) &objp->li_attrs.li_attrs_val, | |
162 | (u_int *) &objp->li_attrs.li_attrs_len, ~0, | |
163 | sizeof (nis_attr), (xdrproc_t) xdr_nis_attr)) | |
164 | return FALSE; | |
91eee4dd | 165 | if (!_xdr_nis_name (xdrs, &objp->li_name)) |
e61abf83 UD |
166 | return FALSE; |
167 | return TRUE; | |
168 | } | |
169 | ||
91eee4dd | 170 | static bool_t |
e61abf83 UD |
171 | xdr_table_col (XDR *xdrs, table_col *objp) |
172 | { | |
173 | if (!xdr_string (xdrs, &objp->tc_name, 64)) | |
174 | return FALSE; | |
a1129917 | 175 | if (!xdr_u_int (xdrs, &objp->tc_flags)) |
e61abf83 | 176 | return FALSE; |
a1129917 | 177 | if (!xdr_u_int (xdrs, &objp->tc_rights)) |
e61abf83 UD |
178 | return FALSE; |
179 | return TRUE; | |
180 | } | |
181 | ||
91eee4dd | 182 | static bool_t |
e61abf83 UD |
183 | xdr_table_obj (XDR *xdrs, table_obj *objp) |
184 | { | |
185 | if (!xdr_string (xdrs, &objp->ta_type, 64)) | |
186 | return FALSE; | |
187 | if (!xdr_int (xdrs, &objp->ta_maxcol)) | |
188 | return FALSE; | |
189 | if (!xdr_u_char (xdrs, &objp->ta_sep)) | |
190 | return FALSE; | |
191 | if (!xdr_array (xdrs, (char **) &objp->ta_cols.ta_cols_val, | |
192 | (u_int *) &objp->ta_cols.ta_cols_len, ~0, | |
193 | sizeof (table_col), (xdrproc_t) xdr_table_col)) | |
194 | return FALSE; | |
195 | if (!xdr_string (xdrs, &objp->ta_path, ~0)) | |
196 | return FALSE; | |
197 | return TRUE; | |
198 | } | |
199 | ||
91eee4dd | 200 | static bool_t |
e61abf83 UD |
201 | xdr_objdata (XDR *xdrs, objdata *objp) |
202 | { | |
203 | if (!xdr_zotypes (xdrs, &objp->zo_type)) | |
204 | return FALSE; | |
205 | switch (objp->zo_type) | |
206 | { | |
dfd2257a | 207 | case NIS_DIRECTORY_OBJ: |
91eee4dd | 208 | if (!_xdr_directory_obj (xdrs, &objp->objdata_u.di_data)) |
e61abf83 UD |
209 | return FALSE; |
210 | break; | |
dfd2257a | 211 | case NIS_GROUP_OBJ: |
e61abf83 UD |
212 | if (!xdr_group_obj (xdrs, &objp->objdata_u.gr_data)) |
213 | return FALSE; | |
214 | break; | |
dfd2257a | 215 | case NIS_TABLE_OBJ: |
e61abf83 UD |
216 | if (!xdr_table_obj (xdrs, &objp->objdata_u.ta_data)) |
217 | return FALSE; | |
218 | break; | |
dfd2257a | 219 | case NIS_ENTRY_OBJ: |
e61abf83 UD |
220 | if (!xdr_entry_obj (xdrs, &objp->objdata_u.en_data)) |
221 | return FALSE; | |
222 | break; | |
dfd2257a | 223 | case NIS_LINK_OBJ: |
e61abf83 UD |
224 | if (!xdr_link_obj (xdrs, &objp->objdata_u.li_data)) |
225 | return FALSE; | |
226 | break; | |
dfd2257a | 227 | case NIS_PRIVATE_OBJ: |
e61abf83 UD |
228 | if (!xdr_bytes (xdrs, (char **) &objp->objdata_u.po_data.po_data_val, |
229 | (u_int *) & objp->objdata_u.po_data.po_data_len, ~0)) | |
230 | return FALSE; | |
231 | break; | |
dfd2257a | 232 | case NIS_NO_OBJ: |
e61abf83 | 233 | break; |
dfd2257a | 234 | case NIS_BOGUS_OBJ: |
e61abf83 UD |
235 | break; |
236 | default: | |
237 | break; | |
238 | } | |
239 | return TRUE; | |
240 | } | |
241 | ||
91eee4dd | 242 | static bool_t |
e61abf83 UD |
243 | xdr_nis_oid (XDR *xdrs, nis_oid *objp) |
244 | { | |
a1129917 | 245 | if (!xdr_uint32_t (xdrs, &objp->ctime)) |
e61abf83 | 246 | return FALSE; |
a1129917 | 247 | if (!xdr_uint32_t (xdrs, &objp->mtime)) |
e61abf83 UD |
248 | return FALSE; |
249 | return TRUE; | |
250 | } | |
251 | ||
252 | bool_t | |
91eee4dd | 253 | _xdr_nis_object (XDR *xdrs, nis_object *objp) |
e61abf83 UD |
254 | { |
255 | if (!xdr_nis_oid (xdrs, &objp->zo_oid)) | |
256 | return FALSE; | |
91eee4dd | 257 | if (!_xdr_nis_name (xdrs, &objp->zo_name)) |
e61abf83 | 258 | return FALSE; |
91eee4dd | 259 | if (!_xdr_nis_name (xdrs, &objp->zo_owner)) |
e61abf83 | 260 | return FALSE; |
91eee4dd | 261 | if (!_xdr_nis_name (xdrs, &objp->zo_group)) |
e61abf83 | 262 | return FALSE; |
91eee4dd | 263 | if (!_xdr_nis_name (xdrs, &objp->zo_domain)) |
e61abf83 | 264 | return FALSE; |
a1129917 | 265 | if (!xdr_u_int (xdrs, &objp->zo_access)) |
e61abf83 | 266 | return FALSE; |
a1129917 | 267 | if (!xdr_uint32_t (xdrs, &objp->zo_ttl)) |
e61abf83 UD |
268 | return FALSE; |
269 | if (!xdr_objdata (xdrs, &objp->zo_data)) | |
270 | return FALSE; | |
271 | return TRUE; | |
272 | } | |
273 | ||
274 | bool_t | |
91eee4dd | 275 | _xdr_nis_error (XDR *xdrs, nis_error *objp) |
e61abf83 UD |
276 | { |
277 | if (!xdr_enum (xdrs, (enum_t *) objp)) | |
278 | return FALSE; | |
279 | return TRUE; | |
280 | } | |
281 | ||
282 | bool_t | |
91eee4dd | 283 | _xdr_nis_result (XDR *xdrs, nis_result *objp) |
e61abf83 | 284 | { |
91eee4dd UD |
285 | if (!_xdr_nis_error (xdrs, &objp->status)) |
286 | return FALSE; | |
e61abf83 UD |
287 | if (!xdr_array (xdrs, (char **) &objp->objects.objects_val, |
288 | (u_int *) &objp->objects.objects_len, ~0, | |
91eee4dd UD |
289 | sizeof (nis_object), (xdrproc_t) _xdr_nis_object)) |
290 | return FALSE; | |
e61abf83 | 291 | if (!xdr_netobj (xdrs, &objp->cookie)) |
91eee4dd | 292 | return FALSE; |
a1129917 | 293 | if (!xdr_uint32_t (xdrs, &objp->zticks)) |
91eee4dd | 294 | return FALSE; |
a1129917 | 295 | if (!xdr_uint32_t (xdrs, &objp->dticks)) |
91eee4dd | 296 | return FALSE; |
a1129917 | 297 | if (!xdr_uint32_t (xdrs, &objp->aticks)) |
91eee4dd | 298 | return FALSE; |
a1129917 | 299 | if (!xdr_uint32_t (xdrs, &objp->cticks)) |
91eee4dd | 300 | return FALSE; |
e61abf83 UD |
301 | return TRUE; |
302 | } | |
303 | ||
304 | bool_t | |
91eee4dd | 305 | _xdr_ns_request (XDR *xdrs, ns_request *objp) |
e61abf83 | 306 | { |
91eee4dd | 307 | if (!_xdr_nis_name (xdrs, &objp->ns_name)) |
e61abf83 UD |
308 | return FALSE; |
309 | if (!xdr_array (xdrs, (char **) &objp->ns_object.ns_object_val, | |
310 | (u_int *) &objp->ns_object.ns_object_len, 1, | |
91eee4dd | 311 | sizeof (nis_object), (xdrproc_t) _xdr_nis_object)) |
e61abf83 UD |
312 | return FALSE; |
313 | return TRUE; | |
314 | } | |
315 | ||
316 | bool_t | |
91eee4dd | 317 | _xdr_ib_request (XDR *xdrs, ib_request *objp) |
e61abf83 | 318 | { |
91eee4dd | 319 | if (!_xdr_nis_name (xdrs, &objp->ibr_name)) |
e61abf83 UD |
320 | return FALSE; |
321 | if (!xdr_array (xdrs, (char **) &objp->ibr_srch.ibr_srch_val, | |
322 | (u_int *) &objp->ibr_srch.ibr_srch_len, ~0, | |
323 | sizeof (nis_attr), (xdrproc_t) xdr_nis_attr)) | |
324 | return FALSE; | |
a1129917 | 325 | if (!xdr_u_int (xdrs, &objp->ibr_flags)) |
e61abf83 UD |
326 | return FALSE; |
327 | if (!xdr_array (xdrs, (char **) &objp->ibr_obj.ibr_obj_val, | |
328 | (u_int *) &objp->ibr_obj.ibr_obj_len, 1, | |
91eee4dd | 329 | sizeof (nis_object), (xdrproc_t) _xdr_nis_object)) |
e61abf83 UD |
330 | return FALSE; |
331 | if (!xdr_array (xdrs, (char **) &objp->ibr_cbhost.ibr_cbhost_val, | |
332 | (u_int *) &objp->ibr_cbhost.ibr_cbhost_len, 1, | |
91eee4dd | 333 | sizeof (nis_server), (xdrproc_t) _xdr_nis_server)) |
e61abf83 | 334 | return FALSE; |
a1129917 | 335 | if (!xdr_u_int (xdrs, &objp->ibr_bufsize)) |
e61abf83 UD |
336 | return FALSE; |
337 | if (!xdr_netobj (xdrs, &objp->ibr_cookie)) | |
338 | return FALSE; | |
339 | return TRUE; | |
340 | } | |
341 | ||
342 | bool_t | |
91eee4dd | 343 | _xdr_ping_args (XDR *xdrs, ping_args *objp) |
e61abf83 | 344 | { |
91eee4dd | 345 | if (!_xdr_nis_name (xdrs, &objp->dir)) |
e61abf83 | 346 | return FALSE; |
a1129917 | 347 | if (!xdr_uint32_t (xdrs, &objp->stamp)) |
e61abf83 UD |
348 | return FALSE; |
349 | return TRUE; | |
350 | } | |
351 | ||
352 | bool_t | |
91eee4dd | 353 | _xdr_cp_result (XDR *xdrs, cp_result *objp) |
e61abf83 | 354 | { |
91eee4dd | 355 | if (!_xdr_nis_error (xdrs, &objp->cp_status)) |
e61abf83 | 356 | return FALSE; |
a1129917 | 357 | if (!xdr_uint32_t (xdrs, &objp->cp_zticks)) |
e61abf83 | 358 | return FALSE; |
a1129917 | 359 | if (!xdr_uint32_t (xdrs, &objp->cp_dticks)) |
e61abf83 UD |
360 | return FALSE; |
361 | return TRUE; | |
362 | } | |
363 | ||
364 | bool_t | |
91eee4dd | 365 | _xdr_nis_tag (XDR *xdrs, nis_tag *objp) |
e61abf83 | 366 | { |
a1129917 UD |
367 | if (!xdr_u_int (xdrs, &objp->tag_type)) |
368 | return FALSE; | |
369 | if (!xdr_string (xdrs, &objp->tag_val, ~0)) | |
370 | return FALSE; | |
e61abf83 UD |
371 | return TRUE; |
372 | } | |
373 | ||
374 | bool_t | |
91eee4dd | 375 | _xdr_nis_taglist (XDR *xdrs, nis_taglist *objp) |
e61abf83 UD |
376 | { |
377 | if (!xdr_array (xdrs, (char **) &objp->tags.tags_val, | |
378 | (u_int *) &objp->tags.tags_len, ~0, sizeof (nis_tag), | |
91eee4dd | 379 | (xdrproc_t) _xdr_nis_tag)) |
e61abf83 UD |
380 | return FALSE; |
381 | return TRUE; | |
382 | } | |
383 | ||
384 | bool_t | |
91eee4dd | 385 | _xdr_fd_args (XDR *xdrs, fd_args *objp) |
e61abf83 | 386 | { |
91eee4dd | 387 | if (!_xdr_nis_name (xdrs, &objp->dir_name)) |
e61abf83 | 388 | return FALSE; |
91eee4dd | 389 | if (!_xdr_nis_name (xdrs, &objp->requester)) |
e61abf83 UD |
390 | return FALSE; |
391 | return TRUE; | |
392 | } | |
393 | ||
394 | bool_t | |
91eee4dd | 395 | _xdr_fd_result (XDR *xdrs, fd_result *objp) |
e61abf83 | 396 | { |
91eee4dd UD |
397 | if (!_xdr_nis_error (xdrs, &objp->status)) |
398 | return FALSE; | |
399 | if (!_xdr_nis_name (xdrs, &objp->source)) | |
400 | return FALSE; | |
401 | if (!xdr_bytes (xdrs, (char **) &objp->dir_data.dir_data_val, | |
402 | (u_int *) &objp->dir_data.dir_data_len, ~0)) | |
e61abf83 | 403 | return FALSE; |
91eee4dd UD |
404 | if (!xdr_bytes (xdrs, (char **) &objp->signature.signature_val, |
405 | (u_int *) &objp->signature.signature_len, ~0)) | |
e61abf83 UD |
406 | return FALSE; |
407 | return TRUE; | |
408 | } | |
409 | ||
91eee4dd UD |
410 | /* The following functions have prototypes in nis_callback.h. So |
411 | we make them public */ | |
e61abf83 | 412 | bool_t |
91eee4dd | 413 | xdr_obj_p (XDR *xdrs, obj_p *objp) |
e61abf83 | 414 | { |
91eee4dd UD |
415 | if (!xdr_pointer (xdrs, (char **)objp, sizeof (nis_object), |
416 | (xdrproc_t)_xdr_nis_object)) | |
e61abf83 | 417 | return FALSE; |
91eee4dd UD |
418 | return TRUE; |
419 | } | |
420 | ||
421 | bool_t | |
422 | xdr_cback_data (XDR *xdrs, cback_data *objp) | |
423 | { | |
424 | if (!xdr_array (xdrs, (char **)&objp->entries.entries_val, | |
425 | (u_int *) &objp->entries.entries_len, ~0, | |
426 | sizeof (obj_p), (xdrproc_t) xdr_obj_p)) | |
e61abf83 UD |
427 | return FALSE; |
428 | return TRUE; | |
429 | } |