1/*
2 * Copyright (c) 1997-2014 Erez Zadok
3 * Copyright (c) 1990 Jan-Simon Pendry
4 * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
5 * Copyright (c) 1990 The Regents of the University of California.
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Jan-Simon Pendry at Imperial College, London.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 *    may be used to endorse or promote products derived from this software
21 *    without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 *
36 * File: am-utils/libamu/xdr_func.c
37 *
38 */
39
40/*
41 * Complete list of all possible xdr functions which may be needed.
42 */
43#ifdef HAVE_CONFIG_H
44# include <config.h>
45#endif /* HAVE_CONFIG_H */
46#include <am_defs.h>
47#include <amu.h>
48
49#ifdef __RPCSVC_MOUNT_H__
50# error IRIX6 should not include rpcsvc/mount.h
51#endif /* __RPCSVC_MOUNT_H__ */
52
53/*
54 * MACROS:
55 */
56#ifdef HAVE_FS_AUTOFS
57# ifndef AUTOFS_MAXCOMPONENTLEN
58#  define AUTOFS_MAXCOMPONENTLEN 255
59# endif /* not AUTOFS_MAXCOMPONENTLEN */
60# ifndef AUTOFS_MAXOPTSLEN
61#  define AUTOFS_MAXOPTSLEN 255
62# endif /* not AUTOFS_MAXOPTSLEN */
63# ifndef AUTOFS_MAXPATHLEN
64#  define AUTOFS_MAXPATHLEN 1024
65# endif /* not AUTOFS_MAXPATHLEN */
66#endif /* HAVE_FS_AUTOFS */
67
68/* forward definitions, are they needed? */
69extern bool_t xdr_exportnode(XDR *xdrs, exportnode *objp);
70extern bool_t xdr_groupnode(XDR *xdrs, groupnode *objp);
71extern bool_t xdr_name(XDR *xdrs, name *objp);
72
73
74#ifndef HAVE_XDR_ATTRSTAT
75bool_t
76xdr_attrstat(XDR *xdrs, nfsattrstat *objp)
77{
78  if (amuDebug(D_XDRTRACE))
79    plog(XLOG_DEBUG, "xdr_attrstat:");
80
81  if (!xdr_nfsstat(xdrs, &objp->ns_status)) {
82    return (FALSE);
83  }
84  switch (objp->ns_status) {
85  case NFS_OK:
86    if (!xdr_fattr(xdrs, &objp->ns_u.ns_attr_u)) {
87      return (FALSE);
88    }
89    break;
90  default:
91    break;
92  }
93  return (TRUE);
94}
95#endif /* not HAVE_XDR_ATTRSTAT */
96
97
98#ifndef HAVE_XDR_CREATEARGS
99bool_t
100xdr_createargs(XDR *xdrs, nfscreateargs *objp)
101{
102  if (amuDebug(D_XDRTRACE))
103    plog(XLOG_DEBUG, "xdr_createargs:");
104
105  if (!xdr_diropargs(xdrs, &objp->ca_where)) {
106    return (FALSE);
107  }
108  if (!xdr_sattr(xdrs, &objp->ca_attributes)) {
109    return (FALSE);
110  }
111  return (TRUE);
112}
113#endif /* not HAVE_XDR_CREATEARGS */
114
115
116#ifndef HAVE_XDR_DIRLIST
117bool_t
118xdr_dirlist(XDR *xdrs, nfsdirlist *objp)
119{
120  if (amuDebug(D_XDRTRACE))
121    plog(XLOG_DEBUG, "xdr_dirlist:");
122
123  if (!xdr_pointer(xdrs, (char **) &objp->dl_entries, sizeof(nfsentry), (XDRPROC_T_TYPE) xdr_entry)) {
124    return (FALSE);
125  }
126  if (!xdr_bool(xdrs, &objp->dl_eof)) {
127    return (FALSE);
128  }
129  return (TRUE);
130}
131#endif /* not HAVE_XDR_DIRLIST */
132
133
134#ifndef HAVE_XDR_DIROPARGS
135bool_t
136xdr_diropargs(XDR *xdrs, nfsdiropargs *objp)
137{
138  if (amuDebug(D_XDRTRACE))
139    plog(XLOG_DEBUG, "xdr_diropargs:");
140
141  if (!xdr_nfs_fh(xdrs, &objp->da_fhandle)) {
142    return (FALSE);
143  }
144  if (!xdr_filename(xdrs, &objp->da_name)) {
145    return (FALSE);
146  }
147  return (TRUE);
148}
149#endif /* not HAVE_XDR_DIROPARGS */
150
151
152#ifndef HAVE_XDR_DIROPOKRES
153bool_t
154xdr_diropokres(XDR *xdrs, nfsdiropokres *objp)
155{
156  if (amuDebug(D_XDRTRACE))
157    plog(XLOG_DEBUG, "xdr_diropokres:");
158
159  if (!xdr_nfs_fh(xdrs, &objp->drok_fhandle)) {
160    return (FALSE);
161  }
162  if (!xdr_fattr(xdrs, &objp->drok_attributes)) {
163    return (FALSE);
164  }
165  return (TRUE);
166}
167#endif /* not HAVE_XDR_DIROPOKRES */
168
169
170#ifndef HAVE_XDR_DIROPRES
171bool_t
172xdr_diropres(XDR *xdrs, nfsdiropres *objp)
173{
174  if (amuDebug(D_XDRTRACE))
175    plog(XLOG_DEBUG, "xdr_diropres:");
176
177  if (!xdr_nfsstat(xdrs, &objp->dr_status)) {
178    return (FALSE);
179  }
180  switch (objp->dr_status) {
181  case NFS_OK:
182    if (!xdr_diropokres(xdrs, &objp->dr_u.dr_drok_u)) {
183      return (FALSE);
184    }
185    break;
186  default:
187    break;
188  }
189  return (TRUE);
190}
191#endif /* not HAVE_XDR_DIROPRES */
192
193
194#ifndef HAVE_XDR_DIRPATH
195bool_t
196xdr_dirpath(XDR *xdrs, dirpath *objp)
197{
198  if (amuDebug(D_XDRTRACE))
199    plog(XLOG_DEBUG, "xdr_dirpath:");
200
201  if (!xdr_string(xdrs, objp, MNTPATHLEN)) {
202    return (FALSE);
203  }
204  return (TRUE);
205}
206#endif /* not HAVE_XDR_DIRPATH */
207
208
209#ifndef HAVE_XDR_ENTRY
210bool_t
211xdr_entry(XDR *xdrs, nfsentry *objp)
212{
213  if (amuDebug(D_XDRTRACE))
214    plog(XLOG_DEBUG, "xdr_entry:");
215
216  if (!xdr_u_int(xdrs, &objp->ne_fileid)) {
217    return (FALSE);
218  }
219  if (!xdr_filename(xdrs, &objp->ne_name)) {
220    return (FALSE);
221  }
222  if (!xdr_nfscookie(xdrs, objp->ne_cookie)) {
223    return (FALSE);
224  }
225  if (!xdr_pointer(xdrs, (char **) &objp->ne_nextentry, sizeof(nfsentry), (XDRPROC_T_TYPE) xdr_entry)) {
226    return (FALSE);
227  }
228  return (TRUE);
229}
230#endif /* not HAVE_XDR_ENTRY */
231
232
233#ifndef HAVE_XDR_EXPORTNODE
234bool_t
235xdr_exportnode(XDR *xdrs, exportnode *objp)
236{
237  if (amuDebug(D_XDRTRACE))
238    plog(XLOG_DEBUG, "xdr_exportnode:");
239
240  if (!xdr_dirpath(xdrs, &objp->ex_dir)) {
241    return (FALSE);
242  }
243  if (!xdr_groups(xdrs, &objp->ex_groups)) {
244    return (FALSE);
245  }
246  if (!xdr_exports(xdrs, &objp->ex_next)) {
247    return (FALSE);
248  }
249  return (TRUE);
250}
251#endif /* not HAVE_XDR_EXPORTNODE */
252
253
254#ifndef HAVE_XDR_EXPORTS
255bool_t
256xdr_exports(XDR *xdrs, exports *objp)
257{
258  if (amuDebug(D_XDRTRACE))
259    plog(XLOG_DEBUG, "xdr_exports:");
260
261  if (!xdr_pointer(xdrs, (char **) objp, sizeof(exportnode), (XDRPROC_T_TYPE) xdr_exportnode)) {
262    return (FALSE);
263  }
264  return (TRUE);
265}
266#endif /* not HAVE_XDR_EXPORTS */
267
268
269#ifndef HAVE_XDR_FATTR
270bool_t
271xdr_fattr(XDR *xdrs, nfsfattr *objp)
272{
273  if (amuDebug(D_XDRTRACE))
274    plog(XLOG_DEBUG, "xdr_fattr:");
275
276  if (!xdr_ftype(xdrs, &objp->na_type)) {
277    return (FALSE);
278  }
279  if (!xdr_u_int(xdrs, &objp->na_mode)) {
280    return (FALSE);
281  }
282  if (!xdr_u_int(xdrs, &objp->na_nlink)) {
283    return (FALSE);
284  }
285  if (!xdr_u_int(xdrs, &objp->na_uid)) {
286    return (FALSE);
287  }
288  if (!xdr_u_int(xdrs, &objp->na_gid)) {
289    return (FALSE);
290  }
291  if (!xdr_u_int(xdrs, &objp->na_size)) {
292    return (FALSE);
293  }
294  if (!xdr_u_int(xdrs, &objp->na_blocksize)) {
295    return (FALSE);
296  }
297  if (!xdr_u_int(xdrs, &objp->na_rdev)) {
298    return (FALSE);
299  }
300  if (!xdr_u_int(xdrs, &objp->na_blocks)) {
301    return (FALSE);
302  }
303  if (!xdr_u_int(xdrs, &objp->na_fsid)) {
304    return (FALSE);
305  }
306  if (!xdr_u_int(xdrs, &objp->na_fileid)) {
307    return (FALSE);
308  }
309  if (!xdr_nfstime(xdrs, &objp->na_atime)) {
310    return (FALSE);
311  }
312  if (!xdr_nfstime(xdrs, &objp->na_mtime)) {
313    return (FALSE);
314  }
315  if (!xdr_nfstime(xdrs, &objp->na_ctime)) {
316    return (FALSE);
317  }
318  return (TRUE);
319}
320#endif /* not HAVE_XDR_FATTR */
321
322
323#ifndef HAVE_XDR_FHANDLE
324bool_t
325xdr_fhandle(XDR *xdrs, fhandle objp)
326{
327  if (amuDebug(D_XDRTRACE))
328    plog(XLOG_DEBUG, "xdr_fhandle:");
329
330  if (!xdr_opaque(xdrs, objp, NFS_FHSIZE)) {
331    return (FALSE);
332  }
333  return (TRUE);
334}
335#endif /* not HAVE_XDR_FHANDLE */
336
337
338#ifndef HAVE_XDR_FHSTATUS
339bool_t
340xdr_fhstatus(XDR *xdrs, fhstatus *objp)
341{
342  if (amuDebug(D_XDRTRACE))
343    plog(XLOG_DEBUG, "xdr_fhstatus:");
344
345  if (!xdr_u_int(xdrs, &objp->fhs_status)) {
346    return (FALSE);
347  }
348  if (objp->fhs_status == 0 && !xdr_fhandle(xdrs, objp->fhs_fh)) {
349    return (FALSE);
350  }
351  return (TRUE);
352}
353#endif /* not HAVE_XDR_FHSTATUS */
354
355
356#ifndef HAVE_XDR_FILENAME
357bool_t
358xdr_filename(XDR *xdrs, filename *objp)
359{
360  if (amuDebug(D_XDRTRACE))
361    plog(XLOG_DEBUG, "xdr_filename:");
362
363  if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) {
364    return (FALSE);
365  }
366  return (TRUE);
367}
368#endif /* not HAVE_XDR_FILENAME */
369
370
371#ifndef HAVE_XDR_FTYPE
372bool_t
373xdr_ftype(XDR *xdrs, nfsftype *objp)
374{
375  enum_t local_obj = *objp;
376
377  if (amuDebug(D_XDRTRACE))
378    plog(XLOG_DEBUG, "xdr_ftype:");
379
380  if (!xdr_enum(xdrs, &local_obj)) {
381    return (FALSE);
382  }
383  return (TRUE);
384}
385#endif /* not HAVE_XDR_FTYPE */
386
387
388#ifndef HAVE_XDR_GROUPNODE
389bool_t
390xdr_groupnode(XDR *xdrs, groupnode *objp)
391{
392  if (amuDebug(D_XDRTRACE))
393    plog(XLOG_DEBUG, "xdr_groupnode:");
394
395  if (!xdr_name(xdrs, &objp->gr_name)) {
396    return (FALSE);
397  }
398  if (!xdr_groups(xdrs, &objp->gr_next)) {
399    return (FALSE);
400  }
401  return (TRUE);
402}
403#endif /* not HAVE_XDR_GROUPNODE */
404
405
406#ifndef HAVE_XDR_GROUPS
407bool_t
408xdr_groups(XDR *xdrs, groups *objp)
409{
410  if (amuDebug(D_XDRTRACE))
411    plog(XLOG_DEBUG, "xdr_groups:");
412
413  if (!xdr_pointer(xdrs, (char **) objp, sizeof(groupnode), (XDRPROC_T_TYPE) xdr_groupnode)) {
414    return (FALSE);
415  }
416  return (TRUE);
417}
418#endif /* not HAVE_XDR_GROUPS */
419
420
421#ifndef HAVE_XDR_LINKARGS
422bool_t
423xdr_linkargs(XDR *xdrs, nfslinkargs *objp)
424{
425  if (amuDebug(D_XDRTRACE))
426    plog(XLOG_DEBUG, "xdr_linkargs:");
427
428  if (!xdr_nfs_fh(xdrs, &objp->la_fhandle)) {
429    return (FALSE);
430  }
431  if (!xdr_diropargs(xdrs, &objp->la_to)) {
432    return (FALSE);
433  }
434  return (TRUE);
435}
436#endif /* not HAVE_XDR_LINKARGS */
437
438
439#ifndef HAVE_XDR_MOUNTBODY
440bool_t
441xdr_mountbody(XDR *xdrs, mountbody *objp)
442{
443  if (amuDebug(D_XDRTRACE))
444    plog(XLOG_DEBUG, "xdr_mountbody:");
445
446  if (!xdr_name(xdrs, &objp->ml_hostname)) {
447    return (FALSE);
448  }
449  if (!xdr_dirpath(xdrs, &objp->ml_directory)) {
450    return (FALSE);
451  }
452  if (!xdr_mountlist(xdrs, &objp->ml_next)) {
453    return (FALSE);
454  }
455  return (TRUE);
456}
457#endif /* not HAVE_XDR_MOUNTBODY */
458
459
460#ifndef HAVE_XDR_MOUNTLIST
461bool_t
462xdr_mountlist(XDR *xdrs, mountlist *objp)
463{
464  if (amuDebug(D_XDRTRACE))
465    plog(XLOG_DEBUG, "xdr_mountlist:");
466
467  if (!xdr_pointer(xdrs, (char **) objp, sizeof(mountbody), (XDRPROC_T_TYPE) xdr_mountbody)) {
468    return (FALSE);
469  }
470  return (TRUE);
471}
472#endif /* not HAVE_XDR_MOUNTLIST */
473
474
475#ifndef HAVE_XDR_NAME
476bool_t
477xdr_name(XDR *xdrs, name *objp)
478{
479  if (amuDebug(D_XDRTRACE))
480    plog(XLOG_DEBUG, "xdr_name:");
481
482  if (!xdr_string(xdrs, objp, MNTNAMLEN)) {
483    return (FALSE);
484  }
485  return (TRUE);
486}
487#endif /* not HAVE_XDR_NAME */
488
489
490#ifndef HAVE_XDR_NFS_FH
491bool_t
492xdr_nfs_fh(XDR *xdrs, am_nfs_fh *objp)
493{
494  if (amuDebug(D_XDRTRACE))
495    plog(XLOG_DEBUG, "xdr_nfs_fh:");
496
497  if (!xdr_opaque(xdrs, (caddr_t) objp->fh_data, NFS_FHSIZE)) {
498    return (FALSE);
499  }
500  return (TRUE);
501}
502#endif /* not HAVE_XDR_NFS_FH */
503
504
505#ifndef HAVE_XDR_NFSCOOKIE
506bool_t
507xdr_nfscookie(XDR *xdrs, nfscookie objp)
508{
509  if (amuDebug(D_XDRTRACE))
510    plog(XLOG_DEBUG, "xdr_nfscookie:");
511
512  if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) {
513    return (FALSE);
514  }
515  return (TRUE);
516}
517#endif /* not HAVE_XDR_NFSCOOKIE */
518
519
520#ifndef HAVE_XDR_NFSPATH
521bool_t
522xdr_nfspath(XDR *xdrs, nfspath *objp)
523{
524  if (amuDebug(D_XDRTRACE))
525    plog(XLOG_DEBUG, "xdr_nfspath:");
526
527  if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) {
528    return (FALSE);
529  }
530  return (TRUE);
531}
532#endif /* not HAVE_XDR_NFSPATH */
533
534
535#ifndef HAVE_XDR_NFSSTAT
536bool_t
537xdr_nfsstat(XDR *xdrs, nfsstat *objp)
538{
539  enum_t local_obj = *objp;
540
541  if (amuDebug(D_XDRTRACE))
542    plog(XLOG_DEBUG, "xdr_nfsstat:");
543
544  if (!xdr_enum(xdrs, &local_obj)) {
545    return (FALSE);
546  }
547  return (TRUE);
548}
549#endif /* not HAVE_XDR_NFSSTAT */
550
551
552#ifndef HAVE_XDR_NFSTIME
553bool_t
554xdr_nfstime(XDR *xdrs, nfstime *objp)
555{
556  if (amuDebug(D_XDRTRACE))
557    plog(XLOG_DEBUG, "xdr_nfstime:");
558
559  if (!xdr_u_int(xdrs, (u_int *) &objp->nt_seconds)) {
560    return (FALSE);
561  }
562  if (!xdr_u_int(xdrs, (u_int *) &objp->nt_useconds)) {
563    return (FALSE);
564  }
565  return (TRUE);
566}
567#endif /* not HAVE_XDR_NFSTIME */
568
569
570#ifndef HAVE_XDR_POINTER
571bool_t
572xdr_pointer(register XDR *xdrs, char **objpp, u_int obj_size, XDRPROC_T_TYPE xdr_obj)
573{
574  if (amuDebug(D_XDRTRACE))
575    plog(XLOG_DEBUG, "xdr_pointer:");
576
577  bool_t more_data;
578
579  more_data = (*objpp != NULL);
580  if (!xdr_bool(xdrs, &more_data)) {
581    return (FALSE);
582  }
583  if (!more_data) {
584    *objpp = NULL;
585    return (TRUE);
586  }
587
588  return (xdr_reference(xdrs, objpp, obj_size, xdr_obj));
589}
590#endif /* not HAVE_XDR_POINTER */
591
592
593#ifndef HAVE_XDR_READARGS
594bool_t
595xdr_readargs(XDR *xdrs, nfsreadargs *objp)
596{
597  if (amuDebug(D_XDRTRACE))
598    plog(XLOG_DEBUG, "xdr_readargs:");
599
600  if (!xdr_nfs_fh(xdrs, &objp->ra_fhandle)) {
601    return (FALSE);
602  }
603  if (!xdr_u_int(xdrs, &objp->ra_offset)) {
604    return (FALSE);
605  }
606  if (!xdr_u_int(xdrs, &objp->ra_count)) {
607    return (FALSE);
608  }
609  if (!xdr_u_int(xdrs, &objp->ra_totalcount)) {
610    return (FALSE);
611  }
612  return (TRUE);
613}
614#endif /* not HAVE_XDR_READARGS */
615
616
617#ifndef HAVE_XDR_READDIRARGS
618bool_t
619xdr_readdirargs(XDR *xdrs, nfsreaddirargs *objp)
620{
621  if (amuDebug(D_XDRTRACE))
622    plog(XLOG_DEBUG, "xdr_readdirargs:");
623
624  if (!xdr_nfs_fh(xdrs, &objp->rda_fhandle)) {
625    return (FALSE);
626  }
627  if (!xdr_nfscookie(xdrs, objp->rda_cookie)) {
628    return (FALSE);
629  }
630  if (!xdr_u_int(xdrs, &objp->rda_count)) {
631    return (FALSE);
632  }
633  return (TRUE);
634}
635#endif /* not HAVE_XDR_READDIRARGS */
636
637
638#ifndef HAVE_XDR_READDIRRES
639bool_t
640xdr_readdirres(XDR *xdrs, nfsreaddirres *objp)
641{
642  if (amuDebug(D_XDRTRACE))
643    plog(XLOG_DEBUG, "xdr_readdirres:");
644
645  if (!xdr_nfsstat(xdrs, &objp->rdr_status)) {
646    return (FALSE);
647  }
648  switch (objp->rdr_status) {
649  case NFS_OK:
650    if (!xdr_dirlist(xdrs, &objp->rdr_u.rdr_reply_u)) {
651      return (FALSE);
652    }
653    break;
654  default:
655    break;
656  }
657  return (TRUE);
658}
659#endif /* not HAVE_XDR_READDIRRES */
660
661
662#ifndef HAVE_XDR_READLINKRES
663bool_t
664xdr_readlinkres(XDR *xdrs, nfsreadlinkres *objp)
665{
666  if (amuDebug(D_XDRTRACE))
667    plog(XLOG_DEBUG, "xdr_readlinkres:");
668
669  if (!xdr_nfsstat(xdrs, &objp->rlr_status)) {
670    return (FALSE);
671  }
672  switch (objp->rlr_status) {
673  case NFS_OK:
674    if (!xdr_nfspath(xdrs, &objp->rlr_u.rlr_data_u)) {
675      return (FALSE);
676    }
677    break;
678  default:
679    break;
680  }
681  return (TRUE);
682}
683#endif /* not HAVE_XDR_READLINKRES */
684
685
686#ifndef HAVE_XDR_READOKRES
687bool_t
688xdr_readokres(XDR *xdrs, nfsreadokres *objp)
689{
690  if (amuDebug(D_XDRTRACE))
691    plog(XLOG_DEBUG, "xdr_readokres:");
692
693  if (!xdr_fattr(xdrs, &objp->raok_attributes)) {
694    return (FALSE);
695  }
696  if (!xdr_bytes(xdrs,
697		 (char **) & objp->raok_u.raok_val_u,
698		 (u_int *) & objp->raok_u.raok_len_u,
699		 NFS_MAXDATA)) {
700    return (FALSE);
701  }
702  return (TRUE);
703}
704#endif /* not HAVE_XDR_READOKRES */
705
706
707#ifndef HAVE_XDR_READRES
708bool_t
709xdr_readres(XDR *xdrs, nfsreadres *objp)
710{
711  if (amuDebug(D_XDRTRACE))
712    plog(XLOG_DEBUG, "xdr_readres:");
713
714  if (!xdr_nfsstat(xdrs, &objp->rr_status)) {
715    return (FALSE);
716  }
717  switch (objp->rr_status) {
718  case NFS_OK:
719    if (!xdr_readokres(xdrs, &objp->rr_u.rr_reply_u)) {
720      return (FALSE);
721    }
722    break;
723  default:
724    break;
725  }
726  return (TRUE);
727}
728#endif /* not HAVE_XDR_READRES */
729
730
731#ifndef HAVE_XDR_RENAMEARGS
732bool_t
733xdr_renameargs(XDR *xdrs, nfsrenameargs *objp)
734{
735  if (amuDebug(D_XDRTRACE))
736    plog(XLOG_DEBUG, "xdr_renameargs:");
737
738  if (!xdr_diropargs(xdrs, &objp->rna_from)) {
739    return (FALSE);
740  }
741  if (!xdr_diropargs(xdrs, &objp->rna_to)) {
742    return (FALSE);
743  }
744  return (TRUE);
745}
746#endif /* not HAVE_XDR_RENAMEARGS */
747
748
749#ifndef HAVE_XDR_SATTR
750bool_t
751xdr_sattr(XDR *xdrs, nfssattr *objp)
752{
753  if (amuDebug(D_XDRTRACE))
754    plog(XLOG_DEBUG, "xdr_sattr:");
755
756  if (!xdr_u_int(xdrs, &objp->sa_mode)) {
757    return (FALSE);
758  }
759  if (!xdr_u_int(xdrs, &objp->sa_uid)) {
760    return (FALSE);
761  }
762  if (!xdr_u_int(xdrs, &objp->sa_gid)) {
763    return (FALSE);
764  }
765  if (!xdr_u_int(xdrs, &objp->sa_size)) {
766    return (FALSE);
767  }
768  if (!xdr_nfstime(xdrs, &objp->sa_atime)) {
769    return (FALSE);
770  }
771  if (!xdr_nfstime(xdrs, &objp->sa_mtime)) {
772    return (FALSE);
773  }
774  return (TRUE);
775}
776#endif /* not HAVE_XDR_SATTR */
777
778
779#ifndef HAVE_XDR_SATTRARGS
780bool_t
781xdr_sattrargs(XDR *xdrs, nfssattrargs *objp)
782{
783  if (amuDebug(D_XDRTRACE))
784    plog(XLOG_DEBUG, "xdr_sattrargs:");
785
786  if (!xdr_nfs_fh(xdrs, &objp->sag_fhandle)) {
787    return (FALSE);
788  }
789  if (!xdr_sattr(xdrs, &objp->sag_attributes)) {
790    return (FALSE);
791  }
792  return (TRUE);
793}
794#endif /* not HAVE_XDR_SATTRARGS */
795
796
797#ifndef HAVE_XDR_STATFSOKRES
798bool_t
799xdr_statfsokres(XDR *xdrs, nfsstatfsokres *objp)
800{
801  if (amuDebug(D_XDRTRACE))
802    plog(XLOG_DEBUG, "xdr_statfsokres:");
803
804  if (!xdr_u_int(xdrs, &objp->sfrok_tsize)) {
805    return (FALSE);
806  }
807  if (!xdr_u_int(xdrs, &objp->sfrok_bsize)) {
808    return (FALSE);
809  }
810  if (!xdr_u_int(xdrs, &objp->sfrok_blocks)) {
811    return (FALSE);
812  }
813  if (!xdr_u_int(xdrs, &objp->sfrok_bfree)) {
814    return (FALSE);
815  }
816  if (!xdr_u_int(xdrs, &objp->sfrok_bavail)) {
817    return (FALSE);
818  }
819  return (TRUE);
820}
821#endif /* not HAVE_XDR_STATFSOKRES */
822
823
824#ifndef HAVE_XDR_STATFSRES
825bool_t
826xdr_statfsres(XDR *xdrs, nfsstatfsres *objp)
827{
828  if (amuDebug(D_XDRTRACE))
829    plog(XLOG_DEBUG, "xdr_statfsres:");
830
831  if (!xdr_nfsstat(xdrs, &objp->sfr_status)) {
832    return (FALSE);
833  }
834  switch (objp->sfr_status) {
835  case NFS_OK:
836    if (!xdr_statfsokres(xdrs, &objp->sfr_u.sfr_reply_u)) {
837      return (FALSE);
838    }
839    break;
840  default:
841    break;
842  }
843  return (TRUE);
844}
845#endif /* not HAVE_XDR_STATFSRES */
846
847
848#ifndef HAVE_XDR_SYMLINKARGS
849bool_t
850xdr_symlinkargs(XDR *xdrs, nfssymlinkargs *objp)
851{
852  if (amuDebug(D_XDRTRACE))
853    plog(XLOG_DEBUG, "xdr_symlinkargs:");
854
855  if (!xdr_diropargs(xdrs, &objp->sla_from)) {
856    return (FALSE);
857  }
858  if (!xdr_nfspath(xdrs, &objp->sla_to)) {
859    return (FALSE);
860  }
861  if (!xdr_sattr(xdrs, &objp->sla_attributes)) {
862    return (FALSE);
863  }
864  return (TRUE);
865}
866#endif /* not HAVE_XDR_SYMLINKARGS */
867
868
869#ifndef HAVE_XDR_WRITEARGS
870bool_t
871xdr_writeargs(XDR *xdrs, nfswriteargs *objp)
872{
873  if (amuDebug(D_XDRTRACE))
874    plog(XLOG_DEBUG, "xdr_writeargs:");
875
876  if (!xdr_nfs_fh(xdrs, &objp->wra_fhandle)) {
877    return (FALSE);
878  }
879  if (!xdr_u_int(xdrs, &objp->wra_beginoffset)) {
880    return (FALSE);
881  }
882  if (!xdr_u_int(xdrs, &objp->wra_offset)) {
883    return (FALSE);
884  }
885  if (!xdr_u_int(xdrs, &objp->wra_totalcount)) {
886    return (FALSE);
887  }
888  if (!xdr_bytes(xdrs,
889		 (char **) & objp->wra_u.wra_val_u,
890		 (u_int *) & objp->wra_u.wra_len_u,
891		 NFS_MAXDATA)) {
892    return (FALSE);
893  }
894  return (TRUE);
895}
896#endif /* not HAVE_XDR_WRITEARGS */
897
898
899/*
900 * NFS V3 XDR FUNCTIONS:
901 */
902#ifdef HAVE_FS_NFS3
903bool_t
904xdr_am_fhandle3(XDR *xdrs, am_fhandle3 *objp)
905{
906  if (amuDebug(D_XDRTRACE))
907    plog(XLOG_DEBUG, "xdr_am_fhandle3:");
908
909  if (!xdr_bytes(xdrs,
910		 (char **) &objp->fhandle3_val,
911		 (u_int *) &objp->fhandle3_len,
912		 AM_FHSIZE3))
913    return (FALSE);
914  return (TRUE);
915}
916
917
918bool_t
919xdr_am_mountstat3(XDR *xdrs, am_mountstat3 *objp)
920{
921  enum_t local_obj = *objp;
922
923  if (amuDebug(D_XDRTRACE))
924    plog(XLOG_DEBUG, "xdr_am_mountstat3:");
925
926  if (!xdr_enum(xdrs, &local_obj))
927    return (FALSE);
928  return (TRUE);
929}
930
931
932bool_t
933xdr_am_mountres3_ok(XDR *xdrs, am_mountres3_ok *objp)
934{
935  if (amuDebug(D_XDRTRACE))
936    plog(XLOG_DEBUG, "xdr_am_mountres3_ok:");
937
938  if (!xdr_am_fhandle3(xdrs, &objp->fhandle))
939    return (FALSE);
940  if (!xdr_array(xdrs,
941		 (char **) ((voidp) &objp->auth_flavors.auth_flavors_val),
942		 (u_int *) &objp->auth_flavors.auth_flavors_len,
943		 ~0,
944		 sizeof(int),
945		 (XDRPROC_T_TYPE) xdr_int))
946    return (FALSE);
947  return (TRUE);
948}
949
950bool_t
951xdr_am_mountres3(XDR *xdrs, am_mountres3 *objp)
952{
953  if (amuDebug(D_XDRTRACE))
954    plog(XLOG_DEBUG, "xdr_am_mountres3:");
955
956  if (!xdr_am_mountstat3(xdrs, &objp->fhs_status))
957    return (FALSE);
958
959  if (objp->fhs_status == AM_MNT3_OK) {
960    if (!xdr_am_mountres3_ok(xdrs, &objp->mountres3_u.mountinfo))
961      return (FALSE);
962  }
963  return (TRUE);
964}
965
966bool_t
967xdr_am_cookieverf3(XDR *xdrs, am_cookieverf3 objp)
968{
969  if (amuDebug(D_XDRTRACE))
970    plog(XLOG_DEBUG, "xdr_am_cookieverf3:");
971
972  if (!xdr_opaque(xdrs, objp, AM_NFS3_COOKIEVERFSIZE))
973    return FALSE;
974  return TRUE;
975}
976
977#if 0
978/* In FreeBSD xdr_uint64() is defined in ../../../include/rpcsvc/nfs_prot.x */
979/*
980 * Not ideal, xdr_u_int64_t() is not defined in Linux glibc RPC
981 * but xdr_u_quad_t() is. But in libtirpc xdr_u_quad_t() is not
982 * defined and xdr_u_int64_t() is. So xdr_u_int64_t() is probably
983 * an expected standard xdr function so, if it isn't defined use
984 * an internal xdr_u_int64_t() that uses xdr_u_quad_t().
985 */
986#ifndef HAVE_XDR_U_INT64_T
987#define xdr_u_int64_t(xdrs, objp) xdr_u_quad_t(xdrs, objp)
988#endif /* HAVE_XDR_U_INT64_T */
989
990bool_t
991xdr_uint64(XDR *xdrs, uint64 *objp)
992{
993  if (amuDebug(D_XDRTRACE))
994    plog(XLOG_DEBUG, "xdr_uint64:");
995
996  if (!xdr_u_int64_t(xdrs, objp))
997    return FALSE;
998  return TRUE;
999}
1000#endif
1001
1002bool_t
1003xdr_am_cookie3(XDR *xdrs, am_cookie3 *objp)
1004{
1005  if (amuDebug(D_XDRTRACE))
1006    plog(XLOG_DEBUG, "xdr_am_cookie3:");
1007
1008  if (!xdr_uint64(xdrs, objp))
1009    return FALSE;
1010  return TRUE;
1011}
1012
1013bool_t
1014xdr_am_nfs_fh3(XDR *xdrs, am_nfs_fh3 *objp)
1015{
1016  if (amuDebug(D_XDRTRACE))
1017    plog(XLOG_DEBUG, "xdr_am_nfs_fh3:");
1018
1019  if (!xdr_u_int(xdrs, &objp->am_fh3_length))
1020    return (FALSE);
1021  if (objp->am_fh3_length > AM_FHSIZE3)
1022    return (FALSE);
1023  if (!xdr_opaque(xdrs, objp->am_fh3_data, objp->am_fh3_length))
1024    return (FALSE);
1025  return (TRUE);
1026}
1027
1028bool_t
1029xdr_am_nfsstat3(XDR *xdrs, am_nfsstat3 *objp)
1030{
1031  if (amuDebug(D_XDRTRACE))
1032    plog(XLOG_DEBUG, "xdr_am_nfsstat3:");
1033
1034  if (!xdr_enum(xdrs, (enum_t *)objp))
1035    return (FALSE);
1036  return (TRUE);
1037}
1038
1039bool_t
1040xdr_am_diropargs3(XDR *xdrs, am_diropargs3 *objp)
1041{
1042  if (amuDebug(D_XDRTRACE))
1043    plog(XLOG_DEBUG, "xdr_am_diropargs3:");
1044
1045  if (!xdr_am_nfs_fh3(xdrs, &objp->dir))
1046    return (FALSE);
1047  if (!xdr_am_filename3(xdrs, &objp->name))
1048    return (FALSE);
1049  return (TRUE);
1050}
1051
1052bool_t
1053xdr_am_filename3(XDR *xdrs, am_filename3 *objp)
1054{
1055  if (amuDebug(D_XDRTRACE))
1056    plog(XLOG_DEBUG, "xdr_am_filename3:");
1057
1058  if (!xdr_string(xdrs, objp, ~0))
1059    return (FALSE);
1060  return (TRUE);
1061}
1062
1063bool_t
1064xdr_am_ftype3(XDR *xdrs, am_ftype3 *objp)
1065{
1066  if (amuDebug(D_XDRTRACE))
1067    plog(XLOG_DEBUG, "xdr_am_ftype3:");
1068
1069  if (!xdr_enum(xdrs, (enum_t *) objp))
1070    return FALSE;
1071  return TRUE;
1072}
1073
1074bool_t
1075xdr_am_mode3(XDR *xdrs, am_mode3 *objp)
1076{
1077  if (amuDebug(D_XDRTRACE))
1078    plog(XLOG_DEBUG, "xdr_am_mode3:");
1079
1080  if (!xdr_u_int(xdrs, objp))
1081    return FALSE;
1082  return TRUE;
1083}
1084
1085bool_t
1086xdr_am_uid3(XDR *xdrs, am_uid3 *objp)
1087{
1088  if (amuDebug(D_XDRTRACE))
1089    plog(XLOG_DEBUG, "xdr_am_uid3:");
1090
1091  if (!xdr_u_int(xdrs, objp))
1092    return FALSE;
1093  return TRUE;
1094}
1095
1096bool_t
1097xdr_am_gid3(XDR *xdrs, am_gid3 *objp)
1098{
1099  if (amuDebug(D_XDRTRACE))
1100    plog(XLOG_DEBUG, "xdr_am_gid3:");
1101
1102  if (!xdr_u_int(xdrs, objp))
1103    return FALSE;
1104  return TRUE;
1105}
1106
1107bool_t
1108xdr_am_size3(XDR *xdrs, am_size3 *objp)
1109{
1110  if (amuDebug(D_XDRTRACE))
1111    plog(XLOG_DEBUG, "xdr_am_size3:");
1112
1113  if (!xdr_uint64(xdrs, objp))
1114    return FALSE;
1115  return TRUE;
1116}
1117
1118bool_t
1119xdr_am_fileid3(XDR *xdrs, am_fileid3 *objp)
1120{
1121  if (amuDebug(D_XDRTRACE))
1122    plog(XLOG_DEBUG, "xdr_am_fileid3:");
1123
1124  if (!xdr_uint64(xdrs, objp))
1125    return FALSE;
1126  return TRUE;
1127}
1128
1129bool_t
1130xdr_am_specdata3(XDR *xdrs, am_specdata3 *objp)
1131{
1132  if (amuDebug(D_XDRTRACE))
1133    plog(XLOG_DEBUG, "xdr_am_specdata3:");
1134
1135  if (!xdr_u_int(xdrs, &objp->specdata1))
1136    return FALSE;
1137  if (!xdr_u_int(xdrs, &objp->specdata2))
1138    return FALSE;
1139  return TRUE;
1140}
1141
1142bool_t
1143xdr_am_nfstime3(XDR *xdrs, am_nfstime3 *objp)
1144{
1145  if (amuDebug(D_XDRTRACE))
1146    plog(XLOG_DEBUG, "xdr_am_nfstime3:");
1147
1148  if (!xdr_u_int(xdrs, &objp->seconds))
1149    return FALSE;
1150  if (!xdr_u_int(xdrs, &objp->nseconds))
1151    return FALSE;
1152  return TRUE;
1153}
1154
1155bool_t
1156xdr_am_fattr3(XDR *xdrs, am_fattr3 *objp)
1157{
1158  if (amuDebug(D_XDRTRACE))
1159    plog(XLOG_DEBUG, "xdr_am_fattr3:");
1160
1161  if (!xdr_am_ftype3(xdrs, &objp->type))
1162    return FALSE;
1163  if (!xdr_am_mode3(xdrs, &objp->mode))
1164    return FALSE;
1165  if (!xdr_u_int(xdrs, &objp->nlink))
1166    return FALSE;
1167  if (!xdr_am_uid3(xdrs, &objp->uid))
1168    return FALSE;
1169  if (!xdr_am_gid3(xdrs, &objp->gid))
1170    return FALSE;
1171  if (!xdr_am_size3(xdrs, &objp->size))
1172    return FALSE;
1173  if (!xdr_am_size3(xdrs, &objp->used))
1174    return FALSE;
1175  if (!xdr_am_specdata3(xdrs, &objp->rdev))
1176    return FALSE;
1177  if (!xdr_uint64(xdrs, &objp->fsid))
1178    return FALSE;
1179  if (!xdr_am_fileid3(xdrs, &objp->fileid))
1180    return FALSE;
1181  if (!xdr_am_nfstime3(xdrs, &objp->atime))
1182    return FALSE;
1183  if (!xdr_am_nfstime3(xdrs, &objp->mtime))
1184    return FALSE;
1185  if (!xdr_am_nfstime3(xdrs, &objp->ctime))
1186    return FALSE;
1187  return TRUE;
1188}
1189
1190bool_t
1191xdr_am_post_op_attr(XDR *xdrs, am_post_op_attr *objp)
1192{
1193  if (amuDebug(D_XDRTRACE))
1194    plog(XLOG_DEBUG, "xdr_am_post_op_attr:");
1195
1196  if (!xdr_bool(xdrs, &objp->attributes_follow))
1197    return FALSE;
1198  switch (objp->attributes_follow) {
1199  case TRUE:
1200    if (!xdr_am_fattr3(xdrs, &objp->am_post_op_attr_u.attributes))
1201      return FALSE;
1202    break;
1203  case FALSE:
1204    break;
1205  default:
1206    return FALSE;
1207  }
1208  return TRUE;
1209}
1210
1211bool_t
1212xdr_am_stable_how(XDR *xdrs, am_stable_how *objp)
1213{
1214  if (amuDebug(D_XDRTRACE))
1215    plog(XLOG_DEBUG, "xdr_am_stable_how:");
1216
1217  if (!xdr_enum(xdrs, (enum_t *) objp))
1218    return FALSE;
1219  return TRUE;
1220}
1221
1222bool_t
1223xdr_am_offset3(XDR *xdrs, am_offset3 *objp)
1224{
1225  if (amuDebug(D_XDRTRACE))
1226    plog(XLOG_DEBUG, "xdr_am_offset3:");
1227
1228  if (!xdr_uint64(xdrs, objp))
1229    return FALSE;
1230  return TRUE;
1231}
1232
1233bool_t
1234xdr_am_count3(XDR *xdrs, am_count3 *objp)
1235{
1236  if (amuDebug(D_XDRTRACE))
1237    plog(XLOG_DEBUG, "xdr_am_count3:");
1238
1239  if (!xdr_u_int(xdrs, objp))
1240    return FALSE;
1241  return TRUE;
1242}
1243
1244bool_t
1245xdr_am_wcc_attr(XDR *xdrs, am_wcc_attr *objp)
1246{
1247  if (amuDebug(D_XDRTRACE))
1248    plog(XLOG_DEBUG, "xdr_am_wcc_attr:");
1249
1250  if (!xdr_am_size3(xdrs, &objp->size))
1251    return FALSE;
1252  if (!xdr_am_nfstime3(xdrs, &objp->mtime))
1253    return FALSE;
1254  if (!xdr_am_nfstime3(xdrs, &objp->ctime))
1255    return FALSE;
1256  return TRUE;
1257}
1258
1259bool_t
1260xdr_am_pre_op_attr(XDR *xdrs, am_pre_op_attr *objp)
1261{
1262  if (amuDebug(D_XDRTRACE))
1263    plog(XLOG_DEBUG, ":xdr_am_pre_op_attr");
1264
1265  if (!xdr_bool(xdrs, &objp->attributes_follow))
1266    return FALSE;
1267  switch (objp->attributes_follow) {
1268  case TRUE:
1269    if (!xdr_am_wcc_attr(xdrs, &objp->am_pre_op_attr_u.attributes))
1270      return FALSE;
1271    break;
1272  case FALSE:
1273    break;
1274  default:
1275    return FALSE;
1276  }
1277  return TRUE;
1278}
1279
1280bool_t
1281xdr_am_wcc_data(XDR *xdrs, am_wcc_data *objp)
1282{
1283  if (amuDebug(D_XDRTRACE))
1284    plog(XLOG_DEBUG, "xdr_am_wcc_data:");
1285
1286  if (!xdr_am_pre_op_attr(xdrs, &objp->before))
1287    return FALSE;
1288  if (!xdr_am_post_op_attr(xdrs, &objp->after))
1289    return FALSE;
1290  return TRUE;
1291}
1292
1293bool_t
1294xdr_am_WRITE3args(XDR *xdrs, am_WRITE3args *objp)
1295{
1296  if (amuDebug(D_XDRTRACE))
1297    plog(XLOG_DEBUG, "xdr_am_WRITE3args:");
1298
1299  if (!xdr_am_nfs_fh3(xdrs, &objp->file))
1300    return FALSE;
1301  if (!xdr_am_offset3(xdrs, &objp->offset))
1302    return FALSE;
1303  if (!xdr_am_count3(xdrs, &objp->count))
1304    return FALSE;
1305  if (!xdr_am_stable_how(xdrs, &objp->stable))
1306    return FALSE;
1307  if (!xdr_bytes(xdrs, (char **)&objp->data.data_val,
1308                (u_int *) &objp->data.data_len, ~0))
1309    return FALSE;
1310  return TRUE;
1311}
1312
1313bool_t
1314xdr_am_writeverf3(XDR *xdrs, am_writeverf3 objp)
1315{
1316  if (amuDebug(D_XDRTRACE))
1317    plog(XLOG_DEBUG, "xdr_am_writeverf3:");
1318
1319  if (!xdr_opaque(xdrs, objp, AM_NFS3_WRITEVERFSIZE))
1320    return FALSE;
1321  return TRUE;
1322}
1323
1324bool_t
1325xdr_am_WRITE3resok(XDR *xdrs, am_WRITE3resok *objp)
1326{
1327  if (amuDebug(D_XDRTRACE))
1328    plog(XLOG_DEBUG, "xdr_am_WRITE3resok:");
1329
1330  if (!xdr_am_wcc_data(xdrs, &objp->file_wcc))
1331    return FALSE;
1332  if (!xdr_am_count3(xdrs, &objp->count))
1333    return FALSE;
1334  if (!xdr_am_stable_how(xdrs, &objp->committed))
1335    return FALSE;
1336  if (!xdr_am_writeverf3(xdrs, objp->verf))
1337    return FALSE;
1338  return TRUE;
1339}
1340
1341bool_t
1342xdr_am_WRITE3resfail(XDR *xdrs, am_WRITE3resfail *objp)
1343{
1344  if (amuDebug(D_XDRTRACE))
1345    plog(XLOG_DEBUG, "xdr_am_WRITE3resfail:");
1346
1347  if (!xdr_am_wcc_data(xdrs, &objp->file_wcc))
1348    return FALSE;
1349  return TRUE;
1350}
1351
1352bool_t
1353xdr_am_WRITE3res(XDR *xdrs, am_WRITE3res *objp)
1354{
1355  if (amuDebug(D_XDRTRACE))
1356    plog(XLOG_DEBUG, "xdr_am_WRITE3res:");
1357
1358  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1359    return FALSE;
1360  switch (objp->status) {
1361  case AM_NFS3_OK:
1362    if (!xdr_am_WRITE3resok(xdrs, &objp->res_u.ok))
1363      return FALSE;
1364    break;
1365  default:
1366    if (!xdr_am_WRITE3resfail(xdrs, &objp->res_u.fail))
1367      return FALSE;
1368    break;
1369  }
1370  return TRUE;
1371}
1372
1373bool_t
1374xdr_am_LOOKUP3args(XDR *xdrs, am_LOOKUP3args *objp)
1375{
1376  if (amuDebug(D_XDRTRACE))
1377    plog(XLOG_DEBUG, "xdr_am_LOOKUP3args:");
1378
1379  if (!xdr_am_diropargs3(xdrs, &objp->what))
1380    return (FALSE);
1381  return (TRUE);
1382}
1383
1384bool_t
1385xdr_am_LOOKUP3res(XDR *xdrs, am_LOOKUP3res *objp)
1386{
1387  if (amuDebug(D_XDRTRACE))
1388    plog(XLOG_DEBUG, "xdr_am_LOOKUP3res:");
1389
1390  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1391    return (FALSE);
1392  switch (objp->status) {
1393  case AM_NFS3_OK:
1394    if (!xdr_am_LOOKUP3resok(xdrs, &objp->res_u.ok))
1395      return (FALSE);
1396    break;
1397  default:
1398    if (!xdr_am_LOOKUP3resfail(xdrs, &objp->res_u.fail))
1399      return (FALSE);
1400    break;
1401  }
1402  return (TRUE);
1403}
1404
1405bool_t
1406xdr_am_LOOKUP3resfail(XDR *xdrs, am_LOOKUP3resfail *objp)
1407{
1408  if (amuDebug(D_XDRTRACE))
1409    plog(XLOG_DEBUG, "xdr_am_LOOKUP3resfail:");
1410
1411  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
1412    return (FALSE);
1413  return (TRUE);
1414}
1415
1416bool_t
1417xdr_am_LOOKUP3resok(XDR *xdrs, am_LOOKUP3resok *objp)
1418{
1419  if (amuDebug(D_XDRTRACE))
1420    plog(XLOG_DEBUG, "xdr_am_LOOKUP3resok:");
1421
1422  if (!xdr_am_nfs_fh3(xdrs, &objp->object))
1423    return (FALSE);
1424  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
1425    return (FALSE);
1426  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
1427    return (FALSE);
1428  return (TRUE);
1429}
1430
1431bool_t
1432xdr_am_COMMIT3args(XDR *xdrs, am_COMMIT3args *objp)
1433{
1434  if (amuDebug(D_XDRTRACE))
1435    plog(XLOG_DEBUG, "xdr_am_COMMIT3args:");
1436
1437  if (!xdr_am_nfs_fh3(xdrs, &objp->file))
1438    return FALSE;
1439  if (!xdr_am_offset3(xdrs, &objp->offset))
1440    return FALSE;
1441  if (!xdr_am_count3(xdrs, &objp->count))
1442    return FALSE;
1443  return TRUE;
1444}
1445
1446bool_t
1447xdr_am_COMMIT3resok(XDR *xdrs, am_COMMIT3resok *objp)
1448{
1449  if (amuDebug(D_XDRTRACE))
1450    plog(XLOG_DEBUG, "xdr_am_COMMIT3resok:");
1451
1452  if (!xdr_am_wcc_data(xdrs, &objp->file_wcc))
1453    return FALSE;
1454  if (!xdr_am_writeverf3(xdrs, objp->verf))
1455    return FALSE;
1456  return TRUE;
1457}
1458
1459bool_t
1460xdr_am_COMMIT3resfail(XDR *xdrs, am_COMMIT3resfail *objp)
1461{
1462  if (amuDebug(D_XDRTRACE))
1463    plog(XLOG_DEBUG, "xdr_am_COMMIT3resfail:");
1464
1465  if (!xdr_am_wcc_data(xdrs, &objp->file_wcc))
1466    return FALSE;
1467  return TRUE;
1468}
1469
1470bool_t
1471xdr_am_COMMIT3res(XDR *xdrs, am_COMMIT3res *objp)
1472{
1473  if (amuDebug(D_XDRTRACE))
1474    plog(XLOG_DEBUG, "xdr_am_COMMIT3res:");
1475
1476  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1477    return FALSE;
1478  switch (objp->status) {
1479  case AM_NFS3_OK:
1480    if (!xdr_am_COMMIT3resok(xdrs, &objp->res_u.ok))
1481      return FALSE;
1482    break;
1483  default:
1484    if (!xdr_am_COMMIT3resfail(xdrs, &objp->res_u.fail))
1485      return FALSE;
1486    break;
1487  }
1488  return TRUE;
1489}
1490
1491bool_t
1492xdr_am_ACCESS3args(XDR *xdrs, am_ACCESS3args *objp)
1493{
1494  if (amuDebug(D_XDRTRACE))
1495    plog(XLOG_DEBUG, "xdr_am_ACCESS3args:");
1496
1497  if (!xdr_am_nfs_fh3(xdrs, &objp->object))
1498    return FALSE;
1499  if (!xdr_u_int(xdrs, &objp->access))
1500    return FALSE;
1501  return TRUE;
1502}
1503
1504bool_t
1505xdr_am_ACCESS3resok(XDR *xdrs, am_ACCESS3resok *objp)
1506{
1507  if (amuDebug(D_XDRTRACE))
1508    plog(XLOG_DEBUG, "xdr_am_ACCESS3resok:");
1509
1510  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
1511    return FALSE;
1512  if (!xdr_u_int(xdrs, &objp->access))
1513    return FALSE;
1514  return TRUE;
1515}
1516
1517bool_t
1518xdr_am_ACCESS3resfail(XDR *xdrs, am_ACCESS3resfail *objp)
1519{
1520  if (amuDebug(D_XDRTRACE))
1521    plog(XLOG_DEBUG, "xdr_am_ACCESS3resfail:");
1522
1523  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
1524    return FALSE;
1525  return TRUE;
1526}
1527
1528bool_t
1529xdr_am_ACCESS3res(XDR *xdrs, am_ACCESS3res *objp)
1530{
1531  if (amuDebug(D_XDRTRACE))
1532    plog(XLOG_DEBUG, "xdr_am_ACCESS3res:");
1533
1534  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1535    return FALSE;
1536  switch (objp->status) {
1537  case AM_NFS3_OK:
1538    if (!xdr_am_ACCESS3resok(xdrs, &objp->res_u.ok))
1539      return FALSE;
1540    break;
1541  default:
1542    if (!xdr_am_ACCESS3resfail(xdrs, &objp->res_u.fail))
1543      return FALSE;
1544    break;
1545  }
1546  return TRUE;
1547}
1548
1549bool_t
1550xdr_am_GETATTR3args(XDR *xdrs, am_GETATTR3args *objp)
1551{
1552  if (amuDebug(D_XDRTRACE))
1553    plog(XLOG_DEBUG, "xdr_am_GETATTR3args:");
1554
1555  if (!xdr_am_nfs_fh3(xdrs, &objp->object))
1556    return FALSE;
1557  return TRUE;
1558}
1559
1560bool_t
1561xdr_am_GETATTR3resok(XDR *xdrs, am_GETATTR3resok *objp)
1562{
1563  if (amuDebug(D_XDRTRACE))
1564    plog(XLOG_DEBUG, "xdr_am_GETATTR3resok:");
1565
1566  if (!xdr_am_fattr3(xdrs, &objp->obj_attributes))
1567    return FALSE;
1568  return TRUE;
1569}
1570
1571bool_t
1572xdr_am_GETATTR3res(XDR *xdrs, am_GETATTR3res *objp)
1573{
1574  if (amuDebug(D_XDRTRACE))
1575    plog(XLOG_DEBUG, "xdr_am_GETATTR3res:");
1576
1577  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1578    return FALSE;
1579  switch (objp->status) {
1580  case AM_NFS3_OK:
1581    if (!xdr_am_GETATTR3resok(xdrs, &objp->res_u.ok))
1582      return FALSE;
1583    break;
1584  default:
1585    break;
1586  }
1587  return TRUE;
1588}
1589
1590bool_t
1591xdr_am_time_how(XDR *xdrs, am_time_how *objp)
1592{
1593  if (amuDebug(D_XDRTRACE))
1594    plog(XLOG_DEBUG, "xdr_am_time_how:");
1595
1596  if (!xdr_enum(xdrs, (enum_t *) objp))
1597    return FALSE;
1598  return TRUE;
1599}
1600
1601bool_t
1602xdr_am_set_mode3(XDR *xdrs, am_set_mode3 *objp)
1603{
1604  if (amuDebug(D_XDRTRACE))
1605    plog(XLOG_DEBUG, "xdr_am_set_mode3:");
1606
1607  if (!xdr_bool(xdrs, &objp->set_it))
1608    return FALSE;
1609  switch (objp->set_it) {
1610  case TRUE:
1611    if (!xdr_am_mode3(xdrs, &objp->am_set_mode3_u.mode))
1612      return FALSE;
1613    break;
1614  default:
1615    break;
1616  }
1617  return TRUE;
1618}
1619
1620bool_t
1621xdr_am_set_uid3(XDR *xdrs, am_set_uid3 *objp)
1622{
1623  if (amuDebug(D_XDRTRACE))
1624    plog(XLOG_DEBUG, "xdr_am_set_uid3:");
1625
1626  if (!xdr_bool(xdrs, &objp->set_it))
1627    return FALSE;
1628  switch (objp->set_it) {
1629  case TRUE:
1630    if (!xdr_am_uid3(xdrs, &objp->am_set_uid3_u.uid))
1631      return FALSE;
1632    break;
1633  default:
1634    break;
1635  }
1636  return TRUE;
1637}
1638
1639bool_t
1640xdr_am_set_gid3(XDR *xdrs, am_set_gid3 *objp)
1641{
1642  if (amuDebug(D_XDRTRACE))
1643    plog(XLOG_DEBUG, "xdr_am_set_gid3:");
1644
1645  if (!xdr_bool(xdrs, &objp->set_it))
1646    return FALSE;
1647  switch (objp->set_it) {
1648  case TRUE:
1649    if (!xdr_am_gid3(xdrs, &objp->am_set_gid3_u.gid))
1650      return FALSE;
1651    break;
1652  default:
1653    break;
1654  }
1655  return TRUE;
1656}
1657
1658bool_t
1659xdr_am_set_size3(XDR *xdrs, am_set_size3 *objp)
1660{
1661  if (amuDebug(D_XDRTRACE))
1662    plog(XLOG_DEBUG, "xdr_am_set_size3:");
1663
1664  if (!xdr_bool(xdrs, &objp->set_it))
1665    return FALSE;
1666  switch (objp->set_it) {
1667  case TRUE:
1668    if (!xdr_am_size3(xdrs, &objp->am_set_size3_u.size))
1669      return FALSE;
1670    break;
1671  default:
1672    break;
1673  }
1674  return TRUE;
1675}
1676
1677bool_t
1678xdr_am_set_atime(XDR *xdrs, am_set_atime *objp)
1679{
1680  if (amuDebug(D_XDRTRACE))
1681    plog(XLOG_DEBUG, "xdr_am_set_atime:");
1682
1683  if (!xdr_am_time_how(xdrs, &objp->set_it))
1684    return FALSE;
1685  switch (objp->set_it) {
1686  case AM_SET_TO_CLIENT_TIME:
1687    if (!xdr_am_nfstime3(xdrs, &objp->am_set_atime_u.atime))
1688      return FALSE;
1689    break;
1690  default:
1691    break;
1692  }
1693  return TRUE;
1694}
1695
1696bool_t
1697xdr_am_set_mtime(XDR *xdrs, am_set_mtime *objp)
1698{
1699  if (amuDebug(D_XDRTRACE))
1700    plog(XLOG_DEBUG, "xdr_am_set_mtime:");
1701
1702  if (!xdr_am_time_how(xdrs, &objp->set_it))
1703    return FALSE;
1704  switch (objp->set_it) {
1705  case AM_SET_TO_CLIENT_TIME:
1706    if (!xdr_am_nfstime3(xdrs, &objp->am_set_mtime_u.mtime))
1707      return FALSE;
1708    break;
1709  default:
1710    break;
1711  }
1712  return TRUE;
1713}
1714
1715bool_t
1716xdr_am_sattr3(XDR *xdrs, am_sattr3 *objp)
1717{
1718  if (amuDebug(D_XDRTRACE))
1719    plog(XLOG_DEBUG, "xdr_am_sattr3:");
1720
1721  if (!xdr_am_set_mode3(xdrs, &objp->mode))
1722    return FALSE;
1723  if (!xdr_am_set_uid3(xdrs, &objp->uid))
1724    return FALSE;
1725  if (!xdr_am_set_gid3(xdrs, &objp->gid))
1726    return FALSE;
1727  if (!xdr_am_set_size3(xdrs, &objp->size))
1728     return FALSE;
1729  if (!xdr_am_set_atime(xdrs, &objp->atime))
1730    return FALSE;
1731  if (!xdr_am_set_mtime(xdrs, &objp->mtime))
1732    return FALSE;
1733  return TRUE;
1734}
1735
1736bool_t
1737xdr_am_createmode3(XDR *xdrs, am_createmode3 *objp)
1738{
1739  if (amuDebug(D_XDRTRACE))
1740    plog(XLOG_DEBUG, "xdr_am_createmode3:");
1741
1742  if (!xdr_enum(xdrs, (enum_t *) objp))
1743    return FALSE;
1744  return TRUE;
1745}
1746
1747bool_t
1748xdr_am_createverf3(XDR *xdrs, am_createverf3 objp)
1749{
1750  if (amuDebug(D_XDRTRACE))
1751    plog(XLOG_DEBUG, "xdr_am_createverf3:");
1752
1753  if (!xdr_opaque(xdrs, objp, AM_NFS3_CREATEVERFSIZE))
1754    return FALSE;
1755  return TRUE;
1756}
1757
1758bool_t
1759xdr_am_createhow3(XDR *xdrs, am_createhow3 *objp)
1760{
1761  if (amuDebug(D_XDRTRACE))
1762    plog(XLOG_DEBUG, "xdr_am_createhow3:");
1763
1764   if (!xdr_am_createmode3(xdrs, &objp->mode))
1765     return FALSE;
1766  switch (objp->mode) {
1767  case AM_UNCHECKED:
1768    if (!xdr_am_sattr3(xdrs, &objp->am_createhow3_u.obj_attributes))
1769      return FALSE;
1770    break;
1771  case AM_GUARDED:
1772    if (!xdr_am_sattr3(xdrs, &objp->am_createhow3_u.g_obj_attributes))
1773      return FALSE;
1774    break;
1775  case AM_EXCLUSIVE:
1776    if (!xdr_am_createverf3(xdrs, objp->am_createhow3_u.verf))
1777      return FALSE;
1778    break;
1779  default:
1780    return FALSE;
1781  }
1782  return TRUE;
1783}
1784
1785bool_t
1786xdr_am_CREATE3args(XDR *xdrs, am_CREATE3args *objp)
1787{
1788  if (amuDebug(D_XDRTRACE))
1789    plog(XLOG_DEBUG, "xdr_am_CREATE3args:");
1790
1791  if (!xdr_am_diropargs3(xdrs, &objp->where))
1792    return FALSE;
1793  if (!xdr_am_createhow3(xdrs, &objp->how))
1794    return FALSE;
1795  return TRUE;
1796}
1797
1798bool_t
1799xdr_am_post_op_fh3(XDR *xdrs, am_post_op_fh3 *objp)
1800{
1801  if (amuDebug(D_XDRTRACE))
1802    plog(XLOG_DEBUG, "xdr_am_post_op_fh3:");
1803
1804  if (!xdr_bool(xdrs, &objp->handle_follows))
1805    return FALSE;
1806  switch (objp->handle_follows) {
1807  case TRUE:
1808    if (!xdr_am_nfs_fh3(xdrs, &objp->am_post_op_fh3_u.handle))
1809      return FALSE;
1810    break;
1811  case FALSE:
1812    break;
1813  default:
1814    return FALSE;
1815  }
1816  return TRUE;
1817}
1818
1819bool_t
1820xdr_am_CREATE3resok(XDR *xdrs, am_CREATE3resok *objp)
1821{
1822  if (amuDebug(D_XDRTRACE))
1823    plog(XLOG_DEBUG, "xdr_am_CREATE3resok:");
1824
1825  if (!xdr_am_post_op_fh3(xdrs, &objp->obj))
1826    return FALSE;
1827  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
1828    return FALSE;
1829  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
1830    return FALSE;
1831  return TRUE;
1832}
1833
1834bool_t
1835xdr_am_CREATE3resfail(XDR *xdrs, am_CREATE3resfail *objp)
1836{
1837  if (amuDebug(D_XDRTRACE))
1838    plog(XLOG_DEBUG, "xdr_am_CREATE3resfail:");
1839
1840  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
1841    return FALSE;
1842  return TRUE;
1843}
1844
1845bool_t
1846xdr_am_CREATE3res(XDR *xdrs, am_CREATE3res *objp)
1847{
1848  if (amuDebug(D_XDRTRACE))
1849    plog(XLOG_DEBUG, "xdr_am_CREATE3res:");
1850
1851  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1852    return FALSE;
1853  switch (objp->status) {
1854  case AM_NFS3_OK:
1855    if (!xdr_am_CREATE3resok(xdrs, &objp->res_u.ok))
1856      return FALSE;
1857    break;
1858  default:
1859    if (!xdr_am_CREATE3resfail(xdrs, &objp->res_u.fail))
1860      return FALSE;
1861    break;
1862  }
1863  return TRUE;
1864}
1865
1866bool_t
1867xdr_am_REMOVE3args(XDR *xdrs, am_REMOVE3args *objp)
1868{
1869  if (amuDebug(D_XDRTRACE))
1870    plog(XLOG_DEBUG, "xdr_am_REMOVE3args:");
1871
1872  if (!xdr_am_diropargs3(xdrs, &objp->object))
1873    return FALSE;
1874  return TRUE;
1875}
1876
1877bool_t
1878xdr_am_REMOVE3resok(XDR *xdrs, am_REMOVE3resok *objp)
1879{
1880  if (amuDebug(D_XDRTRACE))
1881    plog(XLOG_DEBUG, "xdr_am_REMOVE3resok:");
1882
1883  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
1884    return FALSE;
1885  return TRUE;
1886}
1887
1888bool_t
1889xdr_am_REMOVE3resfail(XDR *xdrs, am_REMOVE3resfail *objp)
1890{
1891  if (amuDebug(D_XDRTRACE))
1892    plog(XLOG_DEBUG, "xdr_am_REMOVE3resfail:");
1893
1894  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
1895    return FALSE;
1896  return TRUE;
1897}
1898
1899bool_t
1900xdr_am_REMOVE3res(XDR *xdrs, am_REMOVE3res *objp)
1901{
1902  if (amuDebug(D_XDRTRACE))
1903    plog(XLOG_DEBUG, "xdr_am_REMOVE3res:");
1904
1905  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1906    return FALSE;
1907  switch (objp->status) {
1908  case AM_NFS3_OK:
1909    if (!xdr_am_REMOVE3resok(xdrs, &objp->res_u.ok))
1910      return FALSE;
1911    break;
1912  default:
1913    if (!xdr_am_REMOVE3resfail(xdrs, &objp->res_u.fail))
1914      return FALSE;
1915    break;
1916  }
1917  return TRUE;
1918}
1919
1920bool_t
1921xdr_am_READ3args(XDR *xdrs, am_READ3args *objp)
1922{
1923  if (amuDebug(D_XDRTRACE))
1924    plog(XLOG_DEBUG, "xdr_am_READ3args:");
1925
1926  if (!xdr_am_nfs_fh3(xdrs, &objp->file))
1927    return FALSE;
1928  if (!xdr_am_offset3(xdrs, &objp->offset))
1929    return FALSE;
1930  if (!xdr_am_count3(xdrs, &objp->count))
1931    return FALSE;
1932  return TRUE;
1933}
1934
1935bool_t
1936xdr_am_READ3resok(XDR *xdrs, am_READ3resok *objp)
1937{
1938  if (amuDebug(D_XDRTRACE))
1939    plog(XLOG_DEBUG, "xdr_am_READ3resok:");
1940
1941  if (!xdr_am_post_op_attr(xdrs, &objp->file_attributes))
1942    return FALSE;
1943  if (!xdr_am_count3(xdrs, &objp->count))
1944    return FALSE;
1945  if (!xdr_bool(xdrs, &objp->eof))
1946    return FALSE;
1947  if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *) &objp->data.data_len, ~0))
1948    return FALSE;
1949  return TRUE;
1950}
1951
1952bool_t
1953xdr_am_READ3resfail(XDR *xdrs, am_READ3resfail *objp)
1954{
1955  if (amuDebug(D_XDRTRACE))
1956    plog(XLOG_DEBUG, "xdr_am_READ3resfail:");
1957
1958  if (!xdr_am_post_op_attr(xdrs, &objp->file_attributes))
1959    return FALSE;
1960  return TRUE;
1961}
1962
1963bool_t
1964xdr_am_READ3res(XDR *xdrs, am_READ3res *objp)
1965{
1966  if (amuDebug(D_XDRTRACE))
1967    plog(XLOG_DEBUG, "xdr_am_READ3res:");
1968
1969  if (!xdr_am_nfsstat3(xdrs, &objp->status))
1970    return FALSE;
1971  switch (objp->status) {
1972  case AM_NFS3_OK:
1973    if (!xdr_am_READ3resok(xdrs, &objp->res_u.ok))
1974      return FALSE;
1975    break;
1976  default:
1977    if (!xdr_am_READ3resfail(xdrs, &objp->res_u.fail))
1978      return FALSE;
1979    break;
1980  }
1981  return TRUE;
1982}
1983
1984bool_t
1985xdr_am_FSINFO3args(XDR *xdrs, am_FSINFO3args *objp)
1986{
1987  if (amuDebug(D_XDRTRACE))
1988    plog(XLOG_DEBUG, "xdr_am_FSINFO3args:");
1989
1990  if (!xdr_am_nfs_fh3(xdrs, &objp->fsroot))
1991    return FALSE;
1992  return TRUE;
1993}
1994
1995bool_t
1996xdr_am_FSINFO3resok(XDR *xdrs, am_FSINFO3resok *objp)
1997{
1998  register int32_t *buf;
1999
2000  if (amuDebug(D_XDRTRACE))
2001    plog(XLOG_DEBUG, "xdr_am_FSINFO3resok:");
2002
2003  if (xdrs->x_op == XDR_ENCODE) {
2004    if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2005      return FALSE;
2006    buf = XDR_INLINE(xdrs, 7 * BYTES_PER_XDR_UNIT);
2007    if (buf == NULL) {
2008      if (!xdr_u_int(xdrs, &objp->rtmax))
2009        return FALSE;
2010      if (!xdr_u_int(xdrs, &objp->rtpref))
2011        return FALSE;
2012      if (!xdr_u_int(xdrs, &objp->rtmult))
2013        return FALSE;
2014      if (!xdr_u_int(xdrs, &objp->wtmax))
2015        return FALSE;
2016      if (!xdr_u_int(xdrs, &objp->wtpref))
2017        return FALSE;
2018      if (!xdr_u_int(xdrs, &objp->wtmult))
2019        return FALSE;
2020      if (!xdr_u_int(xdrs, &objp->dtpref))
2021        return FALSE;
2022    } else {
2023      IXDR_PUT_U_LONG(buf, objp->rtmax);
2024      IXDR_PUT_U_LONG(buf, objp->rtpref);
2025      IXDR_PUT_U_LONG(buf, objp->rtmult);
2026      IXDR_PUT_U_LONG(buf, objp->wtmax);
2027      IXDR_PUT_U_LONG(buf, objp->wtpref);
2028      IXDR_PUT_U_LONG(buf, objp->wtmult);
2029      IXDR_PUT_U_LONG(buf, objp->dtpref);
2030    }
2031    if (!xdr_am_size3(xdrs, &objp->maxfilesize))
2032      return FALSE;
2033    if (!xdr_am_nfstime3(xdrs, &objp->time_delta))
2034      return FALSE;
2035    if (!xdr_u_int(xdrs, &objp->properties))
2036      return FALSE;
2037    return TRUE;
2038  } else if (xdrs->x_op == XDR_DECODE) {
2039    if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2040      return FALSE;
2041    buf = XDR_INLINE(xdrs, 7 * BYTES_PER_XDR_UNIT);
2042    if (buf == NULL) {
2043      if (!xdr_u_int (xdrs, &objp->rtmax))
2044        return FALSE;
2045      if (!xdr_u_int (xdrs, &objp->rtpref))
2046        return FALSE;
2047      if (!xdr_u_int (xdrs, &objp->rtmult))
2048        return FALSE;
2049      if (!xdr_u_int (xdrs, &objp->wtmax))
2050        return FALSE;
2051      if (!xdr_u_int(xdrs, &objp->wtpref))
2052        return FALSE;
2053      if (!xdr_u_int(xdrs, &objp->wtmult))
2054        return FALSE;
2055      if (!xdr_u_int(xdrs, &objp->dtpref))
2056        return FALSE;
2057    } else {
2058      objp->rtmax = IXDR_GET_U_LONG(buf);
2059      objp->rtpref = IXDR_GET_U_LONG(buf);
2060      objp->rtmult = IXDR_GET_U_LONG(buf);
2061      objp->wtmax = IXDR_GET_U_LONG(buf);
2062      objp->wtpref = IXDR_GET_U_LONG(buf);
2063      objp->wtmult = IXDR_GET_U_LONG(buf);
2064      objp->dtpref = IXDR_GET_U_LONG(buf);
2065    }
2066    if (!xdr_am_size3(xdrs, &objp->maxfilesize))
2067      return FALSE;
2068    if (!xdr_am_nfstime3(xdrs, &objp->time_delta))
2069      return FALSE;
2070    if (!xdr_u_int(xdrs, &objp->properties))
2071      return FALSE;
2072    return TRUE;
2073  }
2074
2075  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2076    return FALSE;
2077  if (!xdr_u_int(xdrs, &objp->rtmax))
2078    return FALSE;
2079  if (!xdr_u_int(xdrs, &objp->rtpref))
2080    return FALSE;
2081  if (!xdr_u_int(xdrs, &objp->rtmult))
2082    return FALSE;
2083  if (!xdr_u_int(xdrs, &objp->wtmax))
2084    return FALSE;
2085  if (!xdr_u_int(xdrs, &objp->wtpref))
2086    return FALSE;
2087  if (!xdr_u_int(xdrs, &objp->wtmult))
2088    return FALSE;
2089  if (!xdr_u_int(xdrs, &objp->dtpref))
2090   return FALSE;
2091  if (!xdr_am_size3(xdrs, &objp->maxfilesize))
2092    return FALSE;
2093  if (!xdr_am_nfstime3(xdrs, &objp->time_delta))
2094    return FALSE;
2095  if (!xdr_u_int(xdrs, &objp->properties))
2096    return FALSE;
2097  return TRUE;
2098}
2099
2100bool_t
2101xdr_am_FSINFO3resfail(XDR *xdrs, am_FSINFO3resfail *objp)
2102{
2103  if (amuDebug(D_XDRTRACE))
2104    plog(XLOG_DEBUG, "xdr_am_FSINFO3resfail:");
2105
2106  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2107    return FALSE;
2108  return TRUE;
2109}
2110
2111bool_t
2112xdr_am_FSINFO3res(XDR *xdrs, am_FSINFO3res *objp)
2113{
2114  if (amuDebug(D_XDRTRACE))
2115    plog(XLOG_DEBUG, "xdr_am_FSINFO3res:");
2116
2117  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2118    return FALSE;
2119  switch (objp->status) {
2120  case AM_NFS3_OK:
2121    if (!xdr_am_FSINFO3resok(xdrs, &objp->res_u.ok))
2122      return FALSE;
2123    break;
2124  default:
2125    if (!xdr_am_FSINFO3resfail(xdrs, &objp->res_u.fail))
2126      return FALSE;
2127    break;
2128  }
2129  return TRUE;
2130}
2131
2132bool_t
2133xdr_am_FSSTAT3args(XDR *xdrs, am_FSSTAT3args *objp)
2134{
2135  if (amuDebug(D_XDRTRACE))
2136    plog(XLOG_DEBUG, "xdr_am_FSSTAT3args:");
2137
2138  if (!xdr_am_nfs_fh3(xdrs, &objp->fsroot))
2139    return FALSE;
2140  return TRUE;
2141}
2142
2143bool_t
2144xdr_am_FSSTAT3resok(XDR *xdrs, am_FSSTAT3resok *objp)
2145{
2146  if (amuDebug(D_XDRTRACE))
2147    plog(XLOG_DEBUG, "xdr_am_FSSTAT3resok:");
2148
2149  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2150    return FALSE;
2151  if (!xdr_am_size3(xdrs, &objp->tbytes))
2152    return FALSE;
2153  if (!xdr_am_size3(xdrs, &objp->fbytes))
2154    return FALSE;
2155  if (!xdr_am_size3(xdrs, &objp->abytes))
2156    return FALSE;
2157  if (!xdr_am_size3(xdrs, &objp->tfiles))
2158    return FALSE;
2159  if (!xdr_am_size3(xdrs, &objp->ffiles))
2160    return FALSE;
2161  if (!xdr_am_size3(xdrs, &objp->afiles))
2162    return FALSE;
2163  if (!xdr_u_int(xdrs, &objp->invarsec))
2164    return FALSE;
2165  return TRUE;
2166}
2167
2168bool_t
2169xdr_am_FSSTAT3resfail(XDR *xdrs, am_FSSTAT3resfail *objp)
2170{
2171  if (amuDebug(D_XDRTRACE))
2172    plog(XLOG_DEBUG, "xdr_am_FSSTAT3resfail:");
2173
2174  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2175    return FALSE;
2176  return TRUE;
2177}
2178
2179bool_t
2180xdr_am_FSSTAT3res(XDR *xdrs, am_FSSTAT3res *objp)
2181{
2182  if (amuDebug(D_XDRTRACE))
2183    plog(XLOG_DEBUG, "xdr_am_FSSTAT3res:");
2184
2185  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2186    return FALSE;
2187  switch (objp->status) {
2188  case AM_NFS3_OK:
2189    if (!xdr_am_FSSTAT3resok(xdrs, &objp->res_u.ok))
2190      return FALSE;
2191    break;
2192  default:
2193    if (!xdr_am_FSSTAT3resfail(xdrs, &objp->res_u.fail))
2194      return FALSE;
2195    break;
2196  }
2197  return TRUE;
2198}
2199
2200bool_t
2201xdr_am_PATHCONF3args(XDR *xdrs, am_PATHCONF3args *objp)
2202{
2203  if (amuDebug(D_XDRTRACE))
2204    plog(XLOG_DEBUG, "xdr_am_PATHCONF3args:");
2205
2206  if (!xdr_am_nfs_fh3(xdrs, &objp->object))
2207    return FALSE;
2208  return TRUE;
2209}
2210
2211bool_t
2212xdr_am_PATHCONF3resok(XDR *xdrs, am_PATHCONF3resok *objp)
2213{
2214  register int32_t *buf;
2215
2216  if (amuDebug(D_XDRTRACE))
2217    plog(XLOG_DEBUG, "xdr_am_PATHCONF3resok:");
2218
2219  if (xdrs->x_op == XDR_ENCODE) {
2220    if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2221      return FALSE;
2222    buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
2223    if (buf == NULL) {
2224      if (!xdr_u_int(xdrs, &objp->linkmax))
2225        return FALSE;
2226      if (!xdr_u_int(xdrs, &objp->name_max))
2227        return FALSE;
2228      if (!xdr_bool(xdrs, &objp->no_trunc))
2229        return FALSE;
2230      if (!xdr_bool(xdrs, &objp->chown_restricted))
2231        return FALSE;
2232      if (!xdr_bool(xdrs, &objp->case_insensitive))
2233        return FALSE;
2234      if (!xdr_bool(xdrs, &objp->case_preserving))
2235        return FALSE;
2236    } else {
2237      IXDR_PUT_U_LONG(buf, objp->linkmax);
2238      IXDR_PUT_U_LONG(buf, objp->name_max);
2239      IXDR_PUT_BOOL(buf, objp->no_trunc);
2240      IXDR_PUT_BOOL(buf, objp->chown_restricted);
2241      IXDR_PUT_BOOL(buf, objp->case_insensitive);
2242      IXDR_PUT_BOOL(buf, objp->case_preserving);
2243    }
2244    return TRUE;
2245  } else if (xdrs->x_op == XDR_DECODE) {
2246    if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2247      return FALSE;
2248    buf = XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT);
2249    if (buf == NULL) {
2250      if (!xdr_u_int(xdrs, &objp->linkmax))
2251        return FALSE;
2252      if (!xdr_u_int(xdrs, &objp->name_max))
2253        return FALSE;
2254      if (!xdr_bool(xdrs, &objp->no_trunc))
2255        return FALSE;
2256      if (!xdr_bool(xdrs, &objp->chown_restricted))
2257        return FALSE;
2258      if (!xdr_bool(xdrs, &objp->case_insensitive))
2259        return FALSE;
2260      if (!xdr_bool(xdrs, &objp->case_preserving))
2261        return FALSE;
2262    } else {
2263      objp->linkmax = IXDR_GET_U_LONG(buf);
2264      objp->name_max = IXDR_GET_U_LONG(buf);
2265      objp->no_trunc = IXDR_GET_BOOL(buf);
2266      objp->chown_restricted = IXDR_GET_BOOL(buf);
2267      objp->case_insensitive = IXDR_GET_BOOL(buf);
2268      objp->case_preserving = IXDR_GET_BOOL(buf);
2269    }
2270    return TRUE;
2271  }
2272
2273  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2274    return FALSE;
2275  if (!xdr_u_int(xdrs, &objp->linkmax))
2276    return FALSE;
2277  if (!xdr_u_int(xdrs, &objp->name_max))
2278    return FALSE;
2279  if (!xdr_bool(xdrs, &objp->no_trunc))
2280    return FALSE;
2281  if (!xdr_bool(xdrs, &objp->chown_restricted))
2282    return FALSE;
2283  if (!xdr_bool(xdrs, &objp->case_insensitive))
2284    return FALSE;
2285  if (!xdr_bool(xdrs, &objp->case_preserving))
2286    return FALSE;
2287  return TRUE;
2288}
2289
2290bool_t
2291xdr_am_PATHCONF3resfail(XDR *xdrs, am_PATHCONF3resfail *objp)
2292{
2293  if (amuDebug(D_XDRTRACE))
2294    plog(XLOG_DEBUG, "xdr_am_PATHCONF3resfail:");
2295
2296  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2297    return FALSE;
2298  return TRUE;
2299}
2300
2301bool_t
2302xdr_am_PATHCONF3res(XDR *xdrs, am_PATHCONF3res *objp)
2303{
2304  if (amuDebug(D_XDRTRACE))
2305    plog(XLOG_DEBUG, "xdr_am_PATHCONF3res:");
2306
2307  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2308    return FALSE;
2309  switch (objp->status) {
2310  case AM_NFS3_OK:
2311    if (!xdr_am_PATHCONF3resok(xdrs, &objp->res_u.ok))
2312      return FALSE;
2313    break;
2314  default:
2315    if (!xdr_am_PATHCONF3resfail(xdrs, &objp->res_u.fail))
2316      return FALSE;
2317    break;
2318  }
2319  return TRUE;
2320}
2321
2322bool_t
2323xdr_am_nfspath3(XDR *xdrs, am_nfspath3 *objp)
2324{
2325  if (amuDebug(D_XDRTRACE))
2326    plog(XLOG_DEBUG, "xdr_am_nfspath3:");
2327
2328  if (!xdr_string(xdrs, objp, ~0))
2329    return FALSE;
2330  return TRUE;
2331}
2332
2333bool_t
2334xdr_am_symlinkdata3(XDR *xdrs, am_symlinkdata3 *objp)
2335{
2336  if (amuDebug(D_XDRTRACE))
2337    plog(XLOG_DEBUG, "xdr_am_symlinkdata3:");
2338
2339  if (!xdr_am_sattr3(xdrs, &objp->symlink_attributes))
2340    return FALSE;
2341  if (!xdr_am_nfspath3(xdrs, &objp->symlink_data))
2342    return FALSE;
2343  return TRUE;
2344}
2345
2346bool_t
2347xdr_am_SYMLINK3args(XDR *xdrs, am_SYMLINK3args *objp)
2348{
2349  if (amuDebug(D_XDRTRACE))
2350    plog(XLOG_DEBUG, "xdr_am_SYMLINK3args:");
2351
2352  if (!xdr_am_diropargs3(xdrs, &objp->where))
2353    return FALSE;
2354  if (!xdr_am_symlinkdata3(xdrs, &objp->symlink))
2355    return FALSE;
2356  return TRUE;
2357}
2358
2359bool_t
2360xdr_am_SYMLINK3resok(XDR *xdrs, am_SYMLINK3resok *objp)
2361{
2362  if (amuDebug(D_XDRTRACE))
2363    plog(XLOG_DEBUG, "xdr_am_SYMLINK3resok:");
2364
2365  if (!xdr_am_post_op_fh3(xdrs, &objp->obj))
2366    return FALSE;
2367  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2368    return FALSE;
2369  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2370    return FALSE;
2371  return TRUE;
2372}
2373
2374bool_t
2375xdr_am_SYMLINK3resfail(XDR *xdrs, am_SYMLINK3resfail *objp)
2376{
2377  if (amuDebug(D_XDRTRACE))
2378    plog(XLOG_DEBUG, "xdr_am_SYMLINK3resfail:");
2379
2380  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2381    return FALSE;
2382  return TRUE;
2383}
2384
2385bool_t
2386xdr_am_SYMLINK3res(XDR *xdrs, am_SYMLINK3res *objp)
2387{
2388  if (amuDebug(D_XDRTRACE))
2389    plog(XLOG_DEBUG, "xdr_am_SYMLINK3res:");
2390
2391  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2392    return FALSE;
2393  switch (objp->status) {
2394  case AM_NFS3_OK:
2395    if (!xdr_am_SYMLINK3resok(xdrs, &objp->res_u.ok))
2396      return FALSE;
2397    break;
2398  default:
2399    if (!xdr_am_SYMLINK3resfail(xdrs, &objp->res_u.fail))
2400      return FALSE;
2401    break;
2402  }
2403  return TRUE;
2404}
2405
2406bool_t
2407xdr_am_READLINK3args(XDR *xdrs, am_READLINK3args *objp)
2408{
2409  if (amuDebug(D_XDRTRACE))
2410    plog(XLOG_DEBUG, "xdr_am_READLINK3args:");
2411
2412  if (!xdr_am_nfs_fh3(xdrs, &objp->symlink))
2413    return FALSE;
2414  return TRUE;
2415}
2416
2417bool_t
2418xdr_am_READLINK3resok(XDR *xdrs, am_READLINK3resok *objp)
2419{
2420  if (amuDebug(D_XDRTRACE))
2421    plog(XLOG_DEBUG, "xdr_am_READLINK3resok:");
2422
2423  if (!xdr_am_post_op_attr(xdrs, &objp->symlink_attributes))
2424    return FALSE;
2425  if (!xdr_am_nfspath3(xdrs, &objp->data))
2426    return FALSE;
2427  return TRUE;
2428}
2429
2430bool_t
2431xdr_am_READLINK3resfail(XDR *xdrs, am_READLINK3resfail *objp)
2432{
2433  if (amuDebug(D_XDRTRACE))
2434    plog(XLOG_DEBUG, "xdr_am_READLINK3resfail:");
2435
2436  if (!xdr_am_post_op_attr(xdrs, &objp->symlink_attributes))
2437    return FALSE;
2438  return TRUE;
2439}
2440
2441bool_t
2442xdr_am_READLINK3res(XDR *xdrs, am_READLINK3res *objp)
2443{
2444  if (amuDebug(D_XDRTRACE))
2445    plog(XLOG_DEBUG, "xdr_am_READLINK3res:");
2446
2447  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2448    return FALSE;
2449  switch (objp->status) {
2450  case AM_NFS3_OK:
2451    if (!xdr_am_READLINK3resok(xdrs, &objp->res_u.ok))
2452      return FALSE;
2453    break;
2454  default:
2455    if (!xdr_am_READLINK3resfail(xdrs, &objp->res_u.fail))
2456      return FALSE;
2457    break;
2458  }
2459  return TRUE;
2460}
2461
2462bool_t
2463xdr_am_devicedata3(XDR *xdrs, am_devicedata3 *objp)
2464{
2465  if (amuDebug(D_XDRTRACE))
2466    plog(XLOG_DEBUG, "xdr_am_devicedata3:");
2467
2468  if (!xdr_am_sattr3(xdrs, &objp->dev_attributes))
2469    return FALSE;
2470  if (!xdr_am_specdata3(xdrs, &objp->spec))
2471    return FALSE;
2472  return TRUE;
2473}
2474
2475bool_t
2476xdr_am_mknoddata3(XDR *xdrs, am_mknoddata3 *objp)
2477{
2478  if (amuDebug(D_XDRTRACE))
2479    plog(XLOG_DEBUG, "xdr_am_mknoddata3:");
2480
2481  if (!xdr_am_ftype3(xdrs, &objp->type))
2482    return FALSE;
2483  switch (objp->type) {
2484  case AM_NF3CHR:
2485    if (!xdr_am_devicedata3(xdrs, &objp->am_mknoddata3_u.chr_device))
2486      return FALSE;
2487    break;
2488  case AM_NF3BLK:
2489    if (!xdr_am_devicedata3(xdrs, &objp->am_mknoddata3_u.blk_device))
2490      return FALSE;
2491    break;
2492  case AM_NF3SOCK:
2493    if (!xdr_am_sattr3(xdrs, &objp->am_mknoddata3_u.sock_attributes))
2494      return FALSE;
2495    break;
2496  case AM_NF3FIFO:
2497    if (!xdr_am_sattr3(xdrs, &objp->am_mknoddata3_u.pipe_attributes))
2498      return FALSE;
2499    break;
2500  default:
2501    break;
2502  }
2503  return TRUE;
2504}
2505
2506bool_t
2507xdr_am_MKNOD3args(XDR *xdrs, am_MKNOD3args *objp)
2508{
2509  if (amuDebug(D_XDRTRACE))
2510    plog(XLOG_DEBUG, "xdr_am_MKNOD3args:");
2511
2512  if (!xdr_am_diropargs3(xdrs, &objp->where))
2513    return FALSE;
2514  if (!xdr_am_mknoddata3(xdrs, &objp->what))
2515    return FALSE;
2516  return TRUE;
2517}
2518
2519bool_t
2520xdr_am_MKNOD3resok(XDR *xdrs, am_MKNOD3resok *objp)
2521{
2522  if (amuDebug(D_XDRTRACE))
2523    plog(XLOG_DEBUG, "xdr_am_MKNOD3resok:");
2524
2525  if (!xdr_am_post_op_fh3(xdrs, &objp->obj))
2526    return FALSE;
2527  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2528    return FALSE;
2529  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2530    return FALSE;
2531  return TRUE;
2532}
2533
2534bool_t
2535xdr_am_MKNOD3resfail(XDR *xdrs, am_MKNOD3resfail *objp)
2536{
2537  if (amuDebug(D_XDRTRACE))
2538    plog(XLOG_DEBUG, "xdr_am_MKNOD3resfail:");
2539
2540  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2541    return FALSE;
2542  return TRUE;
2543}
2544
2545bool_t
2546xdr_am_MKNOD3res(XDR *xdrs, am_MKNOD3res *objp)
2547{
2548  if (amuDebug(D_XDRTRACE))
2549    plog(XLOG_DEBUG, ":");
2550
2551  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2552    return FALSE;
2553  switch (objp->status) {
2554  case AM_NFS3_OK:
2555    if (!xdr_am_MKNOD3resok(xdrs, &objp->res_u.ok))
2556      return FALSE;
2557    break;
2558  default:
2559    if (!xdr_am_MKNOD3resfail(xdrs, &objp->res_u.fail))
2560      return FALSE;
2561    break;
2562  }
2563  return TRUE;
2564}
2565
2566bool_t
2567xdr_am_MKDIR3args(XDR *xdrs, am_MKDIR3args *objp)
2568{
2569  if (amuDebug(D_XDRTRACE))
2570    plog(XLOG_DEBUG, ":");
2571
2572  if (!xdr_am_diropargs3(xdrs, &objp->where))
2573    return FALSE;
2574  if (!xdr_am_sattr3(xdrs, &objp->attributes))
2575    return FALSE;
2576  return TRUE;
2577}
2578
2579bool_t
2580xdr_am_MKDIR3resok(XDR *xdrs, am_MKDIR3resok *objp)
2581{
2582  if (amuDebug(D_XDRTRACE))
2583    plog(XLOG_DEBUG, "xdr_am_MKDIR3resok:");
2584
2585  if (!xdr_am_post_op_fh3(xdrs, &objp->obj))
2586    return FALSE;
2587  if (!xdr_am_post_op_attr(xdrs, &objp->obj_attributes))
2588    return FALSE;
2589  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2590    return FALSE;
2591  return TRUE;
2592}
2593
2594bool_t
2595xdr_am_MKDIR3resfail(XDR *xdrs, am_MKDIR3resfail *objp)
2596{
2597  if (amuDebug(D_XDRTRACE))
2598    plog(XLOG_DEBUG, "xdr_am_MKDIR3resfail:");
2599
2600  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2601    return FALSE;
2602  return TRUE;
2603}
2604
2605bool_t
2606xdr_am_MKDIR3res(XDR *xdrs, am_MKDIR3res *objp)
2607{
2608  if (amuDebug(D_XDRTRACE))
2609    plog(XLOG_DEBUG, "xdr_am_MKDIR3res:");
2610
2611  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2612    return FALSE;
2613  switch (objp->status) {
2614  case AM_NFS3_OK:
2615    if (!xdr_am_MKDIR3resok(xdrs, &objp->res_u.ok))
2616      return FALSE;
2617    break;
2618  default:
2619    if (!xdr_am_MKDIR3resfail(xdrs, &objp->res_u.fail))
2620      return FALSE;
2621    break;
2622  }
2623  return TRUE;
2624}
2625
2626bool_t
2627xdr_am_RMDIR3args(XDR *xdrs, am_RMDIR3args *objp)
2628{
2629  if (amuDebug(D_XDRTRACE))
2630    plog(XLOG_DEBUG, "xdr_am_RMDIR3args:");
2631
2632  if (!xdr_am_diropargs3(xdrs, &objp->object))
2633    return FALSE;
2634  return TRUE;
2635}
2636
2637bool_t
2638xdr_am_RMDIR3resok(XDR *xdrs, am_RMDIR3resok *objp)
2639{
2640  if (amuDebug(D_XDRTRACE))
2641    plog(XLOG_DEBUG, "xdr_am_RMDIR3resok:");
2642
2643  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2644    return FALSE;
2645  return TRUE;
2646}
2647
2648bool_t
2649xdr_am_RMDIR3resfail(XDR *xdrs, am_RMDIR3resfail *objp)
2650{
2651  if (amuDebug(D_XDRTRACE))
2652    plog(XLOG_DEBUG, "xdr_am_RMDIR3resfail:");
2653
2654  if (!xdr_am_wcc_data(xdrs, &objp->dir_wcc))
2655    return FALSE;
2656  return TRUE;
2657}
2658
2659bool_t
2660xdr_am_RMDIR3res(XDR *xdrs, am_RMDIR3res *objp)
2661{
2662  if (amuDebug(D_XDRTRACE))
2663    plog(XLOG_DEBUG, "xdr_am_RMDIR3res:");
2664
2665  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2666    return FALSE;
2667  switch (objp->status) {
2668  case AM_NFS3_OK:
2669    if (!xdr_am_RMDIR3resok(xdrs, &objp->res_u.ok))
2670      return FALSE;
2671    break;
2672  default:
2673    if (!xdr_am_RMDIR3resfail(xdrs, &objp->res_u.fail))
2674      return FALSE;
2675    break;
2676  }
2677  return TRUE;
2678}
2679
2680bool_t
2681xdr_am_RENAME3args(XDR *xdrs, am_RENAME3args *objp)
2682{
2683  if (amuDebug(D_XDRTRACE))
2684    plog(XLOG_DEBUG, "xdr_am_RENAME3args:");
2685
2686  if (!xdr_am_diropargs3(xdrs, &objp->from))
2687    return FALSE;
2688  if (!xdr_am_diropargs3(xdrs, &objp->to))
2689    return FALSE;
2690  return TRUE;
2691}
2692
2693bool_t
2694xdr_am_RENAME3resok(XDR *xdrs, am_RENAME3resok *objp)
2695{
2696  if (amuDebug(D_XDRTRACE))
2697    plog(XLOG_DEBUG, "xdr_am_RENAME3resok:");
2698
2699  if (!xdr_am_wcc_data(xdrs, &objp->fromdir_wcc))
2700    return FALSE;
2701  if (!xdr_am_wcc_data(xdrs, &objp->todir_wcc))
2702    return FALSE;
2703  return TRUE;
2704}
2705
2706bool_t
2707xdr_am_RENAME3resfail(XDR *xdrs, am_RENAME3resfail *objp)
2708{
2709  if (amuDebug(D_XDRTRACE))
2710    plog(XLOG_DEBUG, "xdr_am_RENAME3resfail:");
2711
2712  if (!xdr_am_wcc_data(xdrs, &objp->fromdir_wcc))
2713    return FALSE;
2714  if (!xdr_am_wcc_data(xdrs, &objp->todir_wcc))
2715    return FALSE;
2716  return TRUE;
2717}
2718
2719bool_t
2720xdr_am_RENAME3res(XDR *xdrs, am_RENAME3res *objp)
2721{
2722  if (amuDebug(D_XDRTRACE))
2723    plog(XLOG_DEBUG, "xdr_am_RENAME3res:");
2724
2725  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2726    return FALSE;
2727  switch (objp->status) {
2728  case AM_NFS3_OK:
2729    if (!xdr_am_RENAME3resok(xdrs, &objp->res_u.ok))
2730      return FALSE;
2731    break;
2732  default:
2733    if (!xdr_am_RENAME3resfail(xdrs, &objp->res_u.fail))
2734      return FALSE;
2735    break;
2736  }
2737  return TRUE;
2738}
2739
2740bool_t
2741xdr_am_READDIRPLUS3args(XDR *xdrs, am_READDIRPLUS3args *objp)
2742{
2743  if (amuDebug(D_XDRTRACE))
2744    plog(XLOG_DEBUG, "xdr_am_READDIRPLUS3args:");
2745
2746  if (!xdr_am_nfs_fh3(xdrs, &objp->dir))
2747    return FALSE;
2748  if (!xdr_am_cookie3(xdrs, &objp->cookie))
2749    return FALSE;
2750  if (!xdr_am_cookieverf3(xdrs, objp->cookieverf))
2751    return FALSE;
2752  if (!xdr_am_count3(xdrs, &objp->dircount))
2753    return FALSE;
2754  if (!xdr_am_count3(xdrs, &objp->maxcount))
2755    return FALSE;
2756  return TRUE;
2757}
2758
2759bool_t
2760xdr_am_entryplus3(XDR *xdrs, am_entryplus3 *objp)
2761{
2762  if (amuDebug(D_XDRTRACE))
2763    plog(XLOG_DEBUG, "xdr_am_entryplus3:");
2764
2765   if (!xdr_am_fileid3(xdrs, &objp->fileid))
2766     return FALSE;
2767   if (!xdr_am_filename3(xdrs, &objp->name))
2768     return FALSE;
2769   if (!xdr_am_cookie3(xdrs, &objp->cookie))
2770     return FALSE;
2771   if (!xdr_am_post_op_attr(xdrs, &objp->name_attributes))
2772     return FALSE;
2773   if (!xdr_am_post_op_fh3(xdrs, &objp->name_handle))
2774     return FALSE;
2775   if (!xdr_pointer(xdrs, (char **)&objp->nextentry,
2776                   sizeof(am_entryplus3), (xdrproc_t) xdr_am_entryplus3))
2777     return FALSE;
2778  return TRUE;
2779}
2780
2781bool_t
2782xdr_am_dirlistplus3(XDR *xdrs, am_dirlistplus3 *objp)
2783{
2784  if (amuDebug(D_XDRTRACE))
2785    plog(XLOG_DEBUG, "xdr_am_dirlistplus3:");
2786
2787  if (!xdr_pointer(xdrs, (char **)&objp->entries,
2788                   sizeof(am_entryplus3), (xdrproc_t) xdr_am_entryplus3))
2789    return FALSE;
2790  if (!xdr_bool(xdrs, &objp->eof))
2791    return FALSE;
2792  return TRUE;
2793}
2794
2795bool_t
2796xdr_am_READDIRPLUS3resok(XDR *xdrs, am_READDIRPLUS3resok *objp)
2797{
2798  if (amuDebug(D_XDRTRACE))
2799    plog(XLOG_DEBUG, "xdr_am_READDIRPLUS3resok:");
2800
2801  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
2802    return FALSE;
2803  if (!xdr_am_cookieverf3(xdrs, objp->cookieverf))
2804    return FALSE;
2805  if (!xdr_am_dirlistplus3(xdrs, &objp->reply))
2806    return FALSE;
2807  return TRUE;
2808}
2809
2810bool_t
2811xdr_am_READDIRPLUS3resfail(XDR *xdrs, am_READDIRPLUS3resfail *objp)
2812{
2813  if (amuDebug(D_XDRTRACE))
2814    plog(XLOG_DEBUG, "xdr_am_READDIRPLUS3resfail:");
2815
2816  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
2817    return FALSE;
2818  return TRUE;
2819}
2820
2821bool_t
2822xdr_am_READDIRPLUS3res(XDR *xdrs, am_READDIRPLUS3res *objp)
2823{
2824  if (amuDebug(D_XDRTRACE))
2825    plog(XLOG_DEBUG, "xdr_am_READDIRPLUS3res:");
2826
2827  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2828    return FALSE;
2829  switch (objp->status) {
2830  case AM_NFS3_OK:
2831    if (!xdr_am_READDIRPLUS3resok(xdrs, &objp->res_u.ok))
2832      return FALSE;
2833    break;
2834  default:
2835    if (!xdr_am_READDIRPLUS3resfail(xdrs, &objp->res_u.fail))
2836      return FALSE;
2837    break;
2838  }
2839  return TRUE;
2840}
2841
2842bool_t
2843xdr_am_READDIR3args(XDR *xdrs, am_READDIR3args *objp)
2844{
2845  if (amuDebug(D_XDRTRACE))
2846    plog(XLOG_DEBUG, "xdr_am_READDIR3args:");
2847
2848  if (!xdr_am_nfs_fh3(xdrs, &objp->dir))
2849    return FALSE;
2850  if (!xdr_am_cookie3(xdrs, &objp->cookie))
2851    return FALSE;
2852  if (!xdr_am_cookieverf3(xdrs, objp->cookieverf))
2853    return FALSE;
2854  if (!xdr_am_count3(xdrs, &objp->count))
2855    return FALSE;
2856  return TRUE;
2857}
2858
2859bool_t
2860xdr_am_entry3(XDR *xdrs, am_entry3 *objp)
2861{
2862  if (amuDebug(D_XDRTRACE))
2863    plog(XLOG_DEBUG, "xdr_am_entry3:");
2864
2865  if (!xdr_am_fileid3(xdrs, &objp->fileid))
2866    return FALSE;
2867  if (!xdr_am_filename3(xdrs, &objp->name))
2868    return FALSE;
2869  if (!xdr_am_cookie3(xdrs, &objp->cookie))
2870    return FALSE;
2871  if (!xdr_pointer(xdrs, (char **)&objp->nextentry,
2872                   sizeof(am_entry3), (xdrproc_t) xdr_am_entry3))
2873    return FALSE;
2874  return TRUE;
2875}
2876
2877bool_t
2878xdr_am_dirlist3(XDR *xdrs, am_dirlist3 *objp)
2879{
2880  if (amuDebug(D_XDRTRACE))
2881    plog(XLOG_DEBUG, "xdr_am_dirlist3:");
2882
2883  if (!xdr_pointer(xdrs, (char **)&objp->entries,
2884                   sizeof(am_entry3), (xdrproc_t) xdr_am_entry3))
2885    return FALSE;
2886  if (!xdr_bool (xdrs, &objp->eof))
2887    return FALSE;
2888  return TRUE;
2889}
2890
2891bool_t
2892xdr_am_READDIR3resok(XDR *xdrs, am_READDIR3resok *objp)
2893{
2894  if (amuDebug(D_XDRTRACE))
2895    plog(XLOG_DEBUG, "xdr_am_READDIR3resok:");
2896
2897  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
2898    return FALSE;
2899  if (!xdr_am_cookieverf3(xdrs, objp->cookieverf))
2900    return FALSE;
2901  if (!xdr_am_dirlist3(xdrs, &objp->reply))
2902    return FALSE;
2903  return TRUE;
2904}
2905
2906bool_t
2907xdr_am_READDIR3resfail(XDR *xdrs, am_READDIR3resfail *objp)
2908{
2909  if (amuDebug(D_XDRTRACE))
2910    plog(XLOG_DEBUG, "xdr_am_READDIR3resfail:");
2911
2912  if (!xdr_am_post_op_attr(xdrs, &objp->dir_attributes))
2913    return FALSE;
2914  return TRUE;
2915}
2916
2917bool_t
2918xdr_am_READDIR3res(XDR *xdrs, am_READDIR3res *objp)
2919{
2920  if (amuDebug(D_XDRTRACE))
2921    plog(XLOG_DEBUG, "xdr_am_READDIR3res:");
2922
2923  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2924    return FALSE;
2925  switch (objp->status) {
2926  case AM_NFS3_OK:
2927    if (!xdr_am_READDIR3resok(xdrs, &objp->res_u.ok))
2928      return FALSE;
2929    break;
2930  default:
2931    if (!xdr_am_READDIR3resfail(xdrs, &objp->res_u.fail))
2932      return FALSE;
2933    break;
2934  }
2935  return TRUE;
2936}
2937
2938bool_t
2939xdr_am_LINK3args(XDR *xdrs, am_LINK3args *objp)
2940{
2941  if (amuDebug(D_XDRTRACE))
2942    plog(XLOG_DEBUG, "xdr_am_LINK3args:");
2943
2944  if (!xdr_am_nfs_fh3(xdrs, &objp->file))
2945    return FALSE;
2946  if (!xdr_am_diropargs3(xdrs, &objp->link))
2947    return FALSE;
2948  return TRUE;
2949}
2950
2951bool_t
2952xdr_am_LINK3resok(XDR *xdrs, am_LINK3resok *objp)
2953{
2954  if (amuDebug(D_XDRTRACE))
2955    plog(XLOG_DEBUG, "xdr_am_LINK3resok:");
2956
2957  if (!xdr_am_post_op_attr(xdrs, &objp->file_attributes))
2958    return FALSE;
2959  if (!xdr_am_wcc_data(xdrs, &objp->linkdir_wcc))
2960    return FALSE;
2961  return TRUE;
2962}
2963
2964bool_t
2965xdr_am_LINK3resfail(XDR *xdrs, am_LINK3resfail *objp)
2966{
2967  if (amuDebug(D_XDRTRACE))
2968    plog(XLOG_DEBUG, "xdr_am_LINK3resfail:");
2969
2970  if (!xdr_am_post_op_attr(xdrs, &objp->file_attributes))
2971    return FALSE;
2972  if (!xdr_am_wcc_data(xdrs, &objp->linkdir_wcc))
2973    return FALSE;
2974  return TRUE;
2975}
2976
2977bool_t
2978xdr_am_LINK3res(XDR *xdrs, am_LINK3res *objp)
2979{
2980  if (amuDebug(D_XDRTRACE))
2981    plog(XLOG_DEBUG, "xdr_am_LINK3res:");
2982
2983  if (!xdr_am_nfsstat3(xdrs, &objp->status))
2984    return FALSE;
2985  switch (objp->status) {
2986  case AM_NFS3_OK:
2987    if (!xdr_am_LINK3resok(xdrs, &objp->res_u.ok))
2988      return FALSE;
2989    break;
2990  default:
2991    if (!xdr_am_LINK3resfail(xdrs, &objp->res_u.fail))
2992      return FALSE;
2993    break;
2994  }
2995  return TRUE;
2996}
2997
2998bool_t
2999xdr_am_sattrguard3(XDR *xdrs, am_sattrguard3 *objp)
3000{
3001  if (amuDebug(D_XDRTRACE))
3002    plog(XLOG_DEBUG, "xdr_am_sattrguard3:");
3003
3004  if (!xdr_bool(xdrs, &objp->check))
3005    return FALSE;
3006  switch (objp->check) {
3007  case TRUE:
3008    if (!xdr_am_nfstime3(xdrs, &objp->am_sattrguard3_u.obj_ctime))
3009      return FALSE;
3010    break;
3011  case FALSE:
3012    break;
3013  default:
3014    return FALSE;
3015  }
3016  return TRUE;
3017}
3018
3019bool_t
3020xdr_am_SETATTR3args(XDR *xdrs, am_SETATTR3args *objp)
3021{
3022  if (amuDebug(D_XDRTRACE))
3023    plog(XLOG_DEBUG, "xdr_am_SETATTR3args:");
3024
3025  if (!xdr_am_nfs_fh3(xdrs, &objp->object))
3026    return FALSE;
3027  if (!xdr_am_sattr3(xdrs, &objp->new_attributes))
3028    return FALSE;
3029  if (!xdr_am_sattrguard3(xdrs, &objp->guard))
3030    return FALSE;
3031  return TRUE;
3032}
3033
3034bool_t
3035xdr_am_SETATTR3resok(XDR *xdrs, am_SETATTR3resok *objp)
3036{
3037  if (amuDebug(D_XDRTRACE))
3038    plog(XLOG_DEBUG, "xdr_am_SETATTR3resok:");
3039
3040  if (!xdr_am_wcc_data(xdrs, &objp->obj_wcc))
3041    return FALSE;
3042  return TRUE;
3043}
3044
3045bool_t
3046xdr_am_SETATTR3resfail(XDR *xdrs, am_SETATTR3resfail *objp)
3047{
3048  if (amuDebug(D_XDRTRACE))
3049    plog(XLOG_DEBUG, "xdr_am_SETATTR3resfail:");
3050
3051  if (!xdr_am_wcc_data(xdrs, &objp->obj_wcc))
3052    return FALSE;
3053  return TRUE;
3054}
3055
3056bool_t
3057xdr_am_SETATTR3res(XDR *xdrs, am_SETATTR3res *objp)
3058{
3059  if (amuDebug(D_XDRTRACE))
3060    plog(XLOG_DEBUG, "xdr_am_SETATTR3res:");
3061
3062  if (!xdr_am_nfsstat3(xdrs, &objp->status))
3063    return FALSE;
3064  switch (objp->status) {
3065  case AM_NFS3_OK:
3066    if (!xdr_am_SETATTR3resok(xdrs, &objp->res_u.ok))
3067      return FALSE;
3068    break;
3069  default:
3070    if (!xdr_am_SETATTR3resfail(xdrs, &objp->res_u.fail))
3071      return FALSE;
3072    break;
3073  }
3074  return TRUE;
3075}
3076#endif /* HAVE_FS_NFS3 */
3077